From 49dfbff4c6c28255ceea6fc7ab9007ceccffddce Mon Sep 17 00:00:00 2001 From: Damodar Lohani Date: Tue, 18 Jul 2023 01:56:00 +0000 Subject: [PATCH] rename App:: to Http:: --- app/cli.php | 2 +- app/config/runtimes.php | 2 +- app/controllers/api/account.php | 80 ++++----- app/controllers/api/avatars.php | 18 +- app/controllers/api/console.php | 12 +- app/controllers/api/databases.php | 102 +++++------ app/controllers/api/functions.php | 58 +++--- app/controllers/api/graphql.php | 18 +- app/controllers/api/health.php | 30 ++-- app/controllers/api/locale.php | 14 +- app/controllers/api/projects.php | 80 ++++----- app/controllers/api/storage.php | 58 +++--- app/controllers/api/teams.php | 30 ++-- app/controllers/api/users.php | 56 +++--- app/controllers/general.php | 28 +-- app/controllers/mock.php | 58 +++--- app/controllers/shared/api.php | 16 +- app/controllers/web/console.php | 4 +- app/controllers/web/home.php | 2 +- app/executor.php | 134 ++++++-------- app/http.php | 26 +-- app/init.php | 190 ++++++++++---------- app/realtime.php | 34 ++-- app/tasks/doctor.php | 44 ++--- app/tasks/maintenance.php | 14 +- app/tasks/migrate.php | 6 +- app/tasks/specs.php | 16 +- app/tasks/ssl.php | 2 +- app/tasks/usage.php | 10 +- app/tasks/vars.php | 2 +- app/workers/builds.php | 6 +- app/workers/certificates.php | 12 +- app/workers/deletes.php | 6 +- app/workers/functions.php | 4 +- app/workers/mails.php | 8 +- app/workers/messaging.php | 6 +- app/workers/webhooks.php | 4 +- docs/tutorials/add-route.md | 32 ++-- src/Appwrite/GraphQL/Resolvers.php | 2 +- src/Appwrite/GraphQL/Schema.php | 2 +- src/Appwrite/Messaging/Adapter/Realtime.php | 2 +- src/Appwrite/Migration/Migration.php | 2 +- src/Appwrite/Migration/Version/V15.php | 2 +- src/Appwrite/Resque/Worker.php | 44 ++--- src/Appwrite/Usage/Stats.php | 2 +- src/Executor/Executor.php | 8 +- tests/e2e/General/AbuseTest.php | 2 +- tests/e2e/Services/GraphQL/AbuseTest.php | 6 +- tests/unit/Event/EventTest.php | 4 +- tests/unit/Usage/StatsTest.php | 4 +- 50 files changed, 641 insertions(+), 663 deletions(-) diff --git a/app/cli.php b/app/cli.php index f4b4efb206..8dca9c4335 100644 --- a/app/cli.php +++ b/app/cli.php @@ -26,7 +26,7 @@ $cli ->task('version') ->desc('Get the server version') ->action(function () { - Console::log(App::getEnv('_APP_VERSION', 'UNKNOWN')); + Console::log(Http::getEnv('_APP_VERSION', 'UNKNOWN')); }); $cli->run(); diff --git a/app/config/runtimes.php b/app/config/runtimes.php index 3752d0849f..c94baf3429 100644 --- a/app/config/runtimes.php +++ b/app/config/runtimes.php @@ -9,7 +9,7 @@ use Appwrite\Runtimes\Runtimes; $runtimes = new Runtimes('v2'); -$allowList = empty(App::getEnv('_APP_FUNCTIONS_RUNTIMES')) ? [] : \explode(',', App::getEnv('_APP_FUNCTIONS_RUNTIMES')); +$allowList = empty(Http::getEnv('_APP_FUNCTIONS_RUNTIMES')) ? [] : \explode(',', Http::getEnv('_APP_FUNCTIONS_RUNTIMES')); $runtimes = $runtimes->getAll(true, $allowList); diff --git a/app/controllers/api/account.php b/app/controllers/api/account.php index aa6b4fbf4d..70c8f09456 100644 --- a/app/controllers/api/account.php +++ b/app/controllers/api/account.php @@ -46,7 +46,7 @@ use Appwrite\Auth\Validator\PasswordDictionary; $oauthDefaultSuccess = '/auth/oauth2/success'; $oauthDefaultFailure = '/auth/oauth2/failure'; -App::post('/v1/account') +Http::post('/v1/account') ->desc('Create Account') ->groups(['api', 'account', 'auth']) ->label('event', 'users.[userId].create') @@ -141,7 +141,7 @@ App::post('/v1/account') ->dynamic($user, Response::MODEL_ACCOUNT); }); -App::post('/v1/account/sessions/email') +Http::post('/v1/account/sessions/email') ->alias('/v1/account/sessions') ->desc('Create Email Session') ->groups(['api', 'account', 'auth', 'session']) @@ -259,7 +259,7 @@ App::post('/v1/account/sessions/email') $response->dynamic($session, Response::MODEL_SESSION); }); -App::get('/v1/account/sessions/oauth2/:provider') +Http::get('/v1/account/sessions/oauth2/:provider') ->desc('Create OAuth2 Session') ->groups(['api', 'account']) ->label('error', __DIR__ . '/../../views/general/error.phtml') @@ -294,7 +294,7 @@ App::get('/v1/account/sessions/oauth2/:provider') $appSecret = $project->getAttribute('authProviders', [])[$provider . 'Secret'] ?? '{}'; if (!empty($appSecret) && isset($appSecret['version'])) { - $key = App::getEnv('_APP_OPENSSL_KEY_V' . $appSecret['version']); + $key = Http::getEnv('_APP_OPENSSL_KEY_V' . $appSecret['version']); $appSecret = OpenSSL::decrypt($appSecret['data'], $appSecret['method'], $key, 0, \hex2bin($appSecret['iv']), \hex2bin($appSecret['tag'])); } @@ -324,7 +324,7 @@ App::get('/v1/account/sessions/oauth2/:provider') ->redirect($oauth2->getLoginURL()); }); -App::get('/v1/account/sessions/oauth2/callback/:provider/:projectId') +Http::get('/v1/account/sessions/oauth2/callback/:provider/:projectId') ->desc('OAuth2 Callback') ->groups(['api', 'account']) ->label('error', __DIR__ . '/../../views/general/error.phtml') @@ -348,7 +348,7 @@ App::get('/v1/account/sessions/oauth2/callback/:provider/:projectId') . \http_build_query(['project' => $projectId, 'code' => $code, 'state' => $state])); }); -App::post('/v1/account/sessions/oauth2/callback/:provider/:projectId') +Http::post('/v1/account/sessions/oauth2/callback/:provider/:projectId') ->desc('OAuth2 Callback') ->groups(['api', 'account']) ->label('error', __DIR__ . '/../../views/general/error.phtml') @@ -373,7 +373,7 @@ App::post('/v1/account/sessions/oauth2/callback/:provider/:projectId') . \http_build_query(['project' => $projectId, 'code' => $code, 'state' => $state])); }); -App::get('/v1/account/sessions/oauth2/:provider/redirect') +Http::get('/v1/account/sessions/oauth2/:provider/redirect') ->desc('OAuth2 Redirect') ->groups(['api', 'account', 'session']) ->label('error', __DIR__ . '/../../views/general/error.phtml') @@ -412,7 +412,7 @@ App::get('/v1/account/sessions/oauth2/:provider/redirect') } if (!empty($appSecret) && isset($appSecret['version'])) { - $key = App::getEnv('_APP_OPENSSL_KEY_V' . $appSecret['version']); + $key = Http::getEnv('_APP_OPENSSL_KEY_V' . $appSecret['version']); $appSecret = OpenSSL::decrypt($appSecret['data'], $appSecret['method'], $key, 0, \hex2bin($appSecret['iv']), \hex2bin($appSecret['tag'])); } @@ -624,7 +624,7 @@ App::get('/v1/account/sessions/oauth2/:provider/redirect') ; }); -App::post('/v1/account/sessions/magic-url') +Http::post('/v1/account/sessions/magic-url') ->desc('Create Magic URL session') ->groups(['api', 'account']) ->label('scope', 'public') @@ -653,7 +653,7 @@ App::post('/v1/account/sessions/magic-url') ->inject('mails') ->action(function (string $userId, string $email, string $url, Request $request, Response $response, Document $project, Database $dbForProject, Locale $locale, Event $events, Mail $mails) { - if (empty(App::getEnv('_APP_SMTP_HOST'))) { + if (empty(Http::getEnv('_APP_SMTP_HOST'))) { throw new Exception(Exception::GENERAL_SMTP_DISABLED, 'SMTP disabled'); } @@ -779,7 +779,7 @@ App::post('/v1/account/sessions/magic-url') ; }); -App::put('/v1/account/sessions/magic-url') +Http::put('/v1/account/sessions/magic-url') ->desc('Create Magic URL session (confirmation)') ->groups(['api', 'account', 'session']) ->label('scope', 'public') @@ -901,7 +901,7 @@ App::put('/v1/account/sessions/magic-url') $response->dynamic($session, Response::MODEL_SESSION); }); -App::post('/v1/account/sessions/phone') +Http::post('/v1/account/sessions/phone') ->desc('Create Phone session') ->groups(['api', 'account']) ->label('scope', 'public') @@ -928,7 +928,7 @@ App::post('/v1/account/sessions/phone') ->inject('messaging') ->action(function (string $userId, string $phone, Request $request, Response $response, Document $project, Database $dbForProject, Event $events, EventPhone $messaging) { - if (empty(App::getEnv('_APP_SMS_PROVIDER'))) { + if (empty(Http::getEnv('_APP_SMS_PROVIDER'))) { throw new Exception(Exception::GENERAL_PHONE_DISABLED, 'Phone provider not configured'); } @@ -1021,7 +1021,7 @@ App::post('/v1/account/sessions/phone') ; }); -App::put('/v1/account/sessions/phone') +Http::put('/v1/account/sessions/phone') ->desc('Create Phone Session (confirmation)') ->groups(['api', 'account', 'session']) ->label('scope', 'public') @@ -1136,7 +1136,7 @@ App::put('/v1/account/sessions/phone') $response->dynamic($session, Response::MODEL_SESSION); }); -App::post('/v1/account/sessions/anonymous') +Http::post('/v1/account/sessions/anonymous') ->desc('Create Anonymous Session') ->groups(['api', 'account', 'auth', 'session']) ->label('event', 'users.[userId].sessions.[sessionId].create') @@ -1270,7 +1270,7 @@ App::post('/v1/account/sessions/anonymous') $response->dynamic($session, Response::MODEL_SESSION); }); -App::post('/v1/account/jwt') +Http::post('/v1/account/jwt') ->desc('Create JWT') ->groups(['api', 'account', 'auth']) ->label('scope', 'account') @@ -1303,7 +1303,7 @@ App::post('/v1/account/jwt') throw new Exception(Exception::USER_SESSION_NOT_FOUND); } - $jwt = new JWT(App::getEnv('_APP_OPENSSL_KEY_V1'), 'HS256', 900, 10); // Instantiate with key, algo, maxAge and leeway. + $jwt = new JWT(Http::getEnv('_APP_OPENSSL_KEY_V1'), 'HS256', 900, 10); // Instantiate with key, algo, maxAge and leeway. $response ->setStatusCode(Response::STATUS_CODE_CREATED) @@ -1317,7 +1317,7 @@ App::post('/v1/account/jwt') ])]), Response::MODEL_JWT); }); -App::get('/v1/account') +Http::get('/v1/account') ->desc('Get Account') ->groups(['api', 'account']) ->label('scope', 'account') @@ -1338,7 +1338,7 @@ App::get('/v1/account') $response->dynamic($user, Response::MODEL_ACCOUNT); }); -App::get('/v1/account/prefs') +Http::get('/v1/account/prefs') ->desc('Get Account Preferences') ->groups(['api', 'account']) ->label('scope', 'account') @@ -1361,7 +1361,7 @@ App::get('/v1/account/prefs') $response->dynamic(new Document($prefs), Response::MODEL_PREFERENCES); }); -App::get('/v1/account/sessions') +Http::get('/v1/account/sessions') ->desc('List Sessions') ->groups(['api', 'account']) ->label('scope', 'account') @@ -1399,7 +1399,7 @@ App::get('/v1/account/sessions') ]), Response::MODEL_SESSION_LIST); }); -App::get('/v1/account/logs') +Http::get('/v1/account/logs') ->desc('List Logs') ->groups(['api', 'account']) ->label('scope', 'account') @@ -1460,7 +1460,7 @@ App::get('/v1/account/logs') ]), Response::MODEL_LOG_LIST); }); -App::get('/v1/account/sessions/:sessionId') +Http::get('/v1/account/sessions/:sessionId') ->desc('Get Session') ->groups(['api', 'account']) ->label('scope', 'account') @@ -1505,7 +1505,7 @@ App::get('/v1/account/sessions/:sessionId') throw new Exception(Exception::USER_SESSION_NOT_FOUND); }); -App::patch('/v1/account/name') +Http::patch('/v1/account/name') ->desc('Update Name') ->groups(['api', 'account']) ->label('event', 'users.[userId].update.name') @@ -1542,7 +1542,7 @@ App::patch('/v1/account/name') $response->dynamic($user, Response::MODEL_ACCOUNT); }); -App::patch('/v1/account/password') +Http::patch('/v1/account/password') ->desc('Update Password') ->groups(['api', 'account']) ->label('event', 'users.[userId].update.password') @@ -1603,7 +1603,7 @@ App::patch('/v1/account/password') $response->dynamic($user, Response::MODEL_ACCOUNT); }); -App::patch('/v1/account/email') +Http::patch('/v1/account/email') ->desc('Update Email') ->groups(['api', 'account']) ->label('event', 'users.[userId].update.email') @@ -1659,7 +1659,7 @@ App::patch('/v1/account/email') $response->dynamic($user, Response::MODEL_ACCOUNT); }); -App::patch('/v1/account/phone') +Http::patch('/v1/account/phone') ->desc('Update Phone') ->groups(['api', 'account']) ->label('event', 'users.[userId].update.phone') @@ -1711,7 +1711,7 @@ App::patch('/v1/account/phone') $response->dynamic($user, Response::MODEL_ACCOUNT); }); -App::patch('/v1/account/prefs') +Http::patch('/v1/account/prefs') ->desc('Update Preferences') ->groups(['api', 'account']) ->label('event', 'users.[userId].update.prefs') @@ -1746,7 +1746,7 @@ App::patch('/v1/account/prefs') $response->dynamic($user, Response::MODEL_ACCOUNT); }); -App::patch('/v1/account/status') +Http::patch('/v1/account/status') ->desc('Update Status') ->groups(['api', 'account']) ->label('event', 'users.[userId].update.status') @@ -1791,7 +1791,7 @@ App::patch('/v1/account/status') $response->dynamic($user, Response::MODEL_ACCOUNT); }); -App::delete('/v1/account/sessions/:sessionId') +Http::delete('/v1/account/sessions/:sessionId') ->desc('Delete Session') ->groups(['api', 'account']) ->label('scope', 'account') @@ -1868,7 +1868,7 @@ App::delete('/v1/account/sessions/:sessionId') throw new Exception(Exception::USER_SESSION_NOT_FOUND); }); -App::patch('/v1/account/sessions/:sessionId') +Http::patch('/v1/account/sessions/:sessionId') ->desc('Update OAuth Session (Refresh Tokens)') ->groups(['api', 'account']) ->label('scope', 'account') @@ -1954,7 +1954,7 @@ App::patch('/v1/account/sessions/:sessionId') throw new Exception(Exception::USER_SESSION_NOT_FOUND); }); -App::delete('/v1/account/sessions') +Http::delete('/v1/account/sessions') ->desc('Delete Sessions') ->groups(['api', 'account']) ->label('scope', 'account') @@ -2016,7 +2016,7 @@ App::delete('/v1/account/sessions') $response->noContent(); }); -App::post('/v1/account/recovery') +Http::post('/v1/account/recovery') ->desc('Create Password Recovery') ->groups(['api', 'account']) ->label('scope', 'public') @@ -2045,7 +2045,7 @@ App::post('/v1/account/recovery') ->inject('events') ->action(function (string $email, string $url, Request $request, Response $response, Database $dbForProject, Document $project, Locale $locale, Mail $mails, Event $events) { - if (empty(App::getEnv('_APP_SMTP_HOST'))) { + if (empty(Http::getEnv('_APP_SMTP_HOST'))) { throw new Exception(Exception::GENERAL_SMTP_DISABLED, 'SMTP Disabled'); } @@ -2146,7 +2146,7 @@ App::post('/v1/account/recovery') ->dynamic($recovery, Response::MODEL_TOKEN); }); -App::put('/v1/account/recovery') +Http::put('/v1/account/recovery') ->desc('Create Password Recovery (confirmation)') ->groups(['api', 'account']) ->label('scope', 'public') @@ -2215,7 +2215,7 @@ App::put('/v1/account/recovery') $response->dynamic($recoveryDocument, Response::MODEL_TOKEN); }); -App::post('/v1/account/verification') +Http::post('/v1/account/verification') ->desc('Create Email Verification') ->groups(['api', 'account']) ->label('scope', 'account') @@ -2244,7 +2244,7 @@ App::post('/v1/account/verification') ->inject('mails') ->action(function (string $url, Request $request, Response $response, Document $project, Document $user, Database $dbForProject, Locale $locale, Event $events, Mail $mails) { - if (empty(App::getEnv('_APP_SMTP_HOST'))) { + if (empty(Http::getEnv('_APP_SMTP_HOST'))) { throw new Exception(Exception::GENERAL_SMTP_DISABLED, 'SMTP Disabled'); } @@ -2327,7 +2327,7 @@ App::post('/v1/account/verification') ->dynamic($verification, Response::MODEL_TOKEN); }); -App::put('/v1/account/verification') +Http::put('/v1/account/verification') ->desc('Create Email Verification (confirmation)') ->groups(['api', 'account']) ->label('scope', 'public') @@ -2387,7 +2387,7 @@ App::put('/v1/account/verification') $response->dynamic($verificationDocument, Response::MODEL_TOKEN); }); -App::post('/v1/account/verification/phone') +Http::post('/v1/account/verification/phone') ->desc('Create Phone Verification') ->groups(['api', 'account']) ->label('scope', 'account') @@ -2413,7 +2413,7 @@ App::post('/v1/account/verification/phone') ->inject('messaging') ->action(function (Request $request, Response $response, Document $user, Database $dbForProject, Event $events, EventPhone $messaging) { - if (empty(App::getEnv('_APP_SMS_PROVIDER'))) { + if (empty(Http::getEnv('_APP_SMS_PROVIDER'))) { throw new Exception(Exception::GENERAL_PHONE_DISABLED); } @@ -2473,7 +2473,7 @@ App::post('/v1/account/verification/phone') ->dynamic($verification, Response::MODEL_TOKEN); }); -App::put('/v1/account/verification/phone') +Http::put('/v1/account/verification/phone') ->desc('Create Phone Verification (confirmation)') ->groups(['api', 'account']) ->label('scope', 'public') diff --git a/app/controllers/api/avatars.php b/app/controllers/api/avatars.php index 87d731ccbd..2800672ac6 100644 --- a/app/controllers/api/avatars.php +++ b/app/controllers/api/avatars.php @@ -54,7 +54,7 @@ $avatarCallback = function (string $type, string $code, int $width, int $height, unset($image); }; -App::get('/v1/avatars/credit-cards/:code') +Http::get('/v1/avatars/credit-cards/:code') ->desc('Get Credit Card Icon') ->groups(['api', 'avatars']) ->label('scope', 'avatars.read') @@ -74,7 +74,7 @@ App::get('/v1/avatars/credit-cards/:code') ->inject('response') ->action(fn (string $code, int $width, int $height, int $quality, Response $response) => $avatarCallback('credit-cards', $code, $width, $height, $quality, $response)); -App::get('/v1/avatars/browsers/:code') +Http::get('/v1/avatars/browsers/:code') ->desc('Get Browser Icon') ->groups(['api', 'avatars']) ->label('scope', 'avatars.read') @@ -94,7 +94,7 @@ App::get('/v1/avatars/browsers/:code') ->inject('response') ->action(fn (string $code, int $width, int $height, int $quality, Response $response) => $avatarCallback('browsers', $code, $width, $height, $quality, $response)); -App::get('/v1/avatars/flags/:code') +Http::get('/v1/avatars/flags/:code') ->desc('Get Country Flag') ->groups(['api', 'avatars']) ->label('scope', 'avatars.read') @@ -114,7 +114,7 @@ App::get('/v1/avatars/flags/:code') ->inject('response') ->action(fn (string $code, int $width, int $height, int $quality, Response $response) => $avatarCallback('flags', $code, $width, $height, $quality, $response)); -App::get('/v1/avatars/image') +Http::get('/v1/avatars/image') ->desc('Get Image from URL') ->groups(['api', 'avatars']) ->label('scope', 'avatars.read') @@ -165,7 +165,7 @@ App::get('/v1/avatars/image') unset($image); }); -App::get('/v1/avatars/favicon') +Http::get('/v1/avatars/favicon') ->desc('Get Favicon') ->groups(['api', 'avatars']) ->label('scope', 'avatars.read') @@ -201,8 +201,8 @@ App::get('/v1/avatars/favicon') CURLOPT_URL => $url, CURLOPT_USERAGENT => \sprintf( APP_USERAGENT, - App::getEnv('_APP_VERSION', 'UNKNOWN'), - App::getEnv('_APP_SYSTEM_SECURITY_EMAIL_ADDRESS', APP_EMAIL_SECURITY) + Http::getEnv('_APP_VERSION', 'UNKNOWN'), + Http::getEnv('_APP_SYSTEM_SECURITY_EMAIL_ADDRESS', APP_EMAIL_SECURITY) ), ]); @@ -297,7 +297,7 @@ App::get('/v1/avatars/favicon') unset($image); }); -App::get('/v1/avatars/qr') +Http::get('/v1/avatars/qr') ->desc('Get QR Code') ->groups(['api', 'avatars']) ->label('scope', 'avatars.read') @@ -338,7 +338,7 @@ App::get('/v1/avatars/qr') ; }); -App::get('/v1/avatars/initials') +Http::get('/v1/avatars/initials') ->desc('Get User Initials') ->groups(['api', 'avatars']) ->label('scope', 'avatars.read') diff --git a/app/controllers/api/console.php b/app/controllers/api/console.php index fdc6d32022..ae4bee2ea3 100644 --- a/app/controllers/api/console.php +++ b/app/controllers/api/console.php @@ -5,7 +5,7 @@ use Appwrite\Utopia\Response; use Utopia\Http\Http; use Utopia\Database\Document; -App::init() +Http::init() ->groups(['console']) ->inject('project') ->action(function (Document $project) { @@ -15,7 +15,7 @@ App::init() }); -App::get('/v1/console/variables') +Http::get('/v1/console/variables') ->desc('Get Variables') ->groups(['api', 'projects']) ->label('scope', 'projects.read') @@ -30,10 +30,10 @@ App::get('/v1/console/variables') ->action(function (Response $response) { $variables = new Document([ - '_APP_DOMAIN_TARGET' => App::getEnv('_APP_DOMAIN_TARGET'), - '_APP_STORAGE_LIMIT' => +App::getEnv('_APP_STORAGE_LIMIT'), - '_APP_FUNCTIONS_SIZE_LIMIT' => +App::getEnv('_APP_FUNCTIONS_SIZE_LIMIT'), - '_APP_USAGE_STATS' => App::getEnv('_APP_USAGE_STATS'), + '_APP_DOMAIN_TARGET' => Http::getEnv('_APP_DOMAIN_TARGET'), + '_APP_STORAGE_LIMIT' => +Http::getEnv('_APP_STORAGE_LIMIT'), + '_APP_FUNCTIONS_SIZE_LIMIT' => +Http::getEnv('_APP_FUNCTIONS_SIZE_LIMIT'), + '_APP_USAGE_STATS' => Http::getEnv('_APP_USAGE_STATS'), ]); $response->dynamic($variables, Response::MODEL_CONSOLE_VARIABLES); diff --git a/app/controllers/api/databases.php b/app/controllers/api/databases.php index ac14ed062d..e0bb77fd60 100644 --- a/app/controllers/api/databases.php +++ b/app/controllers/api/databases.php @@ -368,7 +368,7 @@ function updateAttribute( return $attribute; } -App::post('/v1/databases') +Http::post('/v1/databases') ->desc('Create Database') ->groups(['api', 'database']) ->label('event', 'databases.[databaseId].create') @@ -445,7 +445,7 @@ App::post('/v1/databases') ->dynamic($database, Response::MODEL_DATABASE); }); -App::get('/v1/databases') +Http::get('/v1/databases') ->desc('List Databases') ->groups(['api', 'database']) ->label('scope', 'databases.read') @@ -492,7 +492,7 @@ App::get('/v1/databases') ]), Response::MODEL_DATABASE_LIST); }); -App::get('/v1/databases/:databaseId') +Http::get('/v1/databases/:databaseId') ->desc('Get Database') ->groups(['api', 'database']) ->label('scope', 'databases.read') @@ -518,7 +518,7 @@ App::get('/v1/databases/:databaseId') $response->dynamic($database, Response::MODEL_DATABASE); }); -App::get('/v1/databases/:databaseId/logs') +Http::get('/v1/databases/:databaseId/logs') ->desc('List Database Logs') ->groups(['api', 'database']) ->label('scope', 'databases.read') @@ -604,7 +604,7 @@ App::get('/v1/databases/:databaseId/logs') }); -App::put('/v1/databases/:databaseId') +Http::put('/v1/databases/:databaseId') ->desc('Update Database') ->groups(['api', 'database', 'schema']) ->label('scope', 'databases.write') @@ -649,7 +649,7 @@ App::put('/v1/databases/:databaseId') $response->dynamic($database, Response::MODEL_DATABASE); }); -App::delete('/v1/databases/:databaseId') +Http::delete('/v1/databases/:databaseId') ->desc('Delete Database') ->groups(['api', 'database', 'schema']) ->label('scope', 'databases.write') @@ -696,7 +696,7 @@ App::delete('/v1/databases/:databaseId') $response->noContent(); }); -App::post('/v1/databases/:databaseId/collections') +Http::post('/v1/databases/:databaseId/collections') ->alias('/v1/database/collections', ['databaseId' => 'default']) ->desc('Create Collection') ->groups(['api', 'database']) @@ -766,7 +766,7 @@ App::post('/v1/databases/:databaseId/collections') ->dynamic($collection, Response::MODEL_COLLECTION); }); -App::get('/v1/databases/:databaseId/collections') +Http::get('/v1/databases/:databaseId/collections') ->alias('/v1/database/collections', ['databaseId' => 'default']) ->desc('List Collections') ->groups(['api', 'database']) @@ -823,7 +823,7 @@ App::get('/v1/databases/:databaseId/collections') ]), Response::MODEL_COLLECTION_LIST); }); -App::get('/v1/databases/:databaseId/collections/:collectionId') +Http::get('/v1/databases/:databaseId/collections/:collectionId') ->alias('/v1/database/collections/:collectionId', ['databaseId' => 'default']) ->desc('Get Collection') ->groups(['api', 'database']) @@ -859,7 +859,7 @@ App::get('/v1/databases/:databaseId/collections/:collectionId') $response->dynamic($collection, Response::MODEL_COLLECTION); }); -App::get('/v1/databases/:databaseId/collections/:collectionId/logs') +Http::get('/v1/databases/:databaseId/collections/:collectionId/logs') ->alias('/v1/database/collections/:collectionId/logs', ['databaseId' => 'default']) ->desc('List Collection Logs') ->groups(['api', 'database']) @@ -955,7 +955,7 @@ App::get('/v1/databases/:databaseId/collections/:collectionId/logs') }); -App::put('/v1/databases/:databaseId/collections/:collectionId') +Http::put('/v1/databases/:databaseId/collections/:collectionId') ->alias('/v1/database/collections/:collectionId', ['databaseId' => 'default']) ->desc('Update Collection') ->groups(['api', 'database', 'schema']) @@ -1025,7 +1025,7 @@ App::put('/v1/databases/:databaseId/collections/:collectionId') $response->dynamic($collection, Response::MODEL_COLLECTION); }); -App::delete('/v1/databases/:databaseId/collections/:collectionId') +Http::delete('/v1/databases/:databaseId/collections/:collectionId') ->alias('/v1/database/collections/:collectionId', ['databaseId' => 'default']) ->desc('Delete Collection') ->groups(['api', 'database', 'schema']) @@ -1081,7 +1081,7 @@ App::delete('/v1/databases/:databaseId/collections/:collectionId') $response->noContent(); }); -App::post('/v1/databases/:databaseId/collections/:collectionId/attributes/string') +Http::post('/v1/databases/:databaseId/collections/:collectionId/attributes/string') ->alias('/v1/database/collections/:collectionId/attributes/string', ['databaseId' => 'default']) ->desc('Create String Attribute') ->groups(['api', 'database', 'schema']) @@ -1131,7 +1131,7 @@ App::post('/v1/databases/:databaseId/collections/:collectionId/attributes/string ->dynamic($attribute, Response::MODEL_ATTRIBUTE_STRING); }); -App::post('/v1/databases/:databaseId/collections/:collectionId/attributes/email') +Http::post('/v1/databases/:databaseId/collections/:collectionId/attributes/email') ->alias('/v1/database/collections/:collectionId/attributes/email', ['databaseId' => 'default']) ->desc('Create Email Attribute') ->groups(['api', 'database', 'schema']) @@ -1175,7 +1175,7 @@ App::post('/v1/databases/:databaseId/collections/:collectionId/attributes/email' ->dynamic($attribute, Response::MODEL_ATTRIBUTE_EMAIL); }); -App::post('/v1/databases/:databaseId/collections/:collectionId/attributes/enum') +Http::post('/v1/databases/:databaseId/collections/:collectionId/attributes/enum') ->alias('/v1/database/collections/:collectionId/attributes/enum', ['databaseId' => 'default']) ->desc('Create Enum Attribute') ->groups(['api', 'database', 'schema']) @@ -1235,7 +1235,7 @@ App::post('/v1/databases/:databaseId/collections/:collectionId/attributes/enum') ->dynamic($attribute, Response::MODEL_ATTRIBUTE_ENUM); }); -App::post('/v1/databases/:databaseId/collections/:collectionId/attributes/ip') +Http::post('/v1/databases/:databaseId/collections/:collectionId/attributes/ip') ->alias('/v1/database/collections/:collectionId/attributes/ip', ['databaseId' => 'default']) ->desc('Create IP Address Attribute') ->groups(['api', 'database', 'schema']) @@ -1279,7 +1279,7 @@ App::post('/v1/databases/:databaseId/collections/:collectionId/attributes/ip') ->dynamic($attribute, Response::MODEL_ATTRIBUTE_IP); }); -App::post('/v1/databases/:databaseId/collections/:collectionId/attributes/url') +Http::post('/v1/databases/:databaseId/collections/:collectionId/attributes/url') ->alias('/v1/database/collections/:collectionId/attributes/url', ['databaseId' => 'default']) ->desc('Create URL Attribute') ->groups(['api', 'database', 'schema']) @@ -1323,7 +1323,7 @@ App::post('/v1/databases/:databaseId/collections/:collectionId/attributes/url') ->dynamic($attribute, Response::MODEL_ATTRIBUTE_URL); }); -App::post('/v1/databases/:databaseId/collections/:collectionId/attributes/integer') +Http::post('/v1/databases/:databaseId/collections/:collectionId/attributes/integer') ->alias('/v1/database/collections/:collectionId/attributes/integer', ['databaseId' => 'default']) ->desc('Create Integer Attribute') ->groups(['api', 'database', 'schema']) @@ -1396,7 +1396,7 @@ App::post('/v1/databases/:databaseId/collections/:collectionId/attributes/intege ->dynamic($attribute, Response::MODEL_ATTRIBUTE_INTEGER); }); -App::post('/v1/databases/:databaseId/collections/:collectionId/attributes/float') +Http::post('/v1/databases/:databaseId/collections/:collectionId/attributes/float') ->alias('/v1/database/collections/:collectionId/attributes/float', ['databaseId' => 'default']) ->desc('Create Float Attribute') ->groups(['api', 'database', 'schema']) @@ -1472,7 +1472,7 @@ App::post('/v1/databases/:databaseId/collections/:collectionId/attributes/float' ->dynamic($attribute, Response::MODEL_ATTRIBUTE_FLOAT); }); -App::post('/v1/databases/:databaseId/collections/:collectionId/attributes/boolean') +Http::post('/v1/databases/:databaseId/collections/:collectionId/attributes/boolean') ->alias('/v1/database/collections/:collectionId/attributes/boolean', ['databaseId' => 'default']) ->desc('Create Boolean Attribute') ->groups(['api', 'database', 'schema']) @@ -1515,7 +1515,7 @@ App::post('/v1/databases/:databaseId/collections/:collectionId/attributes/boolea ->dynamic($attribute, Response::MODEL_ATTRIBUTE_BOOLEAN); }); -App::post('/v1/databases/:databaseId/collections/:collectionId/attributes/datetime') +Http::post('/v1/databases/:databaseId/collections/:collectionId/attributes/datetime') ->alias('/v1/database/collections/:collectionId/attributes/datetime', ['databaseId' => 'default']) ->desc('Create DateTime Attribute') ->groups(['api', 'database']) @@ -1559,7 +1559,7 @@ App::post('/v1/databases/:databaseId/collections/:collectionId/attributes/dateti ->dynamic($attribute, Response::MODEL_ATTRIBUTE_DATETIME); }); -App::post('/v1/databases/:databaseId/collections/:collectionId/attributes/relationship') +Http::post('/v1/databases/:databaseId/collections/:collectionId/attributes/relationship') ->alias('/v1/database/collections/:collectionId/attributes/relationship', ['databaseId' => 'default']) ->desc('Create Relationship Attribute') ->groups(['api', 'database']) @@ -1641,7 +1641,7 @@ App::post('/v1/databases/:databaseId/collections/:collectionId/attributes/relati ->dynamic($attribute, Response::MODEL_ATTRIBUTE_RELATIONSHIP); }); -App::get('/v1/databases/:databaseId/collections/:collectionId/attributes') +Http::get('/v1/databases/:databaseId/collections/:collectionId/attributes') ->alias('/v1/database/collections/:collectionId/attributes', ['databaseId' => 'default']) ->desc('List Attributes') ->groups(['api', 'database']) @@ -1681,7 +1681,7 @@ App::get('/v1/databases/:databaseId/collections/:collectionId/attributes') ]), Response::MODEL_ATTRIBUTE_LIST); }); -App::get('/v1/databases/:databaseId/collections/:collectionId/attributes/:key') +Http::get('/v1/databases/:databaseId/collections/:collectionId/attributes/:key') ->alias('/v1/database/collections/:collectionId/attributes/:key', ['databaseId' => 'default']) ->desc('Get Attribute') ->groups(['api', 'database']) @@ -1758,7 +1758,7 @@ App::get('/v1/databases/:databaseId/collections/:collectionId/attributes/:key') $response->dynamic($attribute, $model); }); -App::patch('/v1/databases/:databaseId/collections/:collectionId/attributes/string/:key') +Http::patch('/v1/databases/:databaseId/collections/:collectionId/attributes/string/:key') ->desc('Update String Attribute') ->groups(['api', 'database', 'schema']) ->label('scope', 'collections.write') @@ -1798,7 +1798,7 @@ App::patch('/v1/databases/:databaseId/collections/:collectionId/attributes/strin ->dynamic($attribute, Response::MODEL_ATTRIBUTE_STRING); }); -App::patch('/v1/databases/:databaseId/collections/:collectionId/attributes/email/:key') +Http::patch('/v1/databases/:databaseId/collections/:collectionId/attributes/email/:key') ->desc('Update Email Attribute') ->groups(['api', 'database', 'schema']) ->label('scope', 'collections.write') @@ -1839,7 +1839,7 @@ App::patch('/v1/databases/:databaseId/collections/:collectionId/attributes/email ->dynamic($attribute, Response::MODEL_ATTRIBUTE_EMAIL); }); -App::patch('/v1/databases/:databaseId/collections/:collectionId/attributes/enum/:key') +Http::patch('/v1/databases/:databaseId/collections/:collectionId/attributes/enum/:key') ->desc('Update Enum Attribute') ->groups(['api', 'database', 'schema']) ->label('scope', 'collections.write') @@ -1882,7 +1882,7 @@ App::patch('/v1/databases/:databaseId/collections/:collectionId/attributes/enum/ ->dynamic($attribute, Response::MODEL_ATTRIBUTE_ENUM); }); -App::patch('/v1/databases/:databaseId/collections/:collectionId/attributes/ip/:key') +Http::patch('/v1/databases/:databaseId/collections/:collectionId/attributes/ip/:key') ->desc('Update IP Address Attribute') ->groups(['api', 'database', 'schema']) ->label('scope', 'collections.write') @@ -1923,7 +1923,7 @@ App::patch('/v1/databases/:databaseId/collections/:collectionId/attributes/ip/:k ->dynamic($attribute, Response::MODEL_ATTRIBUTE_IP); }); -App::patch('/v1/databases/:databaseId/collections/:collectionId/attributes/url/:key') +Http::patch('/v1/databases/:databaseId/collections/:collectionId/attributes/url/:key') ->desc('Update URL Attribute') ->groups(['api', 'database', 'schema']) ->label('scope', 'collections.write') @@ -1964,7 +1964,7 @@ App::patch('/v1/databases/:databaseId/collections/:collectionId/attributes/url/: ->dynamic($attribute, Response::MODEL_ATTRIBUTE_URL); }); -App::patch('/v1/databases/:databaseId/collections/:collectionId/attributes/integer/:key') +Http::patch('/v1/databases/:databaseId/collections/:collectionId/attributes/integer/:key') ->desc('Update Integer Attribute') ->groups(['api', 'database', 'schema']) ->label('scope', 'collections.write') @@ -2015,7 +2015,7 @@ App::patch('/v1/databases/:databaseId/collections/:collectionId/attributes/integ ->dynamic($attribute, Response::MODEL_ATTRIBUTE_INTEGER); }); -App::patch('/v1/databases/:databaseId/collections/:collectionId/attributes/float/:key') +Http::patch('/v1/databases/:databaseId/collections/:collectionId/attributes/float/:key') ->desc('Update Float Attribute') ->groups(['api', 'database', 'schema']) ->label('scope', 'collections.write') @@ -2066,7 +2066,7 @@ App::patch('/v1/databases/:databaseId/collections/:collectionId/attributes/float ->dynamic($attribute, Response::MODEL_ATTRIBUTE_FLOAT); }); -App::patch('/v1/databases/:databaseId/collections/:collectionId/attributes/boolean/:key') +Http::patch('/v1/databases/:databaseId/collections/:collectionId/attributes/boolean/:key') ->desc('Update Boolean Attribute') ->groups(['api', 'database', 'schema']) ->label('scope', 'collections.write') @@ -2106,7 +2106,7 @@ App::patch('/v1/databases/:databaseId/collections/:collectionId/attributes/boole ->dynamic($attribute, Response::MODEL_ATTRIBUTE_BOOLEAN); }); -App::patch('/v1/databases/:databaseId/collections/:collectionId/attributes/datetime/:key') +Http::patch('/v1/databases/:databaseId/collections/:collectionId/attributes/datetime/:key') ->desc('Update DateTime Attribute') ->groups(['api', 'database', 'schema']) ->label('scope', 'collections.write') @@ -2146,7 +2146,7 @@ App::patch('/v1/databases/:databaseId/collections/:collectionId/attributes/datet ->dynamic($attribute, Response::MODEL_ATTRIBUTE_DATETIME); }); -App::patch('/v1/databases/:databaseId/collections/:collectionId/attributes/:key/relationship') +Http::patch('/v1/databases/:databaseId/collections/:collectionId/attributes/:key/relationship') ->desc('Update Relationship Attribute') ->groups(['api', 'database', 'schema']) ->label('scope', 'collections.write') @@ -2201,7 +2201,7 @@ App::patch('/v1/databases/:databaseId/collections/:collectionId/attributes/:key/ ->dynamic($attribute, Response::MODEL_ATTRIBUTE_RELATIONSHIP); }); -App::delete('/v1/databases/:databaseId/collections/:collectionId/attributes/:key') +Http::delete('/v1/databases/:databaseId/collections/:collectionId/attributes/:key') ->alias('/v1/database/collections/:collectionId/attributes/:key', ['databaseId' => 'default']) ->desc('Delete Attribute') ->groups(['api', 'database', 'schema']) @@ -2312,7 +2312,7 @@ App::delete('/v1/databases/:databaseId/collections/:collectionId/attributes/:key $response->noContent(); }); -App::post('/v1/databases/:databaseId/collections/:collectionId/indexes') +Http::post('/v1/databases/:databaseId/collections/:collectionId/indexes') ->alias('/v1/database/collections/:collectionId/indexes', ['databaseId' => 'default']) ->desc('Create Index') ->groups(['api', 'database']) @@ -2464,7 +2464,7 @@ App::post('/v1/databases/:databaseId/collections/:collectionId/indexes') ->dynamic($index, Response::MODEL_INDEX); }); -App::get('/v1/databases/:databaseId/collections/:collectionId/indexes') +Http::get('/v1/databases/:databaseId/collections/:collectionId/indexes') ->alias('/v1/database/collections/:collectionId/indexes', ['databaseId' => 'default']) ->desc('List Indexes') ->groups(['api', 'database']) @@ -2503,7 +2503,7 @@ App::get('/v1/databases/:databaseId/collections/:collectionId/indexes') ]), Response::MODEL_INDEX_LIST); }); -App::get('/v1/databases/:databaseId/collections/:collectionId/indexes/:key') +Http::get('/v1/databases/:databaseId/collections/:collectionId/indexes/:key') ->alias('/v1/database/collections/:collectionId/indexes/:key', ['databaseId' => 'default']) ->desc('Get Index') ->groups(['api', 'database']) @@ -2550,7 +2550,7 @@ App::get('/v1/databases/:databaseId/collections/:collectionId/indexes/:key') $response->dynamic($index, Response::MODEL_INDEX); }); -App::delete('/v1/databases/:databaseId/collections/:collectionId/indexes/:key') +Http::delete('/v1/databases/:databaseId/collections/:collectionId/indexes/:key') ->alias('/v1/database/collections/:collectionId/indexes/:key', ['databaseId' => 'default']) ->desc('Delete Index') ->groups(['api', 'database']) @@ -2616,7 +2616,7 @@ App::delete('/v1/databases/:databaseId/collections/:collectionId/indexes/:key') $response->noContent(); }); -App::post('/v1/databases/:databaseId/collections/:collectionId/documents') +Http::post('/v1/databases/:databaseId/collections/:collectionId/documents') ->alias('/v1/database/collections/:collectionId/documents', ['databaseId' => 'default']) ->desc('Create Document') ->groups(['api', 'database']) @@ -2856,7 +2856,7 @@ App::post('/v1/databases/:databaseId/collections/:collectionId/documents') ->dynamic($document, Response::MODEL_DOCUMENT); }); -App::get('/v1/databases/:databaseId/collections/:collectionId/documents') +Http::get('/v1/databases/:databaseId/collections/:collectionId/documents') ->alias('/v1/database/collections/:collectionId/documents', ['databaseId' => 'default']) ->desc('List Documents') ->groups(['api', 'database']) @@ -2988,7 +2988,7 @@ App::get('/v1/databases/:databaseId/collections/:collectionId/documents') ]), Response::MODEL_DOCUMENT_LIST); }); -App::get('/v1/databases/:databaseId/collections/:collectionId/documents/:documentId') +Http::get('/v1/databases/:databaseId/collections/:collectionId/documents/:documentId') ->alias('/v1/database/collections/:collectionId/documents/:documentId', ['databaseId' => 'default']) ->desc('Get Document') ->groups(['api', 'database']) @@ -3084,7 +3084,7 @@ App::get('/v1/databases/:databaseId/collections/:collectionId/documents/:documen $response->dynamic($document, Response::MODEL_DOCUMENT); }); -App::get('/v1/databases/:databaseId/collections/:collectionId/documents/:documentId/logs') +Http::get('/v1/databases/:databaseId/collections/:collectionId/documents/:documentId/logs') ->alias('/v1/database/collections/:collectionId/documents/:documentId/logs', ['databaseId' => 'default']) ->desc('List Document Logs') ->groups(['api', 'database']) @@ -3185,7 +3185,7 @@ App::get('/v1/databases/:databaseId/collections/:collectionId/documents/:documen ]), Response::MODEL_LOG_LIST); }); -App::patch('/v1/databases/:databaseId/collections/:collectionId/documents/:documentId') +Http::patch('/v1/databases/:databaseId/collections/:collectionId/documents/:documentId') ->alias('/v1/database/collections/:collectionId/documents/:documentId', ['databaseId' => 'default']) ->desc('Update Document') ->groups(['api', 'database']) @@ -3431,7 +3431,7 @@ App::patch('/v1/databases/:databaseId/collections/:collectionId/documents/:docum $response->dynamic($document, Response::MODEL_DOCUMENT); }); -App::delete('/v1/databases/:databaseId/collections/:collectionId/documents/:documentId') +Http::delete('/v1/databases/:databaseId/collections/:collectionId/documents/:documentId') ->alias('/v1/database/collections/:collectionId/documents/:documentId', ['databaseId' => 'default']) ->desc('Delete Document') ->groups(['api', 'database']) @@ -3597,7 +3597,7 @@ App::delete('/v1/databases/:databaseId/collections/:collectionId/documents/:docu $response->noContent(); }); -App::get('/v1/databases/usage') +Http::get('/v1/databases/usage') ->desc('Get usage stats for the database') ->groups(['api', 'database', 'usage']) ->label('scope', 'collections.read') @@ -3613,7 +3613,7 @@ App::get('/v1/databases/usage') ->action(function (string $range, Response $response, Database $dbForProject) { $usage = []; - if (App::getEnv('_APP_USAGE_STATS', 'enabled') == 'enabled') { + if (Http::getEnv('_APP_USAGE_STATS', 'enabled') == 'enabled') { $periods = [ '24h' => [ 'period' => '1h', @@ -3715,7 +3715,7 @@ App::get('/v1/databases/usage') $response->dynamic($usage, Response::MODEL_USAGE_DATABASES); }); -App::get('/v1/databases/:databaseId/usage') +Http::get('/v1/databases/:databaseId/usage') ->desc('Get usage stats for the database') ->groups(['api', 'database', 'usage']) ->label('scope', 'collections.read') @@ -3732,7 +3732,7 @@ App::get('/v1/databases/:databaseId/usage') ->action(function (string $databaseId, string $range, Response $response, Database $dbForProject) { $usage = []; - if (App::getEnv('_APP_USAGE_STATS', 'enabled') == 'enabled') { + if (Http::getEnv('_APP_USAGE_STATS', 'enabled') == 'enabled') { $periods = [ '24h' => [ 'period' => '1h', @@ -3824,7 +3824,7 @@ App::get('/v1/databases/:databaseId/usage') $response->dynamic($usage, Response::MODEL_USAGE_DATABASE); }); -App::get('/v1/databases/:databaseId/collections/:collectionId/usage') +Http::get('/v1/databases/:databaseId/collections/:collectionId/usage') ->alias('/v1/database/:collectionId/usage', ['databaseId' => 'default']) ->desc('Get usage stats for a collection') ->groups(['api', 'database', 'usage']) @@ -3852,7 +3852,7 @@ App::get('/v1/databases/:databaseId/collections/:collectionId/usage') } $usage = []; - if (App::getEnv('_APP_USAGE_STATS', 'enabled') == 'enabled') { + if (Http::getEnv('_APP_USAGE_STATS', 'enabled') == 'enabled') { $periods = [ '24h' => [ 'period' => '1h', diff --git a/app/controllers/api/functions.php b/app/controllers/api/functions.php index b98b1bd1c7..a386e36acb 100644 --- a/app/controllers/api/functions.php +++ b/app/controllers/api/functions.php @@ -45,7 +45,7 @@ use Utopia\Database\Exception\Duplicate as DuplicateException; include_once __DIR__ . '/../shared/api.php'; -App::post('/v1/functions') +Http::post('/v1/functions') ->groups(['api', 'functions']) ->desc('Create Function') ->label('scope', 'functions.write') @@ -65,7 +65,7 @@ App::post('/v1/functions') ->param('runtime', '', new WhiteList(array_keys(Config::getParam('runtimes')), true), 'Execution runtime.') ->param('events', [], new ArrayList(new ValidatorEvent(), APP_LIMIT_ARRAY_PARAMS_SIZE), 'Events list. Maximum of ' . APP_LIMIT_ARRAY_PARAMS_SIZE . ' events are allowed.', true) ->param('schedule', '', new Cron(), 'Schedule CRON syntax.', true) - ->param('timeout', 15, new Range(1, (int) App::getEnv('_APP_FUNCTIONS_TIMEOUT', 900)), 'Function maximum execution time in seconds.', true) + ->param('timeout', 15, new Range(1, (int) Http::getEnv('_APP_FUNCTIONS_TIMEOUT', 900)), 'Function maximum execution time in seconds.', true) ->param('enabled', true, new Boolean(), 'Is function enabled?', true) ->inject('response') ->inject('dbForProject') @@ -112,7 +112,7 @@ App::post('/v1/functions') ->dynamic($function, Response::MODEL_FUNCTION); }); -App::get('/v1/functions') +Http::get('/v1/functions') ->groups(['api', 'functions']) ->desc('List Functions') ->label('scope', 'functions.read') @@ -158,7 +158,7 @@ App::get('/v1/functions') ]), Response::MODEL_FUNCTION_LIST); }); -App::get('/v1/functions/runtimes') +Http::get('/v1/functions/runtimes') ->groups(['api', 'functions']) ->desc('List runtimes') ->label('scope', 'functions.read') @@ -185,7 +185,7 @@ App::get('/v1/functions/runtimes') ]), Response::MODEL_RUNTIME_LIST); }); -App::get('/v1/functions/:functionId') +Http::get('/v1/functions/:functionId') ->groups(['api', 'functions']) ->desc('Get Function') ->label('scope', 'functions.read') @@ -209,7 +209,7 @@ App::get('/v1/functions/:functionId') $response->dynamic($function, Response::MODEL_FUNCTION); }); -App::get('/v1/functions/:functionId/usage') +Http::get('/v1/functions/:functionId/usage') ->desc('Get Function Usage') ->groups(['api', 'functions', 'usage']) ->label('scope', 'functions.read') @@ -232,7 +232,7 @@ App::get('/v1/functions/:functionId/usage') } $usage = []; - if (App::getEnv('_APP_USAGE_STATS', 'enabled') == 'enabled') { + if (Http::getEnv('_APP_USAGE_STATS', 'enabled') == 'enabled') { $periods = [ '24h' => [ 'period' => '1h', @@ -319,7 +319,7 @@ App::get('/v1/functions/:functionId/usage') $response->dynamic($usage, Response::MODEL_USAGE_FUNCTION); }); -App::get('/v1/functions/usage') +Http::get('/v1/functions/usage') ->desc('Get Functions Usage') ->groups(['api', 'functions', 'usage']) ->label('scope', 'functions.read') @@ -335,7 +335,7 @@ App::get('/v1/functions/usage') ->action(function (string $range, Response $response, Database $dbForProject) { $usage = []; - if (App::getEnv('_APP_USAGE_STATS', 'enabled') == 'enabled') { + if (Http::getEnv('_APP_USAGE_STATS', 'enabled') == 'enabled') { $periods = [ '24h' => [ 'period' => '1h', @@ -422,7 +422,7 @@ App::get('/v1/functions/usage') $response->dynamic($usage, Response::MODEL_USAGE_FUNCTIONS); }); -App::put('/v1/functions/:functionId') +Http::put('/v1/functions/:functionId') ->groups(['api', 'functions']) ->desc('Update Function') ->label('scope', 'functions.write') @@ -441,7 +441,7 @@ App::put('/v1/functions/:functionId') ->param('execute', [], new Roles(APP_LIMIT_ARRAY_PARAMS_SIZE), 'An array of strings with execution roles. By default no user is granted with any execute permissions. [learn more about permissions](https://appwrite.io/docs/permissions). Maximum of ' . APP_LIMIT_ARRAY_PARAMS_SIZE . ' roles are allowed, each 64 characters long.', true) ->param('events', [], new ArrayList(new ValidatorEvent(), APP_LIMIT_ARRAY_PARAMS_SIZE), 'Events list. Maximum of ' . APP_LIMIT_ARRAY_PARAMS_SIZE . ' events are allowed.', true) ->param('schedule', '', new Cron(), 'Schedule CRON syntax.', true) - ->param('timeout', 15, new Range(1, (int) App::getEnv('_APP_FUNCTIONS_TIMEOUT', 900)), 'Maximum execution time in seconds.', true) + ->param('timeout', 15, new Range(1, (int) Http::getEnv('_APP_FUNCTIONS_TIMEOUT', 900)), 'Maximum execution time in seconds.', true) ->param('enabled', true, new Boolean(), 'Is function enabled?', true) ->inject('response') ->inject('dbForProject') @@ -489,7 +489,7 @@ App::put('/v1/functions/:functionId') $response->dynamic($function, Response::MODEL_FUNCTION); }); -App::patch('/v1/functions/:functionId/deployments/:deploymentId') +Http::patch('/v1/functions/:functionId/deployments/:deploymentId') ->groups(['api', 'functions']) ->desc('Update Function Deployment') ->label('scope', 'functions.write') @@ -542,7 +542,7 @@ App::patch('/v1/functions/:functionId/deployments/:deploymentId') $response->dynamic($function, Response::MODEL_FUNCTION); }); -App::delete('/v1/functions/:functionId') +Http::delete('/v1/functions/:functionId') ->groups(['api', 'functions']) ->desc('Delete Function') ->label('scope', 'functions.write') @@ -581,7 +581,7 @@ App::delete('/v1/functions/:functionId') $response->noContent(); }); -App::post('/v1/functions/:functionId/deployments') +Http::post('/v1/functions/:functionId/deployments') ->groups(['api', 'functions']) ->desc('Create Deployment') ->label('scope', 'functions.write') @@ -628,7 +628,7 @@ App::post('/v1/functions/:functionId/deployments') } $fileExt = new FileExt([FileExt::TYPE_GZIP]); - $fileSizeValidator = new FileSize(App::getEnv('_APP_FUNCTIONS_SIZE_LIMIT', 0)); + $fileSizeValidator = new FileSize(Http::getEnv('_APP_FUNCTIONS_SIZE_LIMIT', 0)); $upload = new Upload(); // Make sure we handle a single file and multiple files the same way @@ -777,7 +777,7 @@ App::post('/v1/functions/:functionId/deployments') ->dynamic($deployment, Response::MODEL_DEPLOYMENT); }); -App::get('/v1/functions/:functionId/deployments') +Http::get('/v1/functions/:functionId/deployments') ->groups(['api', 'functions']) ->desc('List Deployments') ->label('scope', 'functions.read') @@ -845,7 +845,7 @@ App::get('/v1/functions/:functionId/deployments') ]), Response::MODEL_DEPLOYMENT_LIST); }); -App::get('/v1/functions/:functionId/deployments/:deploymentId') +Http::get('/v1/functions/:functionId/deployments/:deploymentId') ->groups(['api', 'functions']) ->desc('Get Deployment') ->label('scope', 'functions.read') @@ -886,7 +886,7 @@ App::get('/v1/functions/:functionId/deployments/:deploymentId') $response->dynamic($deployment, Response::MODEL_DEPLOYMENT); }); -App::delete('/v1/functions/:functionId/deployments/:deploymentId') +Http::delete('/v1/functions/:functionId/deployments/:deploymentId') ->groups(['api', 'functions']) ->desc('Delete Deployment') ->label('scope', 'functions.write') @@ -945,7 +945,7 @@ App::delete('/v1/functions/:functionId/deployments/:deploymentId') $response->noContent(); }); -App::post('/v1/functions/:functionId/deployments/:deploymentId/builds/:buildId') +Http::post('/v1/functions/:functionId/deployments/:deploymentId/builds/:buildId') ->groups(['api', 'functions']) ->desc('Create Build') ->label('scope', 'functions.write') @@ -1006,7 +1006,7 @@ App::post('/v1/functions/:functionId/deployments/:deploymentId/builds/:buildId') -App::post('/v1/functions/:functionId/executions') +Http::post('/v1/functions/:functionId/executions') ->groups(['api', 'functions']) ->desc('Create Execution') ->label('scope', 'execution.write') @@ -1105,7 +1105,7 @@ App::post('/v1/functions/:functionId/executions') } if (!$current->isEmpty()) { - $jwtObj = new JWT(App::getEnv('_APP_OPENSSL_KEY_V1'), 'HS256', 900, 10); // Instantiate with key, algo, maxAge and leeway. + $jwtObj = new JWT(Http::getEnv('_APP_OPENSSL_KEY_V1'), 'HS256', 900, 10); // Instantiate with key, algo, maxAge and leeway. $jwt = $jwtObj->encode([ 'userId' => $user->getId(), 'sessionId' => $current->getId(), @@ -1155,7 +1155,7 @@ App::post('/v1/functions/:functionId/executions') ]); /** Execute function */ - $executor = new Executor(App::getEnv('_APP_EXECUTOR_HOST')); + $executor = new Executor(Http::getEnv('_APP_EXECUTOR_HOST')); try { $executionResponse = $executor->createExecution( projectId: $project->getId(), @@ -1209,7 +1209,7 @@ App::post('/v1/functions/:functionId/executions') ->dynamic($execution, Response::MODEL_EXECUTION); }); -App::get('/v1/functions/:functionId/executions') +Http::get('/v1/functions/:functionId/executions') ->groups(['api', 'functions']) ->desc('List Executions') ->label('scope', 'execution.read') @@ -1282,7 +1282,7 @@ App::get('/v1/functions/:functionId/executions') ]), Response::MODEL_EXECUTION_LIST); }); -App::get('/v1/functions/:functionId/executions/:executionId') +Http::get('/v1/functions/:functionId/executions/:executionId') ->groups(['api', 'functions']) ->desc('Get Execution') ->label('scope', 'execution.read') @@ -1331,7 +1331,7 @@ App::get('/v1/functions/:functionId/executions/:executionId') // Variables -App::post('/v1/functions/:functionId/variables') +Http::post('/v1/functions/:functionId/variables') ->desc('Create Variable') ->groups(['api', 'functions']) ->label('scope', 'functions.write') @@ -1385,7 +1385,7 @@ App::post('/v1/functions/:functionId/variables') ->dynamic($variable, Response::MODEL_VARIABLE); }); -App::get('/v1/functions/:functionId/variables') +Http::get('/v1/functions/:functionId/variables') ->desc('List Variables') ->groups(['api', 'functions']) ->label('scope', 'functions.read') @@ -1412,7 +1412,7 @@ App::get('/v1/functions/:functionId/variables') ]), Response::MODEL_VARIABLE_LIST); }); -App::get('/v1/functions/:functionId/variables/:variableId') +Http::get('/v1/functions/:functionId/variables/:variableId') ->desc('Get Variable') ->groups(['api', 'functions']) ->label('scope', 'functions.read') @@ -1446,7 +1446,7 @@ App::get('/v1/functions/:functionId/variables/:variableId') $response->dynamic($variable, Response::MODEL_VARIABLE); }); -App::put('/v1/functions/:functionId/variables/:variableId') +Http::put('/v1/functions/:functionId/variables/:variableId') ->desc('Update Variable') ->groups(['api', 'functions']) ->label('scope', 'functions.write') @@ -1499,7 +1499,7 @@ App::put('/v1/functions/:functionId/variables/:variableId') $response->dynamic($variable, Response::MODEL_VARIABLE); }); -App::delete('/v1/functions/:functionId/variables/:variableId') +Http::delete('/v1/functions/:functionId/variables/:variableId') ->desc('Delete Variable') ->groups(['api', 'functions']) ->label('scope', 'functions.write') diff --git a/app/controllers/api/graphql.php b/app/controllers/api/graphql.php index 02092107e7..49aa176355 100644 --- a/app/controllers/api/graphql.php +++ b/app/controllers/api/graphql.php @@ -17,7 +17,7 @@ use Utopia\Database\Document; use Utopia\Http\Validator\JSON; use Utopia\Http\Validator\Text; -App::get('/v1/graphql') +Http::get('/v1/graphql') ->desc('GraphQL Endpoint') ->groups(['graphql']) ->label('scope', 'graphql') @@ -57,7 +57,7 @@ App::get('/v1/graphql') ->json($output); }); -App::post('/v1/graphql/mutation') +Http::post('/v1/graphql/mutation') ->desc('GraphQL Endpoint') ->groups(['graphql']) ->label('scope', 'graphql') @@ -102,7 +102,7 @@ App::post('/v1/graphql/mutation') ->json($output); }); -App::post('/v1/graphql') +Http::post('/v1/graphql') ->desc('GraphQL Endpoint') ->groups(['graphql']) ->label('scope', 'graphql') @@ -161,9 +161,9 @@ function execute( Adapter $promiseAdapter, array $query ): array { - $maxBatchSize = App::getEnv('_APP_GRAPHQL_MAX_BATCH_SIZE', 10); - $maxComplexity = App::getEnv('_APP_GRAPHQL_MAX_COMPLEXITY', 250); - $maxDepth = App::getEnv('_APP_GRAPHQL_MAX_DEPTH', 3); + $maxBatchSize = Http::getEnv('_APP_GRAPHQL_MAX_BATCH_SIZE', 10); + $maxComplexity = Http::getEnv('_APP_GRAPHQL_MAX_COMPLEXITY', 250); + $maxDepth = Http::getEnv('_APP_GRAPHQL_MAX_DEPTH', 3); if (!empty($query) && !isset($query[0])) { $query = [$query]; @@ -183,12 +183,12 @@ function execute( $flags = DebugFlag::INCLUDE_DEBUG_MESSAGE | DebugFlag::INCLUDE_TRACE; $validations = GraphQL::getStandardValidationRules(); - if (App::getEnv('_APP_OPTIONS_ABUSE', 'enabled') !== 'disabled') { + if (Http::getEnv('_APP_OPTIONS_ABUSE', 'enabled') !== 'disabled') { $validations[] = new DisableIntrospection(); $validations[] = new QueryComplexity($maxComplexity); $validations[] = new QueryDepth($maxDepth); } - if (App::getMode() === App::MODE_TYPE_PRODUCTION) { + if (Http::getMode() === Http::MODE_TYPE_PRODUCTION) { $flags = DebugFlag::NONE; } @@ -289,7 +289,7 @@ function processResult($result, $debugFlags): array ); } -App::shutdown() +Http::shutdown() ->groups(['schema']) ->inject('project') ->action(function (Document $project) { diff --git a/app/controllers/api/health.php b/app/controllers/api/health.php index 4843e7b8d5..64564f7a9a 100644 --- a/app/controllers/api/health.php +++ b/app/controllers/api/health.php @@ -11,7 +11,7 @@ use Utopia\Storage\Device; use Utopia\Storage\Device\Local; use Utopia\Storage\Storage; -App::get('/v1/health') +Http::get('/v1/health') ->desc('Get HTTP') ->groups(['api', 'health']) ->label('scope', 'health.read') @@ -33,7 +33,7 @@ App::get('/v1/health') $response->dynamic(new Document($output), Response::MODEL_HEALTH_STATUS); }); -App::get('/v1/health/version') +Http::get('/v1/health/version') ->desc('Get Version') ->groups(['api', 'health']) ->label('scope', 'public') @@ -46,7 +46,7 @@ App::get('/v1/health/version') $response->dynamic(new Document([ 'version' => APP_VERSION_STABLE ]), Response::MODEL_HEALTH_VERSION); }); -App::get('/v1/health/db') +Http::get('/v1/health/db') ->desc('Get DB') ->groups(['api', 'health']) ->label('scope', 'health.read') @@ -84,7 +84,7 @@ App::get('/v1/health/db') $response->dynamic(new Document($output), Response::MODEL_HEALTH_STATUS); }); -App::get('/v1/health/cache') +Http::get('/v1/health/cache') ->desc('Get Cache') ->groups(['api', 'health']) ->label('scope', 'health.read') @@ -115,7 +115,7 @@ App::get('/v1/health/cache') $response->dynamic(new Document($output), Response::MODEL_HEALTH_STATUS); }); -App::get('/v1/health/time') +Http::get('/v1/health/time') ->desc('Get Time') ->groups(['api', 'health']) ->label('scope', 'health.read') @@ -172,7 +172,7 @@ App::get('/v1/health/time') $response->dynamic(new Document($output), Response::MODEL_HEALTH_TIME); }); -App::get('/v1/health/queue/webhooks') +Http::get('/v1/health/queue/webhooks') ->desc('Get Webhooks Queue') ->groups(['api', 'health']) ->label('scope', 'health.read') @@ -189,7 +189,7 @@ App::get('/v1/health/queue/webhooks') $response->dynamic(new Document([ 'size' => Resque::size(Event::WEBHOOK_QUEUE_NAME) ]), Response::MODEL_HEALTH_QUEUE); }, ['response']); -App::get('/v1/health/queue/logs') +Http::get('/v1/health/queue/logs') ->desc('Get Logs Queue') ->groups(['api', 'health']) ->label('scope', 'health.read') @@ -206,7 +206,7 @@ App::get('/v1/health/queue/logs') $response->dynamic(new Document([ 'size' => Resque::size(Event::AUDITS_QUEUE_NAME) ]), Response::MODEL_HEALTH_QUEUE); }, ['response']); -App::get('/v1/health/queue/certificates') +Http::get('/v1/health/queue/certificates') ->desc('Get Certificates Queue') ->groups(['api', 'health']) ->label('scope', 'health.read') @@ -223,7 +223,7 @@ App::get('/v1/health/queue/certificates') $response->dynamic(new Document([ 'size' => Resque::size(Event::CERTIFICATES_QUEUE_NAME) ]), Response::MODEL_HEALTH_QUEUE); }, ['response']); -App::get('/v1/health/queue/functions') +Http::get('/v1/health/queue/functions') ->desc('Get Functions Queue') ->groups(['api', 'health']) ->label('scope', 'health.read') @@ -240,7 +240,7 @@ App::get('/v1/health/queue/functions') $response->dynamic(new Document([ 'size' => Resque::size(Event::FUNCTIONS_QUEUE_NAME) ]), Response::MODEL_HEALTH_QUEUE); }, ['response']); -App::get('/v1/health/storage/local') +Http::get('/v1/health/storage/local') ->desc('Get Local Storage') ->groups(['api', 'health']) ->label('scope', 'health.read') @@ -283,7 +283,7 @@ App::get('/v1/health/storage/local') $response->dynamic(new Document($output), Response::MODEL_HEALTH_STATUS); }); -App::get('/v1/health/anti-virus') +Http::get('/v1/health/anti-virus') ->desc('Get Antivirus') ->groups(['api', 'health']) ->label('scope', 'health.read') @@ -302,13 +302,13 @@ App::get('/v1/health/anti-virus') 'version' => '' ]; - if (App::getEnv('_APP_STORAGE_ANTIVIRUS') === 'disabled') { // Check if scans are enabled + if (Http::getEnv('_APP_STORAGE_ANTIVIRUS') === 'disabled') { // Check if scans are enabled $output['status'] = 'disabled'; $output['version'] = ''; } else { $antivirus = new Network( - App::getEnv('_APP_STORAGE_ANTIVIRUS_HOST', 'clamav'), - (int) App::getEnv('_APP_STORAGE_ANTIVIRUS_PORT', 3310) + Http::getEnv('_APP_STORAGE_ANTIVIRUS_HOST', 'clamav'), + (int) Http::getEnv('_APP_STORAGE_ANTIVIRUS_PORT', 3310) ); try { @@ -322,7 +322,7 @@ App::get('/v1/health/anti-virus') $response->dynamic(new Document($output), Response::MODEL_HEALTH_ANTIVIRUS); }); -App::get('/v1/health/stats') // Currently only used internally +Http::get('/v1/health/stats') // Currently only used internally ->desc('Get System Stats') ->groups(['api', 'health']) ->label('scope', 'root') diff --git a/app/controllers/api/locale.php b/app/controllers/api/locale.php index 5c29b50de4..89e15640b6 100644 --- a/app/controllers/api/locale.php +++ b/app/controllers/api/locale.php @@ -8,7 +8,7 @@ use Utopia\Config\Config; use Utopia\Database\Document; use Utopia\Locale\Locale; -App::get('/v1/locale') +Http::get('/v1/locale') ->desc('Get User Locale') ->groups(['api', 'locale']) ->label('scope', 'locale.read') @@ -68,7 +68,7 @@ App::get('/v1/locale') $response->dynamic(new Document($output), Response::MODEL_LOCALE); }); -App::get('/v1/locale/countries') +Http::get('/v1/locale/countries') ->desc('List Countries') ->groups(['api', 'locale']) ->label('scope', 'locale.read') @@ -101,7 +101,7 @@ App::get('/v1/locale/countries') $response->dynamic(new Document(['countries' => $output, 'total' => \count($output)]), Response::MODEL_COUNTRY_LIST); }); -App::get('/v1/locale/countries/eu') +Http::get('/v1/locale/countries/eu') ->desc('List EU Countries') ->groups(['api', 'locale']) ->label('scope', 'locale.read') @@ -136,7 +136,7 @@ App::get('/v1/locale/countries/eu') $response->dynamic(new Document(['countries' => $output, 'total' => \count($output)]), Response::MODEL_COUNTRY_LIST); }); -App::get('/v1/locale/countries/phones') +Http::get('/v1/locale/countries/phones') ->desc('List Countries Phone Codes') ->groups(['api', 'locale']) ->label('scope', 'locale.read') @@ -170,7 +170,7 @@ App::get('/v1/locale/countries/phones') $response->dynamic(new Document(['phones' => $output, 'total' => \count($output)]), Response::MODEL_PHONE_LIST); }); -App::get('/v1/locale/continents') +Http::get('/v1/locale/continents') ->desc('List Continents') ->groups(['api', 'locale']) ->label('scope', 'locale.read') @@ -202,7 +202,7 @@ App::get('/v1/locale/continents') $response->dynamic(new Document(['continents' => $output, 'total' => \count($output)]), Response::MODEL_CONTINENT_LIST); }); -App::get('/v1/locale/currencies') +Http::get('/v1/locale/currencies') ->desc('List Currencies') ->groups(['api', 'locale']) ->label('scope', 'locale.read') @@ -225,7 +225,7 @@ App::get('/v1/locale/currencies') }); -App::get('/v1/locale/languages') +Http::get('/v1/locale/languages') ->desc('List Languages') ->groups(['api', 'locale']) ->label('scope', 'locale.read') diff --git a/app/controllers/api/projects.php b/app/controllers/api/projects.php index d58c8fbd2e..1f2a8e5207 100644 --- a/app/controllers/api/projects.php +++ b/app/controllers/api/projects.php @@ -37,7 +37,7 @@ use Utopia\Http\Validator\Range; use Utopia\Http\Validator\Text; use Utopia\Http\Validator\WhiteList; -App::init() +Http::init() ->groups(['projects']) ->inject('project') ->action(function (Document $project) { @@ -46,7 +46,7 @@ App::init() } }); -App::post('/v1/projects') +Http::post('/v1/projects') ->desc('Create Project') ->groups(['api', 'projects']) ->label('scope', 'projects.write') @@ -59,7 +59,7 @@ App::post('/v1/projects') ->param('projectId', '', new CustomId(), 'Unique Id. Choose a custom ID or generate a random ID with `ID.unique()`. Valid chars are a-z, A-Z, 0-9, period, hyphen, and underscore. Can\'t start with a special char. Max length is 36 chars.') ->param('name', null, new Text(128), 'Project name. Max length: 128 chars.') ->param('teamId', '', new UID(), 'Team unique ID.') - ->param('region', App::getEnv('_APP_REGION', 'default'), new Whitelist(array_keys(array_filter(Config::getParam('regions'), fn($config) => !$config['disabled']))), 'Project Region.', true) + ->param('region', Http::getEnv('_APP_REGION', 'default'), new Whitelist(array_keys(array_filter(Config::getParam('regions'), fn($config) => !$config['disabled']))), 'Project Region.', true) ->param('description', '', new Text(256), 'Project description. Max length: 256 chars.', true) ->param('logo', '', new Text(1024), 'Project logo.', true) ->param('url', '', new URL(), 'Project URL.', true) @@ -180,7 +180,7 @@ App::post('/v1/projects') ->dynamic($project, Response::MODEL_PROJECT); }); -App::get('/v1/projects') +Http::get('/v1/projects') ->desc('List Projects') ->groups(['api', 'projects']) ->label('scope', 'projects.read') @@ -225,7 +225,7 @@ App::get('/v1/projects') ]), Response::MODEL_PROJECT_LIST); }); -App::get('/v1/projects/:projectId') +Http::get('/v1/projects/:projectId') ->desc('Get Project') ->groups(['api', 'projects']) ->label('scope', 'projects.read') @@ -249,7 +249,7 @@ App::get('/v1/projects/:projectId') $response->dynamic($project, Response::MODEL_PROJECT); }); -App::get('/v1/projects/:projectId/usage') +Http::get('/v1/projects/:projectId/usage') ->desc('Get usage stats for a project') ->groups(['api', 'projects', 'usage']) ->label('scope', 'projects.read') @@ -274,7 +274,7 @@ App::get('/v1/projects/:projectId/usage') } $usage = []; - if (App::getEnv('_APP_USAGE_STATS', 'enabled') == 'enabled') { + if (Http::getEnv('_APP_USAGE_STATS', 'enabled') == 'enabled') { $periods = [ '24h' => [ 'period' => '1h', @@ -363,7 +363,7 @@ App::get('/v1/projects/:projectId/usage') $response->dynamic($usage, Response::MODEL_USAGE_PROJECT); }); -App::patch('/v1/projects/:projectId') +Http::patch('/v1/projects/:projectId') ->desc('Update Project') ->groups(['api', 'projects']) ->label('scope', 'projects.write') @@ -410,7 +410,7 @@ App::patch('/v1/projects/:projectId') $response->dynamic($project, Response::MODEL_PROJECT); }); -App::patch('/v1/projects/:projectId/service') +Http::patch('/v1/projects/:projectId/service') ->desc('Update service status') ->groups(['api', 'projects']) ->label('scope', 'projects.write') @@ -441,7 +441,7 @@ App::patch('/v1/projects/:projectId/service') $response->dynamic($project, Response::MODEL_PROJECT); }); -App::patch('/v1/projects/:projectId/oauth2') +Http::patch('/v1/projects/:projectId/oauth2') ->desc('Update Project OAuth2') ->groups(['api', 'projects']) ->label('scope', 'projects.write') @@ -485,7 +485,7 @@ App::patch('/v1/projects/:projectId/oauth2') $response->dynamic($project, Response::MODEL_PROJECT); }); -App::patch('/v1/projects/:projectId/auth/limit') +Http::patch('/v1/projects/:projectId/auth/limit') ->desc('Update Project users limit') ->groups(['api', 'projects']) ->label('scope', 'projects.write') @@ -516,7 +516,7 @@ App::patch('/v1/projects/:projectId/auth/limit') $response->dynamic($project, Response::MODEL_PROJECT); }); -App::patch('/v1/projects/:projectId/auth/duration') +Http::patch('/v1/projects/:projectId/auth/duration') ->desc('Update Project Authentication Duration') ->groups(['api', 'projects']) ->label('scope', 'projects.write') @@ -547,7 +547,7 @@ App::patch('/v1/projects/:projectId/auth/duration') $response->dynamic($project, Response::MODEL_PROJECT); }); -App::patch('/v1/projects/:projectId/auth/:method') +Http::patch('/v1/projects/:projectId/auth/:method') ->desc('Update Project auth method status. Use this endpoint to enable or disable a given auth method for this project.') ->groups(['api', 'projects']) ->label('scope', 'projects.write') @@ -581,7 +581,7 @@ App::patch('/v1/projects/:projectId/auth/:method') $response->dynamic($project, Response::MODEL_PROJECT); }); -App::patch('/v1/projects/:projectId/auth/password-history') +Http::patch('/v1/projects/:projectId/auth/password-history') ->desc('Update authentication password history. Use this endpoint to set the number of password history to save and 0 to disable password history.') ->groups(['api', 'projects']) ->label('scope', 'projects.write') @@ -612,7 +612,7 @@ App::patch('/v1/projects/:projectId/auth/password-history') $response->dynamic($project, Response::MODEL_PROJECT); }); -App::patch('/v1/projects/:projectId/auth/password-dictionary') +Http::patch('/v1/projects/:projectId/auth/password-dictionary') ->desc('Update authentication password disctionary status. Use this endpoint to enable or disable the dicitonary check for user password') ->groups(['api', 'projects']) ->label('scope', 'projects.write') @@ -643,7 +643,7 @@ App::patch('/v1/projects/:projectId/auth/password-dictionary') $response->dynamic($project, Response::MODEL_PROJECT); }); -App::patch('/v1/projects/:projectId/auth/max-sessions') +Http::patch('/v1/projects/:projectId/auth/max-sessions') ->desc('Update Project user sessions limit') ->groups(['api', 'projects']) ->label('scope', 'projects.write') @@ -674,7 +674,7 @@ App::patch('/v1/projects/:projectId/auth/max-sessions') $response->dynamic($project, Response::MODEL_PROJECT); }); -App::delete('/v1/projects/:projectId') +Http::delete('/v1/projects/:projectId') ->desc('Delete Project') ->groups(['api', 'projects']) ->label('scope', 'projects.write') @@ -709,7 +709,7 @@ App::delete('/v1/projects/:projectId') // Webhooks -App::post('/v1/projects/:projectId/webhooks') +Http::post('/v1/projects/:projectId/webhooks') ->desc('Create Webhook') ->groups(['api', 'projects']) ->label('scope', 'projects.write') @@ -765,7 +765,7 @@ App::post('/v1/projects/:projectId/webhooks') ->dynamic($webhook, Response::MODEL_WEBHOOK); }); -App::get('/v1/projects/:projectId/webhooks') +Http::get('/v1/projects/:projectId/webhooks') ->desc('List Webhooks') ->groups(['api', 'projects']) ->label('scope', 'projects.read') @@ -797,7 +797,7 @@ App::get('/v1/projects/:projectId/webhooks') ]), Response::MODEL_WEBHOOK_LIST); }); -App::get('/v1/projects/:projectId/webhooks/:webhookId') +Http::get('/v1/projects/:projectId/webhooks/:webhookId') ->desc('Get Webhook') ->groups(['api', 'projects']) ->label('scope', 'projects.read') @@ -831,7 +831,7 @@ App::get('/v1/projects/:projectId/webhooks/:webhookId') $response->dynamic($webhook, Response::MODEL_WEBHOOK); }); -App::put('/v1/projects/:projectId/webhooks/:webhookId') +Http::put('/v1/projects/:projectId/webhooks/:webhookId') ->desc('Update Webhook') ->groups(['api', 'projects']) ->label('scope', 'projects.write') @@ -885,7 +885,7 @@ App::put('/v1/projects/:projectId/webhooks/:webhookId') $response->dynamic($webhook, Response::MODEL_WEBHOOK); }); -App::patch('/v1/projects/:projectId/webhooks/:webhookId/signature') +Http::patch('/v1/projects/:projectId/webhooks/:webhookId/signature') ->desc('Update Webhook Signature Key') ->groups(['api', 'projects']) ->label('scope', 'projects.write') @@ -924,7 +924,7 @@ App::patch('/v1/projects/:projectId/webhooks/:webhookId/signature') $response->dynamic($webhook, Response::MODEL_WEBHOOK); }); -App::delete('/v1/projects/:projectId/webhooks/:webhookId') +Http::delete('/v1/projects/:projectId/webhooks/:webhookId') ->desc('Delete Webhook') ->groups(['api', 'projects']) ->label('scope', 'projects.write') @@ -963,7 +963,7 @@ App::delete('/v1/projects/:projectId/webhooks/:webhookId') // Keys -App::post('/v1/projects/:projectId/keys') +Http::post('/v1/projects/:projectId/keys') ->desc('Create Key') ->groups(['api', 'projects']) ->label('scope', 'projects.write') @@ -1013,7 +1013,7 @@ App::post('/v1/projects/:projectId/keys') ->dynamic($key, Response::MODEL_KEY); }); -App::get('/v1/projects/:projectId/keys') +Http::get('/v1/projects/:projectId/keys') ->desc('List Keys') ->groups(['api', 'projects']) ->label('scope', 'projects.read') @@ -1045,7 +1045,7 @@ App::get('/v1/projects/:projectId/keys') ]), Response::MODEL_KEY_LIST); }); -App::get('/v1/projects/:projectId/keys/:keyId') +Http::get('/v1/projects/:projectId/keys/:keyId') ->desc('Get Key') ->groups(['api', 'projects']) ->label('scope', 'projects.read') @@ -1079,7 +1079,7 @@ App::get('/v1/projects/:projectId/keys/:keyId') $response->dynamic($key, Response::MODEL_KEY); }); -App::put('/v1/projects/:projectId/keys/:keyId') +Http::put('/v1/projects/:projectId/keys/:keyId') ->desc('Update Key') ->groups(['api', 'projects']) ->label('scope', 'projects.write') @@ -1126,7 +1126,7 @@ App::put('/v1/projects/:projectId/keys/:keyId') $response->dynamic($key, Response::MODEL_KEY); }); -App::delete('/v1/projects/:projectId/keys/:keyId') +Http::delete('/v1/projects/:projectId/keys/:keyId') ->desc('Delete Key') ->groups(['api', 'projects']) ->label('scope', 'projects.write') @@ -1165,7 +1165,7 @@ App::delete('/v1/projects/:projectId/keys/:keyId') // Platforms -App::post('/v1/projects/:projectId/platforms') +Http::post('/v1/projects/:projectId/platforms') ->desc('Create Platform') ->groups(['api', 'projects']) ->label('scope', 'projects.write') @@ -1215,7 +1215,7 @@ App::post('/v1/projects/:projectId/platforms') ->dynamic($platform, Response::MODEL_PLATFORM); }); -App::get('/v1/projects/:projectId/platforms') +Http::get('/v1/projects/:projectId/platforms') ->desc('List Platforms') ->groups(['api', 'projects']) ->label('scope', 'projects.read') @@ -1247,7 +1247,7 @@ App::get('/v1/projects/:projectId/platforms') ]), Response::MODEL_PLATFORM_LIST); }); -App::get('/v1/projects/:projectId/platforms/:platformId') +Http::get('/v1/projects/:projectId/platforms/:platformId') ->desc('Get Platform') ->groups(['api', 'projects']) ->label('scope', 'projects.read') @@ -1281,7 +1281,7 @@ App::get('/v1/projects/:projectId/platforms/:platformId') $response->dynamic($platform, Response::MODEL_PLATFORM); }); -App::put('/v1/projects/:projectId/platforms/:platformId') +Http::put('/v1/projects/:projectId/platforms/:platformId') ->desc('Update Platform') ->groups(['api', 'projects']) ->label('scope', 'projects.write') @@ -1329,7 +1329,7 @@ App::put('/v1/projects/:projectId/platforms/:platformId') $response->dynamic($platform, Response::MODEL_PLATFORM); }); -App::delete('/v1/projects/:projectId/platforms/:platformId') +Http::delete('/v1/projects/:projectId/platforms/:platformId') ->desc('Delete Platform') ->groups(['api', 'projects']) ->label('scope', 'projects.write') @@ -1368,7 +1368,7 @@ App::delete('/v1/projects/:projectId/platforms/:platformId') // Domains -App::post('/v1/projects/:projectId/domains') +Http::post('/v1/projects/:projectId/domains') ->desc('Create Domain') ->groups(['api', 'projects']) ->label('scope', 'projects.write') @@ -1399,7 +1399,7 @@ App::post('/v1/projects/:projectId/domains') throw new Exception(Exception::DOMAIN_ALREADY_EXISTS); } - $target = new Domain(App::getEnv('_APP_DOMAIN_TARGET', '')); + $target = new Domain(Http::getEnv('_APP_DOMAIN_TARGET', '')); if (!$target->isKnown() || $target->isTest()) { throw new Exception(Exception::DOMAIN_TARGET_INVALID, 'Unreachable CNAME target (' . $target->get() . '). Please check the _APP_DOMAIN_TARGET environment variable of your Appwrite server.'); @@ -1433,7 +1433,7 @@ App::post('/v1/projects/:projectId/domains') ->dynamic($domain, Response::MODEL_DOMAIN); }); -App::get('/v1/projects/:projectId/domains') +Http::get('/v1/projects/:projectId/domains') ->desc('List Domains') ->groups(['api', 'projects']) ->label('scope', 'projects.read') @@ -1465,7 +1465,7 @@ App::get('/v1/projects/:projectId/domains') ]), Response::MODEL_DOMAIN_LIST); }); -App::get('/v1/projects/:projectId/domains/:domainId') +Http::get('/v1/projects/:projectId/domains/:domainId') ->desc('Get Domain') ->groups(['api', 'projects']) ->label('scope', 'projects.read') @@ -1499,7 +1499,7 @@ App::get('/v1/projects/:projectId/domains/:domainId') $response->dynamic($domain, Response::MODEL_DOMAIN); }); -App::patch('/v1/projects/:projectId/domains/:domainId/verification') +Http::patch('/v1/projects/:projectId/domains/:domainId/verification') ->desc('Update Domain Verification Status') ->groups(['api', 'projects']) ->label('scope', 'projects.write') @@ -1530,7 +1530,7 @@ App::patch('/v1/projects/:projectId/domains/:domainId/verification') throw new Exception(Exception::DOMAIN_NOT_FOUND); } - $target = new Domain(App::getEnv('_APP_DOMAIN_TARGET', '')); + $target = new Domain(Http::getEnv('_APP_DOMAIN_TARGET', '')); if (!$target->isKnown() || $target->isTest()) { throw new Exception(Exception::GENERAL_SERVER_ERROR, 'Unreachable CNAME target (' . $target->get() . '), please use a domain with a public suffix.'); @@ -1559,7 +1559,7 @@ App::patch('/v1/projects/:projectId/domains/:domainId/verification') $response->dynamic($domain, Response::MODEL_DOMAIN); }); -App::delete('/v1/projects/:projectId/domains/:domainId') +Http::delete('/v1/projects/:projectId/domains/:domainId') ->desc('Delete Domain') ->groups(['api', 'projects']) ->label('scope', 'projects.write') diff --git a/app/controllers/api/storage.php b/app/controllers/api/storage.php index 87b6dcfde1..4ba755d2d2 100644 --- a/app/controllers/api/storage.php +++ b/app/controllers/api/storage.php @@ -43,7 +43,7 @@ use Utopia\Http\Validator\Text; use Utopia\Http\Validator\WhiteList; use Utopia\Swoole\Request; -App::post('/v1/storage/buckets') +Http::post('/v1/storage/buckets') ->desc('Create bucket') ->groups(['api', 'storage']) ->label('scope', 'buckets.write') @@ -63,7 +63,7 @@ App::post('/v1/storage/buckets') ->param('permissions', null, new Permissions(APP_LIMIT_ARRAY_PARAMS_SIZE), 'An array of permission strings. By default, no user is granted with any permissions. [Learn more about permissions](/docs/permissions).', true) ->param('fileSecurity', false, new Boolean(true), 'Enables configuring permissions for individual file. A user needs one of file or bucket level permissions to access a file. [Learn more about permissions](/docs/permissions).', true) ->param('enabled', true, new Boolean(true), 'Is bucket enabled?', true) - ->param('maximumFileSize', (int) App::getEnv('_APP_STORAGE_LIMIT', 0), new Range(1, (int) App::getEnv('_APP_STORAGE_LIMIT', 0)), 'Maximum file size allowed in bytes. Maximum allowed value is ' . Storage::human(App::getEnv('_APP_STORAGE_LIMIT', 0), 0) . '. For self-hosted setups you can change the max limit by changing the `_APP_STORAGE_LIMIT` environment variable. [Learn more about storage environment variables](/docs/environment-variables#storage)', true) + ->param('maximumFileSize', (int) Http::getEnv('_APP_STORAGE_LIMIT', 0), new Range(1, (int) Http::getEnv('_APP_STORAGE_LIMIT', 0)), 'Maximum file size allowed in bytes. Maximum allowed value is ' . Storage::human(Http::getEnv('_APP_STORAGE_LIMIT', 0), 0) . '. For self-hosted setups you can change the max limit by changing the `_APP_STORAGE_LIMIT` environment variable. [Learn more about storage environment variables](/docs/environment-variables#storage)', true) ->param('allowedFileExtensions', [], new ArrayList(new Text(64), APP_LIMIT_ARRAY_PARAMS_SIZE), 'Allowed file extensions. Maximum of ' . APP_LIMIT_ARRAY_PARAMS_SIZE . ' extensions are allowed, each 64 characters long.', true) ->param('compression', COMPRESSION_TYPE_NONE, new WhiteList([COMPRESSION_TYPE_NONE, COMPRESSION_TYPE_GZIP, COMPRESSION_TYPE_ZSTD]), 'Compression algorithm choosen for compression. Can be one of ' . COMPRESSION_TYPE_NONE . ', [' . COMPRESSION_TYPE_GZIP . '](https://en.wikipedia.org/wiki/Gzip), or [' . COMPRESSION_TYPE_ZSTD . '](https://en.wikipedia.org/wiki/Zstd), For file size above ' . Storage::human(APP_STORAGE_READ_BUFFER, 0) . ' compression is skipped even if it\'s enabled', true) ->param('encryption', true, new Boolean(true), 'Is encryption enabled? For file size above ' . Storage::human(APP_STORAGE_READ_BUFFER, 0) . ' encryption is skipped even if it\'s enabled', true) @@ -142,7 +142,7 @@ App::post('/v1/storage/buckets') ->dynamic($bucket, Response::MODEL_BUCKET); }); -App::get('/v1/storage/buckets') +Http::get('/v1/storage/buckets') ->desc('List buckets') ->groups(['api', 'storage']) ->label('scope', 'buckets.read') @@ -189,7 +189,7 @@ App::get('/v1/storage/buckets') ]), Response::MODEL_BUCKET_LIST); }); -App::get('/v1/storage/buckets/:bucketId') +Http::get('/v1/storage/buckets/:bucketId') ->desc('Get Bucket') ->groups(['api', 'storage']) ->label('scope', 'buckets.read') @@ -215,7 +215,7 @@ App::get('/v1/storage/buckets/:bucketId') $response->dynamic($bucket, Response::MODEL_BUCKET); }); -App::put('/v1/storage/buckets/:bucketId') +Http::put('/v1/storage/buckets/:bucketId') ->desc('Update Bucket') ->groups(['api', 'storage']) ->label('scope', 'buckets.write') @@ -235,7 +235,7 @@ App::put('/v1/storage/buckets/:bucketId') ->param('permissions', null, new Permissions(APP_LIMIT_ARRAY_PARAMS_SIZE), 'An array of permission strings. By default, the current permissions are inherited. [Learn more about permissions](/docs/permissions).', true) ->param('fileSecurity', false, new Boolean(true), 'Enables configuring permissions for individual file. A user needs one of file or bucket level permissions to access a file. [Learn more about permissions](/docs/permissions).', true) ->param('enabled', true, new Boolean(true), 'Is bucket enabled?', true) - ->param('maximumFileSize', null, new Range(1, (int) App::getEnv('_APP_STORAGE_LIMIT', 0)), 'Maximum file size allowed in bytes. Maximum allowed value is ' . Storage::human((int)App::getEnv('_APP_STORAGE_LIMIT', 0), 0) . '. For self hosted version you can change the limit by changing _APP_STORAGE_LIMIT environment variable. [Learn more about storage environment variables](/docs/environment-variables#storage)', true) + ->param('maximumFileSize', null, new Range(1, (int) Http::getEnv('_APP_STORAGE_LIMIT', 0)), 'Maximum file size allowed in bytes. Maximum allowed value is ' . Storage::human((int)Http::getEnv('_APP_STORAGE_LIMIT', 0), 0) . '. For self hosted version you can change the limit by changing _APP_STORAGE_LIMIT environment variable. [Learn more about storage environment variables](/docs/environment-variables#storage)', true) ->param('allowedFileExtensions', [], new ArrayList(new Text(64), APP_LIMIT_ARRAY_PARAMS_SIZE), 'Allowed file extensions. Maximum of ' . APP_LIMIT_ARRAY_PARAMS_SIZE . ' extensions are allowed, each 64 characters long.', true) ->param('compression', COMPRESSION_TYPE_NONE, new WhiteList([COMPRESSION_TYPE_NONE, COMPRESSION_TYPE_GZIP, COMPRESSION_TYPE_ZSTD]), 'Compression algorithm choosen for compression. Can be one of ' . COMPRESSION_TYPE_NONE . ', [' . COMPRESSION_TYPE_GZIP . '](https://en.wikipedia.org/wiki/Gzip), or [' . COMPRESSION_TYPE_ZSTD . '](https://en.wikipedia.org/wiki/Zstd), For file size above ' . Storage::human(APP_STORAGE_READ_BUFFER, 0) . ' compression is skipped even if it\'s enabled', true) ->param('encryption', true, new Boolean(true), 'Is encryption enabled? For file size above ' . Storage::human(APP_STORAGE_READ_BUFFER, 0) . ' encryption is skipped even if it\'s enabled', true) @@ -251,7 +251,7 @@ App::put('/v1/storage/buckets/:bucketId') } $permissions ??= $bucket->getPermissions(); - $maximumFileSize ??= $bucket->getAttribute('maximumFileSize', (int) App::getEnv('_APP_STORAGE_LIMIT', 0)); + $maximumFileSize ??= $bucket->getAttribute('maximumFileSize', (int) Http::getEnv('_APP_STORAGE_LIMIT', 0)); $allowedFileExtensions ??= $bucket->getAttribute('allowedFileExtensions', []); $enabled ??= $bucket->getAttribute('enabled', true); $encryption ??= $bucket->getAttribute('encryption', true); @@ -283,7 +283,7 @@ App::put('/v1/storage/buckets/:bucketId') $response->dynamic($bucket, Response::MODEL_BUCKET); }); -App::delete('/v1/storage/buckets/:bucketId') +Http::delete('/v1/storage/buckets/:bucketId') ->desc('Delete Bucket') ->groups(['api', 'storage']) ->label('scope', 'buckets.write') @@ -325,7 +325,7 @@ App::delete('/v1/storage/buckets/:bucketId') $response->noContent(); }); -App::post('/v1/storage/buckets/:bucketId/files') +Http::post('/v1/storage/buckets/:bucketId/files') ->alias('/v1/storage/files', ['bucketId' => 'default']) ->desc('Create File') ->groups(['api', 'storage']) @@ -414,7 +414,7 @@ App::post('/v1/storage/buckets/:bucketId/files') } $maximumFileSize = $bucket->getAttribute('maximumFileSize', 0); - if ($maximumFileSize > (int) App::getEnv('_APP_STORAGE_LIMIT', 0)) { + if ($maximumFileSize > (int) Http::getEnv('_APP_STORAGE_LIMIT', 0)) { throw new Exception(Exception::GENERAL_SERVER_ERROR, 'Maximum bucket file size is larger than _APP_STORAGE_LIMIT'); } @@ -502,10 +502,10 @@ App::post('/v1/storage/buckets/:bucketId/files') } if ($chunksUploaded === $chunks) { - if (App::getEnv('_APP_STORAGE_ANTIVIRUS') === 'enabled' && $bucket->getAttribute('antivirus', true) && $fileSize <= APP_LIMIT_ANTIVIRUS && strtolower(App::getEnv('_APP_STORAGE_DEVICE', Storage::DEVICE_LOCAL)) === Storage::DEVICE_LOCAL) { + if (Http::getEnv('_APP_STORAGE_ANTIVIRUS') === 'enabled' && $bucket->getAttribute('antivirus', true) && $fileSize <= APP_LIMIT_ANTIVIRUS && strtolower(Http::getEnv('_APP_STORAGE_DEVICE', Storage::DEVICE_LOCAL)) === Storage::DEVICE_LOCAL) { $antivirus = new Network( - App::getEnv('_APP_STORAGE_ANTIVIRUS_HOST', 'clamav'), - (int) App::getEnv('_APP_STORAGE_ANTIVIRUS_PORT', 3310) + Http::getEnv('_APP_STORAGE_ANTIVIRUS_HOST', 'clamav'), + (int) Http::getEnv('_APP_STORAGE_ANTIVIRUS_PORT', 3310) ); if (!$antivirus->fileScan($path)) { @@ -537,7 +537,7 @@ App::post('/v1/storage/buckets/:bucketId/files') if (empty($data)) { $data = $deviceFiles->read($path); } - $key = App::getEnv('_APP_OPENSSL_KEY_V1'); + $key = Http::getEnv('_APP_OPENSSL_KEY_V1'); $iv = OpenSSL::randomPseudoBytes(OpenSSL::cipherIVLength(OpenSSL::CIPHER_AES_128_GCM)); $data = OpenSSL::encrypt($data, OpenSSL::CIPHER_AES_128_GCM, $key, 0, $iv, $tag); } @@ -666,7 +666,7 @@ App::post('/v1/storage/buckets/:bucketId/files') ->dynamic($file, Response::MODEL_FILE); }); -App::get('/v1/storage/buckets/:bucketId/files') +Http::get('/v1/storage/buckets/:bucketId/files') ->alias('/v1/storage/files', ['bucketId' => 'default']) ->desc('List Files') ->groups(['api', 'storage']) @@ -743,7 +743,7 @@ App::get('/v1/storage/buckets/:bucketId/files') ]), Response::MODEL_FILE_LIST); }); -App::get('/v1/storage/buckets/:bucketId/files/:fileId') +Http::get('/v1/storage/buckets/:bucketId/files/:fileId') ->alias('/v1/storage/files/:fileId', ['bucketId' => 'default']) ->desc('Get File') ->groups(['api', 'storage']) @@ -790,7 +790,7 @@ App::get('/v1/storage/buckets/:bucketId/files/:fileId') $response->dynamic($file, Response::MODEL_FILE); }); -App::get('/v1/storage/buckets/:bucketId/files/:fileId/preview') +Http::get('/v1/storage/buckets/:bucketId/files/:fileId/preview') ->alias('/v1/storage/files/:fileId/preview', ['bucketId' => 'default']) ->desc('Get File Preview') ->groups(['api', 'storage']) @@ -869,7 +869,7 @@ App::get('/v1/storage/buckets/:bucketId/files/:fileId/preview') $algorithm = $file->getAttribute('algorithm', 'none'); $cipher = $file->getAttribute('openSSLCipher'); $mime = $file->getAttribute('mimeType'); - if (!\in_array($mime, $inputs) || $file->getAttribute('sizeActual') > (int) App::getEnv('_APP_STORAGE_PREVIEW_LIMIT', 20000000)) { + if (!\in_array($mime, $inputs) || $file->getAttribute('sizeActual') > (int) Http::getEnv('_APP_STORAGE_PREVIEW_LIMIT', 20000000)) { if (!\in_array($mime, $inputs)) { $path = (\array_key_exists($mime, $fileLogos)) ? $fileLogos[$mime] : $fileLogos['default']; } else { @@ -901,7 +901,7 @@ App::get('/v1/storage/buckets/:bucketId/files/:fileId/preview') $source = OpenSSL::decrypt( $source, $file->getAttribute('openSSLCipher'), - App::getEnv('_APP_OPENSSL_KEY_V' . $file->getAttribute('openSSLVersion')), + Http::getEnv('_APP_OPENSSL_KEY_V' . $file->getAttribute('openSSLVersion')), 0, \hex2bin($file->getAttribute('openSSLIV')), \hex2bin($file->getAttribute('openSSLTag')) @@ -956,7 +956,7 @@ App::get('/v1/storage/buckets/:bucketId/files/:fileId/preview') unset($image); }); -App::get('/v1/storage/buckets/:bucketId/files/:fileId/download') +Http::get('/v1/storage/buckets/:bucketId/files/:fileId/download') ->alias('/v1/storage/files/:fileId/download', ['bucketId' => 'default']) ->desc('Get File for Download') ->groups(['api', 'storage']) @@ -1044,7 +1044,7 @@ App::get('/v1/storage/buckets/:bucketId/files/:fileId/download') $source = OpenSSL::decrypt( $source, $file->getAttribute('openSSLCipher'), - App::getEnv('_APP_OPENSSL_KEY_V' . $file->getAttribute('openSSLVersion')), + Http::getEnv('_APP_OPENSSL_KEY_V' . $file->getAttribute('openSSLVersion')), 0, \hex2bin($file->getAttribute('openSSLIV')), \hex2bin($file->getAttribute('openSSLTag')) @@ -1096,7 +1096,7 @@ App::get('/v1/storage/buckets/:bucketId/files/:fileId/download') } }); -App::get('/v1/storage/buckets/:bucketId/files/:fileId/view') +Http::get('/v1/storage/buckets/:bucketId/files/:fileId/view') ->alias('/v1/storage/files/:fileId/view', ['bucketId' => 'default']) ->desc('Get File for View') ->groups(['api', 'storage']) @@ -1194,7 +1194,7 @@ App::get('/v1/storage/buckets/:bucketId/files/:fileId/view') $source = OpenSSL::decrypt( $source, $file->getAttribute('openSSLCipher'), - App::getEnv('_APP_OPENSSL_KEY_V' . $file->getAttribute('openSSLVersion')), + Http::getEnv('_APP_OPENSSL_KEY_V' . $file->getAttribute('openSSLVersion')), 0, \hex2bin($file->getAttribute('openSSLIV')), \hex2bin($file->getAttribute('openSSLTag')) @@ -1247,7 +1247,7 @@ App::get('/v1/storage/buckets/:bucketId/files/:fileId/view') } }); -App::put('/v1/storage/buckets/:bucketId/files/:fileId') +Http::put('/v1/storage/buckets/:bucketId/files/:fileId') ->alias('/v1/storage/files/:fileId', ['bucketId' => 'default']) ->desc('Update File') ->groups(['api', 'storage']) @@ -1350,7 +1350,7 @@ App::put('/v1/storage/buckets/:bucketId/files/:fileId') $response->dynamic($file, Response::MODEL_FILE); }); -App::delete('/v1/storage/buckets/:bucketId/files/:fileId') +Http::delete('/v1/storage/buckets/:bucketId/files/:fileId') ->alias('/v1/storage/files/:fileId', ['bucketId' => 'default']) ->desc('Delete File') ->groups(['api', 'storage']) @@ -1446,7 +1446,7 @@ App::delete('/v1/storage/buckets/:bucketId/files/:fileId') $response->noContent(); }); -App::get('/v1/storage/usage') +Http::get('/v1/storage/usage') ->desc('Get usage stats for storage') ->groups(['api', 'storage', 'usage']) ->label('scope', 'files.read') @@ -1462,7 +1462,7 @@ App::get('/v1/storage/usage') ->action(function (string $range, Response $response, Database $dbForProject) { $usage = []; - if (App::getEnv('_APP_USAGE_STATS', 'enabled') === 'enabled') { + if (Http::getEnv('_APP_USAGE_STATS', 'enabled') === 'enabled') { $periods = [ '24h' => [ 'period' => '1h', @@ -1556,7 +1556,7 @@ App::get('/v1/storage/usage') $response->dynamic($usage, Response::MODEL_USAGE_STORAGE); }); -App::get('/v1/storage/:bucketId/usage') +Http::get('/v1/storage/:bucketId/usage') ->desc('Get usage stats for a storage bucket') ->groups(['api', 'storage', 'usage']) ->label('scope', 'files.read') @@ -1579,7 +1579,7 @@ App::get('/v1/storage/:bucketId/usage') } $usage = []; - if (App::getEnv('_APP_USAGE_STATS', 'enabled') === 'enabled') { + if (Http::getEnv('_APP_USAGE_STATS', 'enabled') === 'enabled') { $periods = [ '24h' => [ 'period' => '1h', diff --git a/app/controllers/api/teams.php b/app/controllers/api/teams.php index b000bea8eb..59144924b8 100644 --- a/app/controllers/api/teams.php +++ b/app/controllers/api/teams.php @@ -40,7 +40,7 @@ use Utopia\Http\Validator\ArrayList; use Utopia\Http\Validator\Assoc; use Utopia\Http\Validator\Text; -App::post('/v1/teams') +Http::post('/v1/teams') ->desc('Create Team') ->groups(['api', 'teams']) ->label('event', 'teams.[teamId].create') @@ -123,7 +123,7 @@ App::post('/v1/teams') ->dynamic($team, Response::MODEL_TEAM); }); -App::get('/v1/teams') +Http::get('/v1/teams') ->desc('List Teams') ->groups(['api', 'teams']) ->label('scope', 'teams.read') @@ -173,7 +173,7 @@ App::get('/v1/teams') ]), Response::MODEL_TEAM_LIST); }); -App::get('/v1/teams/:teamId') +Http::get('/v1/teams/:teamId') ->desc('Get Team') ->groups(['api', 'teams']) ->label('scope', 'teams.read') @@ -200,7 +200,7 @@ App::get('/v1/teams/:teamId') $response->dynamic($team, Response::MODEL_TEAM); }); -App::get('/v1/teams/:teamId/prefs') +Http::get('/v1/teams/:teamId/prefs') ->desc('Get Team Preferences') ->groups(['api', 'teams']) ->label('scope', 'teams.read') @@ -228,7 +228,7 @@ App::get('/v1/teams/:teamId/prefs') $response->dynamic(new Document($prefs), Response::MODEL_PREFERENCES); }); -App::put('/v1/teams/:teamId') +Http::put('/v1/teams/:teamId') ->desc('Update Name') ->groups(['api', 'teams']) ->label('event', 'teams.[teamId].update') @@ -271,7 +271,7 @@ App::put('/v1/teams/:teamId') $response->dynamic($team, Response::MODEL_TEAM); }); -App::put('/v1/teams/:teamId/prefs') +Http::put('/v1/teams/:teamId/prefs') ->desc('Update Preferences') ->groups(['api', 'teams']) ->label('event', 'teams.[teamId].update.prefs') @@ -307,7 +307,7 @@ App::put('/v1/teams/:teamId/prefs') $response->dynamic(new Document($prefs), Response::MODEL_PREFERENCES); }); -App::delete('/v1/teams/:teamId') +Http::delete('/v1/teams/:teamId') ->desc('Delete Team') ->groups(['api', 'teams']) ->label('event', 'teams.[teamId].delete') @@ -361,7 +361,7 @@ App::delete('/v1/teams/:teamId') $response->noContent(); }); -App::post('/v1/teams/:teamId/memberships') +Http::post('/v1/teams/:teamId/memberships') ->desc('Create Team Membership') ->groups(['api', 'teams', 'auth']) ->label('event', 'teams.[teamId].memberships.[membershipId].create') @@ -401,7 +401,7 @@ App::post('/v1/teams/:teamId/memberships') $isPrivilegedUser = Auth::isPrivilegedUser(Authorization::getRoles()); $isAppUser = Auth::isAppUser(Authorization::getRoles()); - if (!$isPrivilegedUser && !$isAppUser && empty(App::getEnv('_APP_SMTP_HOST'))) { + if (!$isPrivilegedUser && !$isAppUser && empty(Http::getEnv('_APP_SMTP_HOST'))) { throw new Exception(Exception::GENERAL_SMTP_DISABLED); } @@ -594,7 +594,7 @@ App::post('/v1/teams/:teamId/memberships') ); }); -App::get('/v1/teams/:teamId/memberships') +Http::get('/v1/teams/:teamId/memberships') ->desc('List Team Memberships') ->groups(['api', 'teams']) ->label('scope', 'teams.read') @@ -676,7 +676,7 @@ App::get('/v1/teams/:teamId/memberships') ]), Response::MODEL_MEMBERSHIP_LIST); }); -App::get('/v1/teams/:teamId/memberships/:membershipId') +Http::get('/v1/teams/:teamId/memberships/:membershipId') ->desc('Get Team Membership') ->groups(['api', 'teams']) ->label('scope', 'teams.read') @@ -718,7 +718,7 @@ App::get('/v1/teams/:teamId/memberships/:membershipId') $response->dynamic($membership, Response::MODEL_MEMBERSHIP); }); -App::patch('/v1/teams/:teamId/memberships/:membershipId') +Http::patch('/v1/teams/:teamId/memberships/:membershipId') ->desc('Update Membership Roles') ->groups(['api', 'teams']) ->label('event', 'teams.[teamId].memberships.[membershipId].update') @@ -789,7 +789,7 @@ App::patch('/v1/teams/:teamId/memberships/:membershipId') ); }); -App::patch('/v1/teams/:teamId/memberships/:membershipId/status') +Http::patch('/v1/teams/:teamId/memberships/:membershipId/status') ->desc('Update Team Membership Status') ->groups(['api', 'teams']) ->label('event', 'teams.[teamId].memberships.[membershipId].update.status') @@ -924,7 +924,7 @@ App::patch('/v1/teams/:teamId/memberships/:membershipId/status') ); }); -App::delete('/v1/teams/:teamId/memberships/:membershipId') +Http::delete('/v1/teams/:teamId/memberships/:membershipId') ->desc('Delete Team Membership') ->groups(['api', 'teams']) ->label('event', 'teams.[teamId].memberships.[membershipId].delete') @@ -990,7 +990,7 @@ App::delete('/v1/teams/:teamId/memberships/:membershipId') $response->noContent(); }); -App::get('/v1/teams/:teamId/logs') +Http::get('/v1/teams/:teamId/logs') ->desc('List Team Logs') ->groups(['api', 'teams']) ->label('scope', 'teams.read') diff --git a/app/controllers/api/users.php b/app/controllers/api/users.php index 0a18cd4937..44359044cf 100644 --- a/app/controllers/api/users.php +++ b/app/controllers/api/users.php @@ -88,7 +88,7 @@ function createUser(string $hash, mixed $hashOptions, string $userId, ?string $e return $user; } -App::post('/v1/users') +Http::post('/v1/users') ->desc('Create User') ->groups(['api', 'users']) ->label('event', 'users.[userId].create') @@ -121,7 +121,7 @@ App::post('/v1/users') ->dynamic($user, Response::MODEL_USER); }); -App::post('/v1/users/bcrypt') +Http::post('/v1/users/bcrypt') ->desc('Create User with Bcrypt Password') ->groups(['api', 'users']) ->label('event', 'users.[userId].create') @@ -152,7 +152,7 @@ App::post('/v1/users/bcrypt') ->dynamic($user, Response::MODEL_USER); }); -App::post('/v1/users/md5') +Http::post('/v1/users/md5') ->desc('Create User with MD5 Password') ->groups(['api', 'users']) ->label('event', 'users.[userId].create') @@ -183,7 +183,7 @@ App::post('/v1/users/md5') ->dynamic($user, Response::MODEL_USER); }); -App::post('/v1/users/argon2') +Http::post('/v1/users/argon2') ->desc('Create User with Argon2 Password') ->groups(['api', 'users']) ->label('event', 'users.[userId].create') @@ -214,7 +214,7 @@ App::post('/v1/users/argon2') ->dynamic($user, Response::MODEL_USER); }); -App::post('/v1/users/sha') +Http::post('/v1/users/sha') ->desc('Create User with SHA Password') ->groups(['api', 'users']) ->label('event', 'users.[userId].create') @@ -252,7 +252,7 @@ App::post('/v1/users/sha') ->dynamic($user, Response::MODEL_USER); }); -App::post('/v1/users/phpass') +Http::post('/v1/users/phpass') ->desc('Create User with PHPass Password') ->groups(['api', 'users']) ->label('event', 'users.[userId].create') @@ -283,7 +283,7 @@ App::post('/v1/users/phpass') ->dynamic($user, Response::MODEL_USER); }); -App::post('/v1/users/scrypt') +Http::post('/v1/users/scrypt') ->desc('Create User with Scrypt Password') ->groups(['api', 'users']) ->label('event', 'users.[userId].create') @@ -327,7 +327,7 @@ App::post('/v1/users/scrypt') ->dynamic($user, Response::MODEL_USER); }); -App::post('/v1/users/scrypt-modified') +Http::post('/v1/users/scrypt-modified') ->desc('Create User with Scrypt Modified Password') ->groups(['api', 'users']) ->label('event', 'users.[userId].create') @@ -361,7 +361,7 @@ App::post('/v1/users/scrypt-modified') ->dynamic($user, Response::MODEL_USER); }); -App::get('/v1/users') +Http::get('/v1/users') ->desc('List Users') ->groups(['api', 'users']) ->label('scope', 'users.read') @@ -408,7 +408,7 @@ App::get('/v1/users') ]), Response::MODEL_USER_LIST); }); -App::get('/v1/users/:userId') +Http::get('/v1/users/:userId') ->desc('Get User') ->groups(['api', 'users']) ->label('scope', 'users.read') @@ -434,7 +434,7 @@ App::get('/v1/users/:userId') $response->dynamic($user, Response::MODEL_USER); }); -App::get('/v1/users/:userId/prefs') +Http::get('/v1/users/:userId/prefs') ->desc('Get User Preferences') ->groups(['api', 'users']) ->label('scope', 'users.read') @@ -462,7 +462,7 @@ App::get('/v1/users/:userId/prefs') $response->dynamic(new Document($prefs), Response::MODEL_PREFERENCES); }); -App::get('/v1/users/:userId/sessions') +Http::get('/v1/users/:userId/sessions') ->desc('List User Sessions') ->groups(['api', 'users']) ->label('scope', 'users.read') @@ -504,7 +504,7 @@ App::get('/v1/users/:userId/sessions') ]), Response::MODEL_SESSION_LIST); }); -App::get('/v1/users/:userId/memberships') +Http::get('/v1/users/:userId/memberships') ->desc('List User Memberships') ->groups(['api', 'users']) ->label('scope', 'users.read') @@ -544,7 +544,7 @@ App::get('/v1/users/:userId/memberships') ]), Response::MODEL_MEMBERSHIP_LIST); }); -App::get('/v1/users/:userId/logs') +Http::get('/v1/users/:userId/logs') ->desc('List User Logs') ->groups(['api', 'users']) ->label('scope', 'users.read') @@ -626,7 +626,7 @@ App::get('/v1/users/:userId/logs') ]), Response::MODEL_LOG_LIST); }); -App::patch('/v1/users/:userId/status') +Http::patch('/v1/users/:userId/status') ->desc('Update User Status') ->groups(['api', 'users']) ->label('event', 'users.[userId].update.status') @@ -663,7 +663,7 @@ App::patch('/v1/users/:userId/status') $response->dynamic($user, Response::MODEL_USER); }); -App::patch('/v1/users/:userId/verification') +Http::patch('/v1/users/:userId/verification') ->desc('Update Email Verification') ->groups(['api', 'users']) ->label('event', 'users.[userId].update.verification') @@ -699,7 +699,7 @@ App::patch('/v1/users/:userId/verification') $response->dynamic($user, Response::MODEL_USER); }); -App::patch('/v1/users/:userId/verification/phone') +Http::patch('/v1/users/:userId/verification/phone') ->desc('Update Phone Verification') ->groups(['api', 'users']) ->label('event', 'users.[userId].update.verification') @@ -735,7 +735,7 @@ App::patch('/v1/users/:userId/verification/phone') $response->dynamic($user, Response::MODEL_USER); }); -App::patch('/v1/users/:userId/name') +Http::patch('/v1/users/:userId/name') ->desc('Update Name') ->groups(['api', 'users']) ->label('event', 'users.[userId].update.name') @@ -776,7 +776,7 @@ App::patch('/v1/users/:userId/name') $response->dynamic($user, Response::MODEL_USER); }); -App::patch('/v1/users/:userId/password') +Http::patch('/v1/users/:userId/password') ->desc('Update Password') ->groups(['api', 'users']) ->label('event', 'users.[userId].update.password') @@ -835,7 +835,7 @@ App::patch('/v1/users/:userId/password') $response->dynamic($user, Response::MODEL_USER); }); -App::patch('/v1/users/:userId/email') +Http::patch('/v1/users/:userId/email') ->desc('Update Email') ->groups(['api', 'users']) ->label('event', 'users.[userId].update.email') @@ -882,7 +882,7 @@ App::patch('/v1/users/:userId/email') $response->dynamic($user, Response::MODEL_USER); }); -App::patch('/v1/users/:userId/phone') +Http::patch('/v1/users/:userId/phone') ->desc('Update Phone') ->groups(['api', 'users']) ->label('event', 'users.[userId].update.phone') @@ -927,7 +927,7 @@ App::patch('/v1/users/:userId/phone') $response->dynamic($user, Response::MODEL_USER); }); -App::patch('/v1/users/:userId/verification') +Http::patch('/v1/users/:userId/verification') ->desc('Update Email Verification') ->groups(['api', 'users']) ->label('event', 'users.[userId].update.verification') @@ -963,7 +963,7 @@ App::patch('/v1/users/:userId/verification') $response->dynamic($user, Response::MODEL_USER); }); -App::patch('/v1/users/:userId/prefs') +Http::patch('/v1/users/:userId/prefs') ->desc('Update User Preferences') ->groups(['api', 'users']) ->label('event', 'users.[userId].update.prefs') @@ -997,7 +997,7 @@ App::patch('/v1/users/:userId/prefs') $response->dynamic(new Document($prefs), Response::MODEL_PREFERENCES); }); -App::delete('/v1/users/:userId/sessions/:sessionId') +Http::delete('/v1/users/:userId/sessions/:sessionId') ->desc('Delete User Session') ->groups(['api', 'users']) ->label('event', 'users.[userId].sessions.[sessionId].delete') @@ -1041,7 +1041,7 @@ App::delete('/v1/users/:userId/sessions/:sessionId') $response->noContent(); }); -App::delete('/v1/users/:userId/sessions') +Http::delete('/v1/users/:userId/sessions') ->desc('Delete User Sessions') ->groups(['api', 'users']) ->label('event', 'users.[userId].sessions.[sessionId].delete') @@ -1084,7 +1084,7 @@ App::delete('/v1/users/:userId/sessions') $response->noContent(); }); -App::delete('/v1/users/:userId') +Http::delete('/v1/users/:userId') ->desc('Delete User') ->groups(['api', 'users']) ->label('event', 'users.[userId].delete') @@ -1127,7 +1127,7 @@ App::delete('/v1/users/:userId') $response->noContent(); }); -App::get('/v1/users/usage') +Http::get('/v1/users/usage') ->desc('Get usage stats for the users API') ->groups(['api', 'users', 'usage']) ->label('scope', 'users.read') @@ -1145,7 +1145,7 @@ App::get('/v1/users/usage') ->action(function (string $range, string $provider, Response $response, Database $dbForProject) { $usage = []; - if (App::getEnv('_APP_USAGE_STATS', 'enabled') == 'enabled') { + if (Http::getEnv('_APP_USAGE_STATS', 'enabled') == 'enabled') { $periods = [ '24h' => [ 'period' => '1h', diff --git a/app/controllers/general.php b/app/controllers/general.php index 885c7f1aec..3e3596c74e 100644 --- a/app/controllers/general.php +++ b/app/controllers/general.php @@ -40,7 +40,7 @@ Config::setParam('domainVerification', false); Config::setParam('cookieDomain', 'localhost'); Config::setParam('cookieSamesite', Response::COOKIE_SAMESITE_NONE); -App::init() +Http::init() ->groups(['api']) ->inject('utopia') ->inject('request') @@ -59,7 +59,7 @@ App::init() $route = $utopia->match($request); Request::setRoute($route); - $requestFormat = $request->getHeader('x-appwrite-response-format', App::getEnv('_APP_SYSTEM_RESPONSE_FORMAT', '')); + $requestFormat = $request->getHeader('x-appwrite-response-format', Http::getEnv('_APP_SYSTEM_RESPONSE_FORMAT', '')); if ($requestFormat) { switch ($requestFormat) { case version_compare($requestFormat, '0.12.0', '<'): @@ -94,7 +94,7 @@ App::init() } else { Authorization::disable(); - $envDomain = App::getEnv('_APP_DOMAIN', ''); + $envDomain = Http::getEnv('_APP_DOMAIN', ''); $mainDomain = null; if (!empty($envDomain) && $envDomain !== 'localhost') { $mainDomain = $envDomain; @@ -185,7 +185,7 @@ App::init() /* * Response format */ - $responseFormat = $request->getHeader('x-appwrite-response-format', App::getEnv('_APP_SYSTEM_RESPONSE_FORMAT', '')); + $responseFormat = $request->getHeader('x-appwrite-response-format', Http::getEnv('_APP_SYSTEM_RESPONSE_FORMAT', '')); if ($responseFormat) { switch ($responseFormat) { case version_compare($responseFormat, '0.11.2', '<='): @@ -216,7 +216,7 @@ App::init() * As recommended at: * @see https://www.owasp.org/index.php/List_of_useful_HTTP_headers */ - if (App::getEnv('_APP_OPTIONS_FORCE_HTTPS', 'disabled') === 'enabled') { // Force HTTPS + if (Http::getEnv('_APP_OPTIONS_FORCE_HTTPS', 'disabled') === 'enabled') { // Force HTTPS if ($request->getProtocol() !== 'https') { if ($request->getMethod() !== Request::METHOD_GET) { throw new AppwriteException(AppwriteException::GENERAL_PROTOCOL_UNSUPPORTED, 'Method unsupported over HTTP.'); @@ -375,7 +375,7 @@ App::init() } }); -App::options() +Http::options() ->inject('request') ->inject('response') ->action(function (Request $request, Response $response) { @@ -392,7 +392,7 @@ App::options() ->noContent(); }); -App::error() +Http::error() ->inject('error') ->inject('utopia') ->inject('request') @@ -402,7 +402,7 @@ App::error() ->inject('loggerBreadcrumbs') ->action(function (Throwable $error, App $utopia, Request $request, Response $response, Document $project, ?Logger $logger, array $loggerBreadcrumbs) { - $version = App::getEnv('_APP_VERSION', 'UNKNOWN'); + $version = Http::getEnv('_APP_VERSION', 'UNKNOWN'); $route = $utopia->match($request); if ($logger) { @@ -443,7 +443,7 @@ App::error() $action = $route->getLabel("sdk.namespace", "UNKNOWN_NAMESPACE") . '.' . $route->getLabel("sdk.method", "UNKNOWN_METHOD"); $log->setAction($action); - $isProduction = App::getEnv('_APP_ENV', 'development') === 'production'; + $isProduction = Http::getEnv('_APP_ENV', 'development') === 'production'; $log->setEnvironment($isProduction ? Log::ENVIRONMENT_PRODUCTION : Log::ENVIRONMENT_STAGING); foreach ($loggerBreadcrumbs as $loggerBreadcrumb) { @@ -519,7 +519,7 @@ App::error() $type = $error->getType(); - $output = ((App::isDevelopment())) ? [ + $output = ((Http::isDevelopment())) ? [ 'message' => $message, 'code' => $code, 'file' => $file, @@ -548,7 +548,7 @@ App::error() $layout ->setParam('title', $project->getAttribute('name') . ' - Error') - ->setParam('development', App::isDevelopment()) + ->setParam('development', Http::isDevelopment()) ->setParam('projectName', $project->getAttribute('name')) ->setParam('projectURL', $project->getAttribute('url')) ->setParam('message', $error->getMessage()) @@ -565,7 +565,7 @@ App::error() ); }); -App::get('/robots.txt') +Http::get('/robots.txt') ->desc('Robots.txt File') ->label('scope', 'public') ->label('docs', false) @@ -575,7 +575,7 @@ App::get('/robots.txt') $response->text($template->render(false)); }); -App::get('/humans.txt') +Http::get('/humans.txt') ->desc('Humans.txt File') ->label('scope', 'public') ->label('docs', false) @@ -585,7 +585,7 @@ App::get('/humans.txt') $response->text($template->render(false)); }); -App::get('/.well-known/acme-challenge/*') +Http::get('/.well-known/acme-challenge/*') ->desc('SSL Verification') ->label('scope', 'public') ->label('docs', false) diff --git a/app/controllers/mock.php b/app/controllers/mock.php index 6e608817c6..269ce6476e 100644 --- a/app/controllers/mock.php +++ b/app/controllers/mock.php @@ -17,7 +17,7 @@ use Utopia\Http\Validator\WhiteList; use Utopia\Database\Helpers\ID; use Utopia\Http\Validator\Nullable; -App::get('/v1/mock/tests/foo') +Http::get('/v1/mock/tests/foo') ->desc('Get Foo') ->groups(['mock']) ->label('scope', 'public') @@ -35,7 +35,7 @@ App::get('/v1/mock/tests/foo') ->action(function ($x, $y, $z) { }); -App::post('/v1/mock/tests/foo') +Http::post('/v1/mock/tests/foo') ->desc('Post Foo') ->groups(['mock']) ->label('scope', 'public') @@ -53,7 +53,7 @@ App::post('/v1/mock/tests/foo') ->action(function ($x, $y, $z) { }); -App::patch('/v1/mock/tests/foo') +Http::patch('/v1/mock/tests/foo') ->desc('Patch Foo') ->groups(['mock']) ->label('scope', 'public') @@ -71,7 +71,7 @@ App::patch('/v1/mock/tests/foo') ->action(function ($x, $y, $z) { }); -App::put('/v1/mock/tests/foo') +Http::put('/v1/mock/tests/foo') ->desc('Put Foo') ->groups(['mock']) ->label('scope', 'public') @@ -89,7 +89,7 @@ App::put('/v1/mock/tests/foo') ->action(function ($x, $y, $z) { }); -App::delete('/v1/mock/tests/foo') +Http::delete('/v1/mock/tests/foo') ->desc('Delete Foo') ->groups(['mock']) ->label('scope', 'public') @@ -107,7 +107,7 @@ App::delete('/v1/mock/tests/foo') ->action(function ($x, $y, $z) { }); -App::get('/v1/mock/tests/bar') +Http::get('/v1/mock/tests/bar') ->desc('Get Bar') ->groups(['mock']) ->label('scope', 'public') @@ -125,7 +125,7 @@ App::get('/v1/mock/tests/bar') ->action(function ($required, $default, $z) { }); -App::post('/v1/mock/tests/bar') +Http::post('/v1/mock/tests/bar') ->desc('Post Bar') ->groups(['mock']) ->label('scope', 'public') @@ -145,7 +145,7 @@ App::post('/v1/mock/tests/bar') ->action(function ($required, $default, $z) { }); -App::patch('/v1/mock/tests/bar') +Http::patch('/v1/mock/tests/bar') ->desc('Patch Bar') ->groups(['mock']) ->label('scope', 'public') @@ -163,7 +163,7 @@ App::patch('/v1/mock/tests/bar') ->action(function ($required, $default, $z) { }); -App::put('/v1/mock/tests/bar') +Http::put('/v1/mock/tests/bar') ->desc('Put Bar') ->groups(['mock']) ->label('scope', 'public') @@ -181,7 +181,7 @@ App::put('/v1/mock/tests/bar') ->action(function ($required, $default, $z) { }); -App::delete('/v1/mock/tests/bar') +Http::delete('/v1/mock/tests/bar') ->desc('Delete Bar') ->groups(['mock']) ->label('scope', 'public') @@ -200,7 +200,7 @@ App::delete('/v1/mock/tests/bar') }); /** Endpoint to test if required headers are sent from the SDK */ -App::get('/v1/mock/tests/general/headers') +Http::get('/v1/mock/tests/general/headers') ->desc('Get headers') ->groups(['mock']) ->label('scope', 'public') @@ -228,7 +228,7 @@ App::get('/v1/mock/tests/general/headers') $response->dynamic(new Document(['result' => $res]), Response::MODEL_MOCK); }); -App::get('/v1/mock/tests/general/download') +Http::get('/v1/mock/tests/general/download') ->desc('Download File') ->groups(['mock']) ->label('scope', 'public') @@ -252,7 +252,7 @@ App::get('/v1/mock/tests/general/download') ; }); -App::post('/v1/mock/tests/general/upload') +Http::post('/v1/mock/tests/general/upload') ->desc('Upload File') ->groups(['mock']) ->label('scope', 'public') @@ -340,7 +340,7 @@ App::post('/v1/mock/tests/general/upload') } }); -App::get('/v1/mock/tests/general/redirect') +Http::get('/v1/mock/tests/general/redirect') ->desc('Redirect') ->groups(['mock']) ->label('scope', 'public') @@ -358,7 +358,7 @@ App::get('/v1/mock/tests/general/redirect') $response->redirect('/v1/mock/tests/general/redirect/done'); }); -App::get('/v1/mock/tests/general/redirect/done') +Http::get('/v1/mock/tests/general/redirect/done') ->desc('Redirected') ->groups(['mock']) ->label('scope', 'public') @@ -373,7 +373,7 @@ App::get('/v1/mock/tests/general/redirect/done') ->action(function () { }); -App::get('/v1/mock/tests/general/set-cookie') +Http::get('/v1/mock/tests/general/set-cookie') ->desc('Set Cookie') ->groups(['mock']) ->label('scope', 'public') @@ -392,7 +392,7 @@ App::get('/v1/mock/tests/general/set-cookie') $response->addCookie('cookieName', 'cookieValue', \time() + 31536000, '/', $request->getHostname(), true, true); }); -App::get('/v1/mock/tests/general/get-cookie') +Http::get('/v1/mock/tests/general/get-cookie') ->desc('Get Cookie') ->groups(['mock']) ->label('scope', 'public') @@ -412,7 +412,7 @@ App::get('/v1/mock/tests/general/get-cookie') } }); -App::get('/v1/mock/tests/general/empty') +Http::get('/v1/mock/tests/general/empty') ->desc('Empty Response') ->groups(['mock']) ->label('scope', 'public') @@ -429,7 +429,7 @@ App::get('/v1/mock/tests/general/empty') $response->noContent(); }); -App::post('/v1/mock/tests/general/nullable') +Http::post('/v1/mock/tests/general/nullable') ->desc('Nullable Test') ->groups(['mock']) ->label('scope', 'public') @@ -445,7 +445,7 @@ App::post('/v1/mock/tests/general/nullable') }); /** Endpoint to test if required headers are sent from the SDK */ -App::get('/v1/mock/tests/general/headers') +Http::get('/v1/mock/tests/general/headers') ->desc('Get headers') ->groups(['mock']) ->label('scope', 'public') @@ -473,7 +473,7 @@ App::get('/v1/mock/tests/general/headers') $response->dynamic(new Document(['result' => $res]), Response::MODEL_MOCK); }); -App::get('/v1/mock/tests/general/400-error') +Http::get('/v1/mock/tests/general/400-error') ->desc('400 Error') ->groups(['mock']) ->label('scope', 'public') @@ -489,7 +489,7 @@ App::get('/v1/mock/tests/general/400-error') throw new Exception(Exception::GENERAL_MOCK, 'Mock 400 error'); }); -App::get('/v1/mock/tests/general/500-error') +Http::get('/v1/mock/tests/general/500-error') ->desc('500 Error') ->groups(['mock']) ->label('scope', 'public') @@ -505,7 +505,7 @@ App::get('/v1/mock/tests/general/500-error') throw new Exception(Exception::GENERAL_MOCK, 'Mock 500 error', 500); }); -App::get('/v1/mock/tests/general/502-error') +Http::get('/v1/mock/tests/general/502-error') ->desc('502 Error') ->groups(['mock']) ->label('scope', 'public') @@ -526,7 +526,7 @@ App::get('/v1/mock/tests/general/502-error') ; }); -App::get('/v1/mock/tests/general/oauth2') +Http::get('/v1/mock/tests/general/oauth2') ->desc('OAuth Login') ->groups(['mock']) ->label('scope', 'public') @@ -542,7 +542,7 @@ App::get('/v1/mock/tests/general/oauth2') $response->redirect($redirectURI . '?' . \http_build_query(['code' => 'abcdef', 'state' => $state])); }); -App::get('/v1/mock/tests/general/oauth2/token') +Http::get('/v1/mock/tests/general/oauth2/token') ->desc('OAuth2 Token') ->groups(['mock']) ->label('scope', 'public') @@ -588,7 +588,7 @@ App::get('/v1/mock/tests/general/oauth2/token') } }); -App::get('/v1/mock/tests/general/oauth2/user') +Http::get('/v1/mock/tests/general/oauth2/user') ->desc('OAuth2 User') ->groups(['mock']) ->label('scope', 'public') @@ -608,7 +608,7 @@ App::get('/v1/mock/tests/general/oauth2/user') ]); }); -App::get('/v1/mock/tests/general/oauth2/success') +Http::get('/v1/mock/tests/general/oauth2/success') ->desc('OAuth2 Success') ->groups(['mock']) ->label('scope', 'public') @@ -621,7 +621,7 @@ App::get('/v1/mock/tests/general/oauth2/success') ]); }); -App::get('/v1/mock/tests/general/oauth2/failure') +Http::get('/v1/mock/tests/general/oauth2/failure') ->desc('OAuth2 Failure') ->groups(['mock']) ->label('scope', 'public') @@ -636,7 +636,7 @@ App::get('/v1/mock/tests/general/oauth2/failure') ]); }); -App::shutdown() +Http::shutdown() ->groups(['mock']) ->inject('utopia') ->inject('response') diff --git a/app/controllers/shared/api.php b/app/controllers/shared/api.php index ebc8ba764b..270b9ba2fa 100644 --- a/app/controllers/shared/api.php +++ b/app/controllers/shared/api.php @@ -87,7 +87,7 @@ $databaseListener = function (string $event, Document $document, Stats $usage) { } }; -App::init() +Http::init() ->groups(['api']) ->inject('utopia') ->inject('request') @@ -155,7 +155,7 @@ App::init() ; } - $enabled = App::getEnv('_APP_OPTIONS_ABUSE', 'enabled') !== 'disabled'; + $enabled = Http::getEnv('_APP_OPTIONS_ABUSE', 'enabled') !== 'disabled'; if ( $enabled // Abuse is enabled @@ -257,7 +257,7 @@ App::init() } }); -App::init() +Http::init() ->groups(['auth']) ->inject('utopia') ->inject('request') @@ -317,7 +317,7 @@ App::init() * Delete older sessions if the number of sessions have crossed * the session limit set for the project */ -App::shutdown() +Http::shutdown() ->groups(['session']) ->inject('utopia') ->inject('request') @@ -350,7 +350,7 @@ App::shutdown() $dbForProject->deleteCachedDocument('users', $userId); }); -App::shutdown() +Http::shutdown() ->groups(['api']) ->inject('utopia') ->inject('request') @@ -521,7 +521,7 @@ App::shutdown() } if ( - App::getEnv('_APP_USAGE_STATS', 'enabled') == 'enabled' + Http::getEnv('_APP_USAGE_STATS', 'enabled') == 'enabled' && $project->getId() && !empty($route->getLabel('sdk.namespace', null)) ) { // Don't calculate console usage on admin mode @@ -553,10 +553,10 @@ App::shutdown() } }); -App::init() +Http::init() ->groups(['usage']) ->action(function () { - if (App::getEnv('_APP_USAGE_STATS', 'enabled') !== 'enabled') { + if (Http::getEnv('_APP_USAGE_STATS', 'enabled') !== 'enabled') { throw new Exception(Exception::GENERAL_USAGE_DISABLED); } }); diff --git a/app/controllers/web/console.php b/app/controllers/web/console.php index f025e39de3..9260855881 100644 --- a/app/controllers/web/console.php +++ b/app/controllers/web/console.php @@ -4,7 +4,7 @@ use Appwrite\Utopia\Request; use Appwrite\Utopia\Response; use Utopia\Http\Http; -App::init() +Http::init() ->groups(['web']) ->inject('request') ->inject('response') @@ -16,7 +16,7 @@ App::init() ; }); -App::get('/console/*') +Http::get('/console/*') ->alias('/') ->alias('auth/*') ->alias('/invite') diff --git a/app/controllers/web/home.php b/app/controllers/web/home.php index fcb07bc2f5..141ae05041 100644 --- a/app/controllers/web/home.php +++ b/app/controllers/web/home.php @@ -4,7 +4,7 @@ use Appwrite\Utopia\Response; use Utopia\Http\Http; use Utopia\Config\Config; -App::get('/versions') +Http::get('/versions') ->desc('Get Version') ->groups(['home']) ->label('scope', 'public') diff --git a/app/executor.php b/app/executor.php index bb1fc2e3db..19813dddac 100644 --- a/app/executor.php +++ b/app/executor.php @@ -4,9 +4,7 @@ require_once __DIR__ . '/../vendor/autoload.php'; use Appwrite\Runtimes\Runtimes; use Swoole\ConnectionPool; -use Swoole\Http\Request as SwooleRequest; -use Swoole\Http\Response as SwooleResponse; -use Swoole\Http\Server; +use Utopia\Http\Adapter\Swoole\Server; use Swoole\Process; use Swoole\Runtime; use Swoole\Timer; @@ -55,8 +53,8 @@ $activeRuntimes->create(); * Create orchestration pool */ $orchestrationPool = new ConnectionPool(function () { - $dockerUser = App::getEnv('DOCKERHUB_PULL_USERNAME', null); - $dockerPass = App::getEnv('DOCKERHUB_PULL_PASSWORD', null); + $dockerUser = Http::getEnv('DOCKERHUB_PULL_USERNAME', null); + $dockerPass = Http::getEnv('DOCKERHUB_PULL_PASSWORD', null); $orchestration = new Orchestration(new DockerCLI($dockerUser, $dockerPass)); return $orchestration; }, 10); @@ -65,8 +63,8 @@ $orchestrationPool = new ConnectionPool(function () { /** * Create logger instance */ -$providerName = App::getEnv('_APP_LOGGING_PROVIDER', ''); -$providerConfig = App::getEnv('_APP_LOGGING_CONFIG', ''); +$providerName = Http::getEnv('_APP_LOGGING_PROVIDER', ''); +$providerConfig = Http::getEnv('_APP_LOGGING_CONFIG', ''); $logger = null; if (!empty($providerName) && !empty($providerConfig) && Logger::hasProvider($providerName)) { @@ -75,12 +73,12 @@ if (!empty($providerName) && !empty($providerConfig) && Logger::hasProvider($pro $logger = new Logger($adapter); } -function logError(Throwable $error, string $action, Utopia\Route $route = null) +function logError(Throwable $error, string $action, Utopia\Http\Route $route = null) { global $logger; if ($logger) { - $version = App::getEnv('_APP_VERSION', 'UNKNOWN'); + $version = Http::getEnv('_APP_VERSION', 'UNKNOWN'); $log = new Log(); $log->setNamespace("executor"); @@ -104,7 +102,7 @@ function logError(Throwable $error, string $action, Utopia\Route $route = null) $log->setAction($action); - $isProduction = App::getEnv('_APP_ENV', 'development') === 'production'; + $isProduction = Http::getEnv('_APP_ENV', 'development') === 'production'; $log->setEnvironment($isProduction ? Log::ENVIRONMENT_PRODUCTION : Log::ENVIRONMENT_STAGING); $responseCode = $logger->addLog($log); @@ -119,49 +117,49 @@ function logError(Throwable $error, string $action, Utopia\Route $route = null) function getStorageDevice($root): Device { - switch (strtolower(App::getEnv('_APP_STORAGE_DEVICE', Storage::DEVICE_LOCAL))) { + switch (strtolower(Http::getEnv('_APP_STORAGE_DEVICE', Storage::DEVICE_LOCAL))) { case Storage::DEVICE_LOCAL: default: return new Local($root); case Storage::DEVICE_S3: - $s3AccessKey = App::getEnv('_APP_STORAGE_S3_ACCESS_KEY', ''); - $s3SecretKey = App::getEnv('_APP_STORAGE_S3_SECRET', ''); - $s3Region = App::getEnv('_APP_STORAGE_S3_REGION', ''); - $s3Bucket = App::getEnv('_APP_STORAGE_S3_BUCKET', ''); + $s3AccessKey = Http::getEnv('_APP_STORAGE_S3_ACCESS_KEY', ''); + $s3SecretKey = Http::getEnv('_APP_STORAGE_S3_SECRET', ''); + $s3Region = Http::getEnv('_APP_STORAGE_S3_REGION', ''); + $s3Bucket = Http::getEnv('_APP_STORAGE_S3_BUCKET', ''); $s3Acl = 'private'; return new S3($root, $s3AccessKey, $s3SecretKey, $s3Bucket, $s3Region, $s3Acl); case Storage::DEVICE_DO_SPACES: - $doSpacesAccessKey = App::getEnv('_APP_STORAGE_DO_SPACES_ACCESS_KEY', ''); - $doSpacesSecretKey = App::getEnv('_APP_STORAGE_DO_SPACES_SECRET', ''); - $doSpacesRegion = App::getEnv('_APP_STORAGE_DO_SPACES_REGION', ''); - $doSpacesBucket = App::getEnv('_APP_STORAGE_DO_SPACES_BUCKET', ''); + $doSpacesAccessKey = Http::getEnv('_APP_STORAGE_DO_SPACES_ACCESS_KEY', ''); + $doSpacesSecretKey = Http::getEnv('_APP_STORAGE_DO_SPACES_SECRET', ''); + $doSpacesRegion = Http::getEnv('_APP_STORAGE_DO_SPACES_REGION', ''); + $doSpacesBucket = Http::getEnv('_APP_STORAGE_DO_SPACES_BUCKET', ''); $doSpacesAcl = 'private'; return new DOSpaces($root, $doSpacesAccessKey, $doSpacesSecretKey, $doSpacesBucket, $doSpacesRegion, $doSpacesAcl); case Storage::DEVICE_BACKBLAZE: - $backblazeAccessKey = App::getEnv('_APP_STORAGE_BACKBLAZE_ACCESS_KEY', ''); - $backblazeSecretKey = App::getEnv('_APP_STORAGE_BACKBLAZE_SECRET', ''); - $backblazeRegion = App::getEnv('_APP_STORAGE_BACKBLAZE_REGION', ''); - $backblazeBucket = App::getEnv('_APP_STORAGE_BACKBLAZE_BUCKET', ''); + $backblazeAccessKey = Http::getEnv('_APP_STORAGE_BACKBLAZE_ACCESS_KEY', ''); + $backblazeSecretKey = Http::getEnv('_APP_STORAGE_BACKBLAZE_SECRET', ''); + $backblazeRegion = Http::getEnv('_APP_STORAGE_BACKBLAZE_REGION', ''); + $backblazeBucket = Http::getEnv('_APP_STORAGE_BACKBLAZE_BUCKET', ''); $backblazeAcl = 'private'; return new Backblaze($root, $backblazeAccessKey, $backblazeSecretKey, $backblazeBucket, $backblazeRegion, $backblazeAcl); case Storage::DEVICE_LINODE: - $linodeAccessKey = App::getEnv('_APP_STORAGE_LINODE_ACCESS_KEY', ''); - $linodeSecretKey = App::getEnv('_APP_STORAGE_LINODE_SECRET', ''); - $linodeRegion = App::getEnv('_APP_STORAGE_LINODE_REGION', ''); - $linodeBucket = App::getEnv('_APP_STORAGE_LINODE_BUCKET', ''); + $linodeAccessKey = Http::getEnv('_APP_STORAGE_LINODE_ACCESS_KEY', ''); + $linodeSecretKey = Http::getEnv('_APP_STORAGE_LINODE_SECRET', ''); + $linodeRegion = Http::getEnv('_APP_STORAGE_LINODE_REGION', ''); + $linodeBucket = Http::getEnv('_APP_STORAGE_LINODE_BUCKET', ''); $linodeAcl = 'private'; return new Linode($root, $linodeAccessKey, $linodeSecretKey, $linodeBucket, $linodeRegion, $linodeAcl); case Storage::DEVICE_WASABI: - $wasabiAccessKey = App::getEnv('_APP_STORAGE_WASABI_ACCESS_KEY', ''); - $wasabiSecretKey = App::getEnv('_APP_STORAGE_WASABI_SECRET', ''); - $wasabiRegion = App::getEnv('_APP_STORAGE_WASABI_REGION', ''); - $wasabiBucket = App::getEnv('_APP_STORAGE_WASABI_BUCKET', ''); + $wasabiAccessKey = Http::getEnv('_APP_STORAGE_WASABI_ACCESS_KEY', ''); + $wasabiSecretKey = Http::getEnv('_APP_STORAGE_WASABI_SECRET', ''); + $wasabiRegion = Http::getEnv('_APP_STORAGE_WASABI_REGION', ''); + $wasabiBucket = Http::getEnv('_APP_STORAGE_WASABI_BUCKET', ''); $wasabiAcl = 'private'; return new Wasabi($root, $wasabiAccessKey, $wasabiSecretKey, $wasabiBucket, $wasabiRegion, $wasabiAcl); } } -App::post('/v1/runtimes') +Http::post('/v1/runtimes') ->desc("Create a new runtime server") ->param('runtimeId', '', new Text(64), 'Unique runtime ID.') ->param('source', '', new Text(0), 'Path to source files.') @@ -244,9 +242,9 @@ App::post('/v1/runtimes') ]); $vars = array_map(fn ($v) => strval($v), $vars); $orchestration - ->setCpus((int) App::getEnv('_APP_FUNCTIONS_CPUS', 0)) - ->setMemory((int) App::getEnv('_APP_FUNCTIONS_MEMORY', 0)) - ->setSwap((int) App::getEnv('_APP_FUNCTIONS_MEMORY_SWAP', 0)); + ->setCpus((int) Http::getEnv('_APP_FUNCTIONS_CPUS', 0)) + ->setMemory((int) Http::getEnv('_APP_FUNCTIONS_MEMORY', 0)) + ->setSwap((int) Http::getEnv('_APP_FUNCTIONS_MEMORY_SWAP', 0)); /** Keep the container alive if we have commands to be executed */ $entrypoint = !empty($commands) ? [ @@ -278,7 +276,7 @@ App::post('/v1/runtimes') throw new Exception('Failed to create build container', 500); } - $orchestration->networkConnect($runtimeId, App::getEnv('OPEN_RUNTIMES_NETWORK', 'appwrite_runtimes')); + $orchestration->networkConnect($runtimeId, Http::getEnv('OPEN_RUNTIMES_NETWORK', 'appwrite_runtimes')); /** * Execute any commands if they were provided @@ -289,7 +287,7 @@ App::post('/v1/runtimes') command: $commands, stdout: $stdout, stderr: $stderr, - timeout: App::getEnv('_APP_FUNCTIONS_BUILD_TIMEOUT', 900) + timeout: Http::getEnv('_APP_FUNCTIONS_BUILD_TIMEOUT', 900) ); if (!$status) { @@ -381,7 +379,7 @@ App::post('/v1/runtimes') }); -App::get('/v1/runtimes') +Http::get('/v1/runtimes') ->desc("List currently active runtimes") ->inject('activeRuntimes') ->inject('response') @@ -397,7 +395,7 @@ App::get('/v1/runtimes') ->json($runtimes); }); -App::get('/v1/runtimes/:runtimeId') +Http::get('/v1/runtimes/:runtimeId') ->desc("Get a runtime by its ID") ->param('runtimeId', '', new Text(64), 'Runtime unique ID.') ->inject('activeRuntimes') @@ -415,7 +413,7 @@ App::get('/v1/runtimes/:runtimeId') ->json($runtime); }); -App::delete('/v1/runtimes/:runtimeId') +Http::delete('/v1/runtimes/:runtimeId') ->desc('Delete a runtime') ->param('runtimeId', '', new Text(64), 'Runtime unique ID.', false) ->inject('orchestrationPool') @@ -455,12 +453,12 @@ App::delete('/v1/runtimes/:runtimeId') }); -App::post('/v1/execution') +Http::post('/v1/execution') ->desc('Create an execution') ->param('runtimeId', '', new Text(64), 'The runtimeID to execute.') ->param('vars', [], new Assoc(), 'Environment variables required for the build.') ->param('data', '', new Text(8192, 0), 'Data to be forwarded to the function, this is user specified.', true) - ->param('timeout', 15, new Range(1, (int) App::getEnv('_APP_FUNCTIONS_TIMEOUT', 900)), 'Function maximum execution time in seconds.') + ->param('timeout', 15, new Range(1, (int) Http::getEnv('_APP_FUNCTIONS_TIMEOUT', 900)), 'Function maximum execution time in seconds.') ->inject('activeRuntimes') ->inject('response') ->action( @@ -499,7 +497,7 @@ App::post('/v1/execution') $errNo = -1; $executorResponse = ''; - $timeout ??= (int) App::getEnv('_APP_FUNCTIONS_TIMEOUT', 900); + $timeout ??= (int) Http::getEnv('_APP_FUNCTIONS_TIMEOUT', 900); $ch = \curl_init(); $body = \json_encode([ @@ -591,16 +589,14 @@ App::post('/v1/execution') } ); -App::setMode(App::MODE_TYPE_PRODUCTION); // Define Mode - -$http = new Server("0.0.0.0", 80); +Http::setMode(Http::MODE_TYPE_PRODUCTION); // Define Mode /** Set Resources */ -App::setResource('orchestrationPool', fn() => $orchestrationPool); -App::setResource('activeRuntimes', fn() => $activeRuntimes); +Http::setResource('orchestrationPool', fn() => $orchestrationPool); +Http::setResource('activeRuntimes', fn() => $activeRuntimes); /** Set callbacks */ -App::error() +Http::error() ->inject('utopia') ->inject('error') ->inject('request') @@ -634,7 +630,7 @@ App::error() 'file' => $error->getFile(), 'line' => $error->getLine(), 'trace' => $error->getTrace(), - 'version' => App::getEnv('_APP_VERSION', 'UNKNOWN') + 'version' => Http::getEnv('_APP_VERSION', 'UNKNOWN') ]; $response @@ -646,7 +642,7 @@ App::error() $response->json($output); }); -App::init() +Http::init() ->inject('request') ->action(function (Request $request) { $secretKey = $request->getHeader('x-appwrite-executor-key', ''); @@ -654,13 +650,14 @@ App::init() throw new Exception('Missing executor key', 401); } - if ($secretKey !== App::getEnv('_APP_EXECUTOR_SECRET', '')) { + if ($secretKey !== Http::getEnv('_APP_EXECUTOR_SECRET', '')) { throw new Exception('Missing executor key', 401); } }); -$http->on('start', function ($http) { + + $http->on('start', function ($http) { global $orchestrationPool; global $activeRuntimes; @@ -668,7 +665,7 @@ $http->on('start', function ($http) { * Warmup: make sure images are ready to run fast 🚀 */ $runtimes = new Runtimes('v2'); - $allowList = empty(App::getEnv('_APP_FUNCTIONS_RUNTIMES')) ? [] : \explode(',', App::getEnv('_APP_FUNCTIONS_RUNTIMES')); + $allowList = empty(Http::getEnv('_APP_FUNCTIONS_RUNTIMES')) ? [] : \explode(',', Http::getEnv('_APP_FUNCTIONS_RUNTIMES')); $runtimes = $runtimes->getAll(true, $allowList); foreach ($runtimes as $runtime) { go(function () use ($runtime, $orchestrationPool) { @@ -738,7 +735,7 @@ $http->on('start', function ($http) { Timer::tick(MAINTENANCE_INTERVAL * 1000, function () use ($orchestrationPool, $activeRuntimes) { Console::warning("Running maintenance task ..."); foreach ($activeRuntimes as $runtime) { - $inactiveThreshold = \time() - App::getEnv('_APP_FUNCTIONS_INACTIVE_THRESHOLD', 60); + $inactiveThreshold = \time() - Http::getEnv('_APP_FUNCTIONS_INACTIVE_THRESHOLD', 60); if ($runtime['updated'] < $inactiveThreshold) { go(function () use ($runtime, $orchestrationPool, $activeRuntimes) { try { @@ -757,8 +754,9 @@ $http->on('start', function ($http) { }); }); +$server = new Server("0.0.0.0", 80); -$http->on('beforeShutdown', function () { +$server->onBeforeShutdown(function () { global $orchestrationPool; Console::info('Cleaning up containers before shutdown...'); @@ -781,26 +779,6 @@ $http->on('beforeShutdown', function () { } }); - -$http->on('request', function (SwooleRequest $swooleRequest, SwooleResponse $swooleResponse) { - $request = new Request($swooleRequest); - $response = new Response($swooleResponse); - $app = new App('UTC'); - - try { - $app->run($request, $response); - } catch (\Throwable $th) { - logError($th, "serverError"); - $swooleResponse->setStatusCode(500); - $output = [ - 'message' => 'Error: ' . $th->getMessage(), - 'code' => 500, - 'file' => $th->getFile(), - 'line' => $th->getLine(), - 'trace' => $th->getTrace() - ]; - $swooleResponse->end(\json_encode($output)); - } -}); - +$http = new Http($server, 'UTC'); $http->start(); + diff --git a/app/http.php b/app/http.php index b180132d28..aecfe1da45 100644 --- a/app/http.php +++ b/app/http.php @@ -23,10 +23,10 @@ use Appwrite\Utopia\Request; use Utopia\Logger\Log; use Utopia\Logger\Log\User; -$http = new Server("0.0.0.0", App::getEnv('PORT', 80)); +$http = new Server("0.0.0.0", Http::getEnv('PORT', 80)); $payloadSize = 6 * (1024 * 1024); // 6MB -$workerNumber = swoole_cpu_num() * intval(App::getEnv('_APP_WORKER_PER_CORE', 6)); +$workerNumber = swoole_cpu_num() * intval(Http::getEnv('_APP_WORKER_PER_CORE', 6)); $http ->set([ @@ -57,7 +57,7 @@ Files::load(__DIR__ . '/../console'); include __DIR__ . '/controllers/general.php'; $http->on('start', function (Server $http) use ($payloadSize, $register) { - $app = new App('UTC'); + $app = new Http('UTC'); go(function () use ($register, $app) { // wait for database to be ready @@ -80,8 +80,8 @@ $http->on('start', function (Server $http) use ($payloadSize, $register) { } } while ($attempts < $max); - App::setResource('db', fn () => $db); - App::setResource('cache', fn () => $redis); + Http::setResource('db', fn () => $db); + Http::setResource('cache', fn () => $redis); /** @var Utopia\Database\Database $dbForConsole */ $dbForConsole = $app->getResource('dbForConsole'); @@ -148,13 +148,13 @@ $http->on('start', function (Server $http) use ($payloadSize, $register) { $dbForConsole->createCollection($key, $attributes, $indexes); } - if ($dbForConsole->getDocument('buckets', 'default')->isEmpty() && !$dbForConsole->exists(App::getEnv('_APP_DB_SCHEMA', 'appwrite'), 'bucket_1')) { + if ($dbForConsole->getDocument('buckets', 'default')->isEmpty() && !$dbForConsole->exists(Http::getEnv('_APP_DB_SCHEMA', 'appwrite'), 'bucket_1')) { Console::success('[Setup] - Creating default bucket...'); $dbForConsole->createDocument('buckets', new Document([ '$id' => ID::custom('default'), '$collection' => ID::custom('buckets'), 'name' => 'Default', - 'maximumFileSize' => (int) App::getEnv('_APP_STORAGE_LIMIT', 0), // 10MB + 'maximumFileSize' => (int) Http::getEnv('_APP_STORAGE_LIMIT', 0), // 10MB 'allowedFileExtensions' => [], 'enabled' => true, 'compression' => 'gzip', @@ -237,13 +237,13 @@ $http->on('request', function (SwooleRequest $swooleRequest, SwooleResponse $swo return; } - $app = new App('UTC'); + $app = new Http('UTC'); $db = $register->get('dbPool')->get(); $redis = $register->get('redisPool')->get(); - App::setResource('db', fn () => $db); - App::setResource('cache', fn () => $redis); + Http::setResource('db', fn () => $db); + Http::setResource('cache', fn () => $redis); try { Authorization::cleanRoles(); @@ -251,7 +251,7 @@ $http->on('request', function (SwooleRequest $swooleRequest, SwooleResponse $swo $app->run($request, $response); } catch (\Throwable $th) { - $version = App::getEnv('_APP_VERSION', 'UNKNOWN'); + $version = Http::getEnv('_APP_VERSION', 'UNKNOWN'); $logger = $app->getResource("logger"); if ($logger) { @@ -294,7 +294,7 @@ $http->on('request', function (SwooleRequest $swooleRequest, SwooleResponse $swo $action = $route->getLabel("sdk.namespace", "UNKNOWN_NAMESPACE") . '.' . $route->getLabel("sdk.method", "UNKNOWN_METHOD"); $log->setAction($action); - $isProduction = App::getEnv('_APP_ENV', 'development') === 'production'; + $isProduction = Http::getEnv('_APP_ENV', 'development') === 'production'; $log->setEnvironment($isProduction ? Log::ENVIRONMENT_PRODUCTION : Log::ENVIRONMENT_STAGING); foreach ($loggerBreadcrumbs as $loggerBreadcrumb) { @@ -312,7 +312,7 @@ $http->on('request', function (SwooleRequest $swooleRequest, SwooleResponse $swo $swooleResponse->setStatusCode(500); - $output = ((App::isDevelopment())) ? [ + $output = ((Http::isDevelopment())) ? [ 'message' => 'Error: ' . $th->getMessage(), 'code' => 500, 'file' => $th->getFile(), diff --git a/app/init.php b/app/init.php index cc5870225c..884a526188 100644 --- a/app/init.php +++ b/app/init.php @@ -178,7 +178,7 @@ const MAX_OUTPUT_CHUNK_SIZE = 2 * 1024 * 1024; // 2MB $register = new Registry(); -App::setMode(App::getEnv('_APP_ENV', App::MODE_TYPE_PRODUCTION)); +Http::setMode(Http::getEnv('_APP_ENV', Http::MODE_TYPE_PRODUCTION)); /* * ENV vars @@ -210,12 +210,12 @@ Config::load('storage-mimes', __DIR__ . '/config/storage/mimes.php'); Config::load('storage-inputs', __DIR__ . '/config/storage/inputs.php'); Config::load('storage-outputs', __DIR__ . '/config/storage/outputs.php'); -$user = App::getEnv('_APP_REDIS_USER', ''); -$pass = App::getEnv('_APP_REDIS_PASS', ''); +$user = Http::getEnv('_APP_REDIS_USER', ''); +$pass = Http::getEnv('_APP_REDIS_PASS', ''); if (!empty($user) || !empty($pass)) { - Resque::setBackend('redis://' . $user . ':' . $pass . '@' . App::getEnv('_APP_REDIS_HOST', '') . ':' . App::getEnv('_APP_REDIS_PORT', '')); + Resque::setBackend('redis://' . $user . ':' . $pass . '@' . Http::getEnv('_APP_REDIS_HOST', '') . ':' . Http::getEnv('_APP_REDIS_PORT', '')); } else { - Resque::setBackend(App::getEnv('_APP_REDIS_HOST', '') . ':' . App::getEnv('_APP_REDIS_PORT', '')); + Resque::setBackend(Http::getEnv('_APP_REDIS_HOST', '') . ':' . Http::getEnv('_APP_REDIS_PORT', '')); } /** @@ -434,7 +434,7 @@ Database::addFilter( Database::addFilter( 'encrypt', function (mixed $value) { - $key = App::getEnv('_APP_OPENSSL_KEY_V1'); + $key = Http::getEnv('_APP_OPENSSL_KEY_V1'); $iv = OpenSSL::randomPseudoBytes(OpenSSL::cipherIVLength(OpenSSL::CIPHER_AES_128_GCM)); $tag = null; @@ -451,7 +451,7 @@ Database::addFilter( return null; } $value = json_decode($value, true); - $key = App::getEnv('_APP_OPENSSL_KEY_V' . $value['version']); + $key = Http::getEnv('_APP_OPENSSL_KEY_V' . $value['version']); return OpenSSL::decrypt($value['data'], $value['method'], $key, 0, hex2bin($value['iv']), hex2bin($value['tag'])); } @@ -498,8 +498,8 @@ Structure::addFormat(APP_DATABASE_ATTRIBUTE_FLOAT_RANGE, function ($attribute) { */ $register->set('logger', function () { // Register error logger - $providerName = App::getEnv('_APP_LOGGING_PROVIDER', ''); - $providerConfig = App::getEnv('_APP_LOGGING_CONFIG', ''); + $providerName = Http::getEnv('_APP_LOGGING_PROVIDER', ''); + $providerConfig = Http::getEnv('_APP_LOGGING_CONFIG', ''); if (empty($providerName) || empty($providerConfig)) { return null; @@ -515,11 +515,11 @@ $register->set('logger', function () { }); $register->set('dbPool', function () { // Register DB connection - $dbHost = App::getEnv('_APP_DB_HOST', ''); - $dbPort = App::getEnv('_APP_DB_PORT', ''); - $dbUser = App::getEnv('_APP_DB_USER', ''); - $dbPass = App::getEnv('_APP_DB_PASS', ''); - $dbScheme = App::getEnv('_APP_DB_SCHEMA', ''); + $dbHost = Http::getEnv('_APP_DB_HOST', ''); + $dbPort = Http::getEnv('_APP_DB_PORT', ''); + $dbUser = Http::getEnv('_APP_DB_USER', ''); + $dbPass = Http::getEnv('_APP_DB_PASS', ''); + $dbScheme = Http::getEnv('_APP_DB_SCHEMA', ''); $pool = new PDOPool( (new PDOConfig()) @@ -530,7 +530,7 @@ $register->set('dbPool', function () { ->withUsername($dbUser) ->withPassword($dbPass) ->withOptions([ - PDO::ATTR_ERRMODE => App::isDevelopment() ? PDO::ERRMODE_WARNING : PDO::ERRMODE_SILENT, // If in production mode, warnings are not displayed + PDO::ATTR_ERRMODE => Http::isDevelopment() ? PDO::ERRMODE_WARNING : PDO::ERRMODE_SILENT, // If in production mode, warnings are not displayed PDO::ATTR_TIMEOUT => 3, // Seconds PDO::ATTR_PERSISTENT => true, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, @@ -543,10 +543,10 @@ $register->set('dbPool', function () { return $pool; }); $register->set('redisPool', function () { - $redisHost = App::getEnv('_APP_REDIS_HOST', ''); - $redisPort = App::getEnv('_APP_REDIS_PORT', ''); - $redisUser = App::getEnv('_APP_REDIS_USER', ''); - $redisPass = App::getEnv('_APP_REDIS_PASS', ''); + $redisHost = Http::getEnv('_APP_REDIS_HOST', ''); + $redisPort = Http::getEnv('_APP_REDIS_PORT', ''); + $redisUser = Http::getEnv('_APP_REDIS_USER', ''); + $redisPass = Http::getEnv('_APP_REDIS_PASS', ''); $redisAuth = ''; if ($redisUser && $redisPass) { @@ -566,8 +566,8 @@ $register->set('redisPool', function () { }); $register->set('influxdb', function () { // Register DB connection - $host = App::getEnv('_APP_INFLUXDB_HOST', ''); - $port = App::getEnv('_APP_INFLUXDB_PORT', ''); + $host = Http::getEnv('_APP_INFLUXDB_HOST', ''); + $port = Http::getEnv('_APP_INFLUXDB_PORT', ''); if (empty($host) || empty($port)) { return; @@ -580,8 +580,8 @@ $register->set('influxdb', function () { }); $register->set('statsd', function () { // Register DB connection - $host = App::getEnv('_APP_STATSD_HOST', 'telegraf'); - $port = App::getEnv('_APP_STATSD_PORT', 8125); + $host = Http::getEnv('_APP_STATSD_HOST', 'telegraf'); + $port = Http::getEnv('_APP_STATSD_PORT', 8125); $connection = new \Domnikl\Statsd\Connection\UdpSocket($host, $port); $statsd = new \Domnikl\Statsd\Client($connection); @@ -593,21 +593,21 @@ $register->set('smtp', function () { $mail->isSMTP(); - $username = App::getEnv('_APP_SMTP_USERNAME', null); - $password = App::getEnv('_APP_SMTP_PASSWORD', null); + $username = Http::getEnv('_APP_SMTP_USERNAME', null); + $password = Http::getEnv('_APP_SMTP_PASSWORD', null); $mail->XMailer = 'Appwrite Mailer'; - $mail->Host = App::getEnv('_APP_SMTP_HOST', 'smtp'); - $mail->Port = App::getEnv('_APP_SMTP_PORT', 25); + $mail->Host = Http::getEnv('_APP_SMTP_HOST', 'smtp'); + $mail->Port = Http::getEnv('_APP_SMTP_PORT', 25); $mail->SMTPAuth = (!empty($username) && !empty($password)); $mail->Username = $username; $mail->Password = $password; - $mail->SMTPSecure = App::getEnv('_APP_SMTP_SECURE', false); + $mail->SMTPSecure = Http::getEnv('_APP_SMTP_SECURE', false); $mail->SMTPAutoTLS = false; $mail->CharSet = 'UTF-8'; - $from = \urldecode(App::getEnv('_APP_SYSTEM_EMAIL_NAME', APP_NAME . ' Server')); - $email = App::getEnv('_APP_SYSTEM_EMAIL_ADDRESS', APP_EMAIL_TEAM); + $from = \urldecode(Http::getEnv('_APP_SYSTEM_EMAIL_NAME', APP_NAME . ' Server')); + $email = Http::getEnv('_APP_SYSTEM_EMAIL_ADDRESS', APP_EMAIL_TEAM); $mail->setFrom($email, $from); $mail->addReplyTo($email, $from); @@ -627,11 +627,11 @@ $register->set('passwordsDictionary', function () { }); $register->set('db', function () { // This is usually for our workers or CLI commands scope - $dbHost = App::getEnv('_APP_DB_HOST', ''); - $dbPort = App::getEnv('_APP_DB_PORT', ''); - $dbUser = App::getEnv('_APP_DB_USER', ''); - $dbPass = App::getEnv('_APP_DB_PASS', ''); - $dbScheme = App::getEnv('_APP_DB_SCHEMA', ''); + $dbHost = Http::getEnv('_APP_DB_HOST', ''); + $dbPort = Http::getEnv('_APP_DB_PORT', ''); + $dbUser = Http::getEnv('_APP_DB_USER', ''); + $dbPass = Http::getEnv('_APP_DB_PASS', ''); + $dbScheme = Http::getEnv('_APP_DB_SCHEMA', ''); $pdo = new PDO("mysql:host={$dbHost};port={$dbPort};dbname={$dbScheme};charset=utf8mb4", $dbUser, $dbPass, array( PDO::ATTR_TIMEOUT => 3, // Seconds @@ -647,7 +647,7 @@ $register->set('db', function () { $register->set('cache', function () { // This is usually for our workers or CLI commands scope $redis = new Redis(); - $redis->pconnect(App::getEnv('_APP_REDIS_HOST', ''), App::getEnv('_APP_REDIS_PORT', '')); + $redis->pconnect(Http::getEnv('_APP_REDIS_HOST', ''), Http::getEnv('_APP_REDIS_PORT', '')); $redis->setOption(Redis::OPT_READ_TIMEOUT, -1); return $redis; @@ -738,38 +738,38 @@ Locale::setLanguageFromJSON('zh-tw', __DIR__ . '/config/locale/translations/zh-t 'method' => 'GET', 'user_agent' => \sprintf( APP_USERAGENT, - App::getEnv('_APP_VERSION', 'UNKNOWN'), - App::getEnv('_APP_SYSTEM_SECURITY_EMAIL_ADDRESS', APP_EMAIL_SECURITY) + Http::getEnv('_APP_VERSION', 'UNKNOWN'), + Http::getEnv('_APP_SYSTEM_SECURITY_EMAIL_ADDRESS', APP_EMAIL_SECURITY) ), 'timeout' => 2, ], ]); // Runtime Execution -App::setResource('logger', function ($register) { +Http::setResource('logger', function ($register) { return $register->get('logger'); }, ['register']); -App::setResource('loggerBreadcrumbs', function () { +Http::setResource('loggerBreadcrumbs', function () { return []; }); -App::setResource('register', fn() => $register); +Http::setResource('register', fn() => $register); -App::setResource('locale', fn() => new Locale(App::getEnv('_APP_LOCALE', 'en'))); +Http::setResource('locale', fn() => new Locale(Http::getEnv('_APP_LOCALE', 'en'))); // Queues -App::setResource('events', fn() => new Event('', '')); -App::setResource('audits', fn() => new Audit()); -App::setResource('mails', fn() => new Mail()); -App::setResource('deletes', fn() => new Delete()); -App::setResource('database', fn() => new EventDatabase()); -App::setResource('messaging', fn() => new Phone()); -App::setResource('usage', function ($register) { +Http::setResource('events', fn() => new Event('', '')); +Http::setResource('audits', fn() => new Audit()); +Http::setResource('mails', fn() => new Mail()); +Http::setResource('deletes', fn() => new Delete()); +Http::setResource('database', fn() => new EventDatabase()); +Http::setResource('messaging', fn() => new Phone()); +Http::setResource('usage', function ($register) { return new Stats($register->get('statsd')); }, ['register']); -App::setResource('clients', function ($request, $console, $project) { +Http::setResource('clients', function ($request, $console, $project) { $console->setAttribute('platforms', [ // Always allow current host '$collection' => ID::custom('platforms'), 'name' => 'Current Host', @@ -805,7 +805,7 @@ App::setResource('clients', function ($request, $console, $project) { return $clients; }, ['request', 'console', 'project']); -App::setResource('user', function ($mode, $project, $console, $request, $response, $dbForProject, $dbForConsole) { +Http::setResource('user', function ($mode, $project, $console, $request, $response, $dbForProject, $dbForConsole) { /** @var Appwrite\Utopia\Request $request */ /** @var Appwrite\Utopia\Response $response */ /** @var Utopia\Database\Document $project */ @@ -875,7 +875,7 @@ App::setResource('user', function ($mode, $project, $console, $request, $respons $authJWT = $request->getHeader('x-appwrite-jwt', ''); if (!empty($authJWT) && !$project->isEmpty()) { // JWT authentication - $jwt = new JWT(App::getEnv('_APP_OPENSSL_KEY_V1'), 'HS256', 900, 10); // Instantiate with key, algo, maxAge and leeway. + $jwt = new JWT(Http::getEnv('_APP_OPENSSL_KEY_V1'), 'HS256', 900, 10); // Instantiate with key, algo, maxAge and leeway. try { $payload = $jwt->decode($authJWT); @@ -898,7 +898,7 @@ App::setResource('user', function ($mode, $project, $console, $request, $respons return $user; }, ['mode', 'project', 'console', 'request', 'response', 'dbForProject', 'dbForConsole']); -App::setResource('project', function ($dbForConsole, $request, $console) { +Http::setResource('project', function ($dbForConsole, $request, $console) { /** @var Appwrite\Utopia\Request $request */ /** @var Utopia\Database\Database $dbForConsole */ /** @var Utopia\Database\Document $console */ @@ -914,7 +914,7 @@ App::setResource('project', function ($dbForConsole, $request, $console) { return $project; }, ['dbForConsole', 'request', 'console']); -App::setResource('console', function () { +Http::setResource('console', function () { return new Document([ '$id' => ID::custom('console'), '$internalId' => ID::custom('console'), @@ -940,96 +940,96 @@ App::setResource('console', function () { 'legalAddress' => '', 'legalTaxId' => '', 'auths' => [ - 'limit' => (App::getEnv('_APP_CONSOLE_WHITELIST_ROOT', 'enabled') === 'enabled') ? 1 : 0, // limit signup to 1 user + 'limit' => (Http::getEnv('_APP_CONSOLE_WHITELIST_ROOT', 'enabled') === 'enabled') ? 1 : 0, // limit signup to 1 user 'duration' => Auth::TOKEN_EXPIRATION_LOGIN_LONG, // 1 Year in seconds ], - 'authWhitelistEmails' => (!empty(App::getEnv('_APP_CONSOLE_WHITELIST_EMAILS', null))) ? \explode(',', App::getEnv('_APP_CONSOLE_WHITELIST_EMAILS', null)) : [], - 'authWhitelistIPs' => (!empty(App::getEnv('_APP_CONSOLE_WHITELIST_IPS', null))) ? \explode(',', App::getEnv('_APP_CONSOLE_WHITELIST_IPS', null)) : [], + 'authWhitelistEmails' => (!empty(Http::getEnv('_APP_CONSOLE_WHITELIST_EMAILS', null))) ? \explode(',', Http::getEnv('_APP_CONSOLE_WHITELIST_EMAILS', null)) : [], + 'authWhitelistIPs' => (!empty(Http::getEnv('_APP_CONSOLE_WHITELIST_IPS', null))) ? \explode(',', Http::getEnv('_APP_CONSOLE_WHITELIST_IPS', null)) : [], ]); }, []); -App::setResource('dbForProject', function ($db, $cache, Document $project) { +Http::setResource('dbForProject', function ($db, $cache, Document $project) { $cache = new Cache(new RedisCache($cache)); $database = new Database(new MariaDB($db), $cache); - $database->setDefaultDatabase(App::getEnv('_APP_DB_SCHEMA', 'appwrite')); + $database->setDefaultDatabase(Http::getEnv('_APP_DB_SCHEMA', 'appwrite')); $database->setNamespace("_{$project->getInternalId()}"); return $database; }, ['db', 'cache', 'project']); -App::setResource('dbForConsole', function ($db, $cache) { +Http::setResource('dbForConsole', function ($db, $cache) { $cache = new Cache(new RedisCache($cache)); $database = new Database(new MariaDB($db), $cache); - $database->setDefaultDatabase(App::getEnv('_APP_DB_SCHEMA', 'appwrite')); + $database->setDefaultDatabase(Http::getEnv('_APP_DB_SCHEMA', 'appwrite')); $database->setNamespace('_console'); return $database; }, ['db', 'cache']); -App::setResource('deviceLocal', function () { +Http::setResource('deviceLocal', function () { return new Local(); }); -App::setResource('deviceFiles', function ($project) { +Http::setResource('deviceFiles', function ($project) { return getDevice(APP_STORAGE_UPLOADS . '/app-' . $project->getId()); }, ['project']); -App::setResource('deviceFunctions', function ($project) { +Http::setResource('deviceFunctions', function ($project) { return getDevice(APP_STORAGE_FUNCTIONS . '/app-' . $project->getId()); }, ['project']); -App::setResource('deviceBuilds', function ($project) { +Http::setResource('deviceBuilds', function ($project) { return getDevice(APP_STORAGE_BUILDS . '/app-' . $project->getId()); }, ['project']); function getDevice($root): Device { - switch (strtolower(App::getEnv('_APP_STORAGE_DEVICE', Storage::DEVICE_LOCAL))) { + switch (strtolower(Http::getEnv('_APP_STORAGE_DEVICE', Storage::DEVICE_LOCAL))) { case Storage::DEVICE_LOCAL: default: return new Local($root); case Storage::DEVICE_S3: - $s3AccessKey = App::getEnv('_APP_STORAGE_S3_ACCESS_KEY', ''); - $s3SecretKey = App::getEnv('_APP_STORAGE_S3_SECRET', ''); - $s3Region = App::getEnv('_APP_STORAGE_S3_REGION', ''); - $s3Bucket = App::getEnv('_APP_STORAGE_S3_BUCKET', ''); + $s3AccessKey = Http::getEnv('_APP_STORAGE_S3_ACCESS_KEY', ''); + $s3SecretKey = Http::getEnv('_APP_STORAGE_S3_SECRET', ''); + $s3Region = Http::getEnv('_APP_STORAGE_S3_REGION', ''); + $s3Bucket = Http::getEnv('_APP_STORAGE_S3_BUCKET', ''); $s3Acl = 'private'; return new S3($root, $s3AccessKey, $s3SecretKey, $s3Bucket, $s3Region, $s3Acl); case Storage::DEVICE_DO_SPACES: - $doSpacesAccessKey = App::getEnv('_APP_STORAGE_DO_SPACES_ACCESS_KEY', ''); - $doSpacesSecretKey = App::getEnv('_APP_STORAGE_DO_SPACES_SECRET', ''); - $doSpacesRegion = App::getEnv('_APP_STORAGE_DO_SPACES_REGION', ''); - $doSpacesBucket = App::getEnv('_APP_STORAGE_DO_SPACES_BUCKET', ''); + $doSpacesAccessKey = Http::getEnv('_APP_STORAGE_DO_SPACES_ACCESS_KEY', ''); + $doSpacesSecretKey = Http::getEnv('_APP_STORAGE_DO_SPACES_SECRET', ''); + $doSpacesRegion = Http::getEnv('_APP_STORAGE_DO_SPACES_REGION', ''); + $doSpacesBucket = Http::getEnv('_APP_STORAGE_DO_SPACES_BUCKET', ''); $doSpacesAcl = 'private'; return new DOSpaces($root, $doSpacesAccessKey, $doSpacesSecretKey, $doSpacesBucket, $doSpacesRegion, $doSpacesAcl); case Storage::DEVICE_BACKBLAZE: - $backblazeAccessKey = App::getEnv('_APP_STORAGE_BACKBLAZE_ACCESS_KEY', ''); - $backblazeSecretKey = App::getEnv('_APP_STORAGE_BACKBLAZE_SECRET', ''); - $backblazeRegion = App::getEnv('_APP_STORAGE_BACKBLAZE_REGION', ''); - $backblazeBucket = App::getEnv('_APP_STORAGE_BACKBLAZE_BUCKET', ''); + $backblazeAccessKey = Http::getEnv('_APP_STORAGE_BACKBLAZE_ACCESS_KEY', ''); + $backblazeSecretKey = Http::getEnv('_APP_STORAGE_BACKBLAZE_SECRET', ''); + $backblazeRegion = Http::getEnv('_APP_STORAGE_BACKBLAZE_REGION', ''); + $backblazeBucket = Http::getEnv('_APP_STORAGE_BACKBLAZE_BUCKET', ''); $backblazeAcl = 'private'; return new Backblaze($root, $backblazeAccessKey, $backblazeSecretKey, $backblazeBucket, $backblazeRegion, $backblazeAcl); case Storage::DEVICE_LINODE: - $linodeAccessKey = App::getEnv('_APP_STORAGE_LINODE_ACCESS_KEY', ''); - $linodeSecretKey = App::getEnv('_APP_STORAGE_LINODE_SECRET', ''); - $linodeRegion = App::getEnv('_APP_STORAGE_LINODE_REGION', ''); - $linodeBucket = App::getEnv('_APP_STORAGE_LINODE_BUCKET', ''); + $linodeAccessKey = Http::getEnv('_APP_STORAGE_LINODE_ACCESS_KEY', ''); + $linodeSecretKey = Http::getEnv('_APP_STORAGE_LINODE_SECRET', ''); + $linodeRegion = Http::getEnv('_APP_STORAGE_LINODE_REGION', ''); + $linodeBucket = Http::getEnv('_APP_STORAGE_LINODE_BUCKET', ''); $linodeAcl = 'private'; return new Linode($root, $linodeAccessKey, $linodeSecretKey, $linodeBucket, $linodeRegion, $linodeAcl); case Storage::DEVICE_WASABI: - $wasabiAccessKey = App::getEnv('_APP_STORAGE_WASABI_ACCESS_KEY', ''); - $wasabiSecretKey = App::getEnv('_APP_STORAGE_WASABI_SECRET', ''); - $wasabiRegion = App::getEnv('_APP_STORAGE_WASABI_REGION', ''); - $wasabiBucket = App::getEnv('_APP_STORAGE_WASABI_BUCKET', ''); + $wasabiAccessKey = Http::getEnv('_APP_STORAGE_WASABI_ACCESS_KEY', ''); + $wasabiSecretKey = Http::getEnv('_APP_STORAGE_WASABI_SECRET', ''); + $wasabiRegion = Http::getEnv('_APP_STORAGE_WASABI_REGION', ''); + $wasabiBucket = Http::getEnv('_APP_STORAGE_WASABI_BUCKET', ''); $wasabiAcl = 'private'; return new Wasabi($root, $wasabiAccessKey, $wasabiSecretKey, $wasabiBucket, $wasabiRegion, $wasabiAcl); } } -App::setResource('mode', function ($request) { +Http::setResource('mode', function ($request) { /** @var Appwrite\Utopia\Request $request */ /** @@ -1040,18 +1040,18 @@ App::setResource('mode', function ($request) { return $request->getParam('mode', $request->getHeader('x-appwrite-mode', APP_MODE_DEFAULT)); }, ['request']); -App::setResource('geodb', function ($register) { +Http::setResource('geodb', function ($register) { /** @var Utopia\Registry\Registry $register */ return $register->get('geodb'); }, ['register']); -App::setResource('passwordsDictionary', function ($register) { +Http::setResource('passwordsDictionary', function ($register) { /** @var Utopia\Registry\Registry $register */ return $register->get('passwordsDictionary'); }, ['register']); -App::setResource('sms', function () { - $dsn = new DSN(App::getEnv('_APP_SMS_PROVIDER')); +Http::setResource('sms', function () { + $dsn = new DSN(Http::getEnv('_APP_SMS_PROVIDER')); $user = $dsn->getUser(); $secret = $dsn->getPassword(); @@ -1066,7 +1066,7 @@ App::setResource('sms', function () { }; }); -App::setResource('servers', function () { +Http::setResource('servers', function () { $platforms = Config::getParam('platforms'); $server = $platforms[APP_PLATFORM_SERVER]; @@ -1077,11 +1077,11 @@ App::setResource('servers', function () { return $languages; }); -App::setResource('promiseAdapter', function ($register) { +Http::setResource('promiseAdapter', function ($register) { return $register->get('promiseAdapter'); }, ['register']); -App::setResource('schema', function ($utopia, $dbForProject) { +Http::setResource('schema', function ($utopia, $dbForProject) { $complexity = function (int $complexity, array $args) { $queries = Query::parseQueries($args['queries'] ?? []); @@ -1167,7 +1167,7 @@ App::setResource('schema', function ($utopia, $dbForProject) { ); }, ['utopia', 'dbForProject']); -App::setResource('requestTimestamp', function ($request) { +Http::setResource('requestTimestamp', function ($request) { //TODO: Move this to the Request class itself $timestampHeader = $request->getHeader('x-appwrite-timestamp'); $requestTimestamp = null; diff --git a/app/realtime.php b/app/realtime.php index ed7cb390e1..085d4c7932 100644 --- a/app/realtime.php +++ b/app/realtime.php @@ -48,9 +48,9 @@ $stats->create(); $containerId = uniqid(); $statsDocument = null; -$workerNumber = swoole_cpu_num() * intval(App::getEnv('_APP_WORKER_PER_CORE', 6)); +$workerNumber = swoole_cpu_num() * intval(Http::getEnv('_APP_WORKER_PER_CORE', 6)); -$adapter = new Adapter\Swoole(port: App::getEnv('PORT', 80)); +$adapter = new Adapter\Swoole(port: Http::getEnv('PORT', 80)); $adapter ->setPackageMaxLength(64000) // Default maximum Package Size (64kb) ->setWorkerNumber($workerNumber); @@ -61,7 +61,7 @@ $logError = function (Throwable $error, string $action) use ($register) { $logger = $register->get('logger'); if ($logger) { - $version = App::getEnv('_APP_VERSION', 'UNKNOWN'); + $version = Http::getEnv('_APP_VERSION', 'UNKNOWN'); $log = new Log(); $log->setNamespace("realtime"); @@ -80,7 +80,7 @@ $logError = function (Throwable $error, string $action) use ($register) { $log->setAction($action); - $isProduction = App::getEnv('_APP_ENV', 'development') === 'production'; + $isProduction = Http::getEnv('_APP_ENV', 'development') === 'production'; $log->setEnvironment($isProduction ? Log::ENVIRONMENT_PRODUCTION : Log::ENVIRONMENT_STAGING); $responseCode = $logger->addLog($log); @@ -108,7 +108,7 @@ function getDatabase(Registry &$register, string $namespace) $cache = new Cache(new RedisCache($redis)); $database = new Database(new MariaDB($db), $cache); - $database->setDefaultDatabase(App::getEnv('_APP_DB_SCHEMA', 'appwrite')); + $database->setDefaultDatabase(Http::getEnv('_APP_DB_SCHEMA', 'appwrite')); $database->setNamespace($namespace); if (!$database->exists($database->getDefaultDatabase(), 'realtime')) { @@ -322,7 +322,7 @@ $server->onWorkerStart(function (int $workerId) use ($server, $register, $stats, $receivers = $realtime->getSubscribers($event); - if (App::isDevelopment() && !empty($receivers)) { + if (Http::isDevelopment() && !empty($receivers)) { Console::log("[Debug][Worker {$workerId}] Receivers: " . count($receivers)); Console::log("[Debug][Worker {$workerId}] Receivers Connection IDs: " . json_encode($receivers)); Console::log("[Debug][Worker {$workerId}] Event: " . $payload); @@ -355,7 +355,7 @@ $server->onWorkerStart(function (int $workerId) use ($server, $register, $stats, }); $server->onOpen(function (int $connection, SwooleRequest $request) use ($server, $register, $stats, &$realtime, $logError) { - $app = new App('UTC'); + $app = new Http('UTC'); $request = new Request($request); $response = new Response(new SwooleResponse()); @@ -366,10 +366,10 @@ $server->onOpen(function (int $connection, SwooleRequest $request) use ($server, Console::info("Connection open (user: {$connection})"); - App::setResource('db', fn () => $db); - App::setResource('cache', fn () => $redis); - App::setResource('request', fn () => $request); - App::setResource('response', fn () => $response); + Http::setResource('db', fn () => $db); + Http::setResource('cache', fn () => $redis); + Http::setResource('request', fn () => $request); + Http::setResource('response', fn () => $response); try { /** @var \Utopia\Database\Document $user */ @@ -383,7 +383,7 @@ $server->onOpen(function (int $connection, SwooleRequest $request) use ($server, $cache = new Cache(new RedisCache($redis)); $database = new Database(new MariaDB($db), $cache); - $database->setDefaultDatabase(App::getEnv('_APP_DB_SCHEMA', 'appwrite')); + $database->setDefaultDatabase(Http::getEnv('_APP_DB_SCHEMA', 'appwrite')); $database->setNamespace("_{$project->getInternalId()}"); /* @@ -405,7 +405,7 @@ $server->onOpen(function (int $connection, SwooleRequest $request) use ($server, $abuse = new Abuse($timeLimit); - if (App::getEnv('_APP_OPTIONS_ABUSE', 'enabled') === 'enabled' && $abuse->check()) { + if (Http::getEnv('_APP_OPTIONS_ABUSE', 'enabled') === 'enabled' && $abuse->check()) { throw new Exception('Too many requests', 1013); } @@ -464,7 +464,7 @@ $server->onOpen(function (int $connection, SwooleRequest $request) use ($server, $server->send([$connection], json_encode($response)); $server->close($connection, $th->getCode()); - if (App::isDevelopment()) { + if (Http::isDevelopment()) { Console::error('[Error] Connection Error'); Console::error('[Error] Code: ' . $response['data']['code']); Console::error('[Error] Message: ' . $response['data']['message']); @@ -484,14 +484,14 @@ $server->onOpen(function (int $connection, SwooleRequest $request) use ($server, $server->onMessage(function (int $connection, string $message) use ($server, $register, $realtime, $containerId) { try { - $app = new App('UTC'); + $app = new Http('UTC'); $response = new Response(new SwooleResponse()); $db = $register->get('dbPool')->get(); $redis = $register->get('redisPool')->get(); $cache = new Cache(new RedisCache($redis)); $database = new Database(new MariaDB($db), $cache); - $database->setDefaultDatabase(App::getEnv('_APP_DB_SCHEMA', 'appwrite')); + $database->setDefaultDatabase(Http::getEnv('_APP_DB_SCHEMA', 'appwrite')); $database->setNamespace("_console"); $projectId = $realtime->connections[$connection]['projectId']; $project = $projectId === 'console' ? $app->getResource('console') : Authorization::skip(fn () => $database->getDocument('projects', $projectId)); @@ -509,7 +509,7 @@ $server->onMessage(function (int $connection, string $message) use ($server, $re $abuse = new Abuse($timeLimit); - if ($abuse->check() && App::getEnv('_APP_OPTIONS_ABUSE', 'enabled') === 'enabled') { + if ($abuse->check() && Http::getEnv('_APP_OPTIONS_ABUSE', 'enabled') === 'enabled') { throw new Exception('Too many messages', 1013); } diff --git a/app/tasks/doctor.php b/app/tasks/doctor.php index ade1a5299d..d0bfe38231 100644 --- a/app/tasks/doctor.php +++ b/app/tasks/doctor.php @@ -19,11 +19,11 @@ $cli / \ ) __/ ) __/\ /\ / ) / )( )( ) _) _ )(( O ) \_/\_/(__) (__) (_/\_)(__\_)(__) (__) (____)(_)(__)\__/ "); - Console::log("\n" . '👩‍⚕️ Running ' . APP_NAME . ' Doctor for version ' . App::getEnv('_APP_VERSION', 'UNKNOWN') . ' ...' . "\n"); + Console::log("\n" . '👩‍⚕️ Running ' . APP_NAME . ' Doctor for version ' . Http::getEnv('_APP_VERSION', 'UNKNOWN') . ' ...' . "\n"); Console::log('Checking for production best practices...'); - $domain = new Domain(App::getEnv('_APP_DOMAIN')); + $domain = new Domain(Http::getEnv('_APP_DOMAIN')); if (!$domain->isKnown() || $domain->isTest()) { Console::log('🔴 Hostname has no public suffix (' . $domain->get() . ')'); @@ -31,7 +31,7 @@ $cli Console::log('🟢 Hostname has a public suffix (' . $domain->get() . ')'); } - $domain = new Domain(App::getEnv('_APP_DOMAIN_TARGET')); + $domain = new Domain(Http::getEnv('_APP_DOMAIN_TARGET')); if (!$domain->isKnown() || $domain->isTest()) { Console::log('🔴 CNAME target has no public suffix (' . $domain->get() . ')'); @@ -39,27 +39,27 @@ $cli Console::log('🟢 CNAME target has a public suffix (' . $domain->get() . ')'); } - if (App::getEnv('_APP_OPENSSL_KEY_V1') === 'your-secret-key' || empty(App::getEnv('_APP_OPENSSL_KEY_V1'))) { + if (Http::getEnv('_APP_OPENSSL_KEY_V1') === 'your-secret-key' || empty(Http::getEnv('_APP_OPENSSL_KEY_V1'))) { Console::log('🔴 Not using a unique secret key for encryption'); } else { Console::log('🟢 Using a unique secret key for encryption'); } - if (App::getEnv('_APP_ENV', 'development') !== 'production') { + if (Http::getEnv('_APP_ENV', 'development') !== 'production') { Console::log('🔴 App environment is set for development'); } else { Console::log('🟢 App environment is set for production'); } - if ('enabled' !== App::getEnv('_APP_OPTIONS_ABUSE', 'disabled')) { + if ('enabled' !== Http::getEnv('_APP_OPTIONS_ABUSE', 'disabled')) { Console::log('🔴 Abuse protection is disabled'); } else { Console::log('🟢 Abuse protection is enabled'); } - $authWhitelistRoot = App::getEnv('_APP_CONSOLE_WHITELIST_ROOT', null); - $authWhitelistEmails = App::getEnv('_APP_CONSOLE_WHITELIST_EMAILS', null); - $authWhitelistIPs = App::getEnv('_APP_CONSOLE_WHITELIST_IPS', null); + $authWhitelistRoot = Http::getEnv('_APP_CONSOLE_WHITELIST_ROOT', null); + $authWhitelistEmails = Http::getEnv('_APP_CONSOLE_WHITELIST_EMAILS', null); + $authWhitelistIPs = Http::getEnv('_APP_CONSOLE_WHITELIST_IPS', null); if ( empty($authWhitelistRoot) @@ -71,15 +71,15 @@ $cli Console::log('🟢 Console access limits are enabled'); } - if ('enabled' !== App::getEnv('_APP_OPTIONS_FORCE_HTTPS', 'disabled')) { + if ('enabled' !== Http::getEnv('_APP_OPTIONS_FORCE_HTTPS', 'disabled')) { Console::log('🔴 HTTPS force option is disabled'); } else { Console::log('🟢 HTTPS force option is enabled'); } - $providerName = App::getEnv('_APP_LOGGING_PROVIDER', ''); - $providerConfig = App::getEnv('_APP_LOGGING_CONFIG', ''); + $providerName = Http::getEnv('_APP_LOGGING_PROVIDER', ''); + $providerConfig = Http::getEnv('_APP_LOGGING_CONFIG', ''); if (empty($providerName) || empty($providerConfig) || !Logger::hasProvider($providerName)) { Console::log('🔴 Logging adapter is disabled'); @@ -116,11 +116,11 @@ $cli Console::error('Cache............disconnected 👎'); } - if (App::getEnv('_APP_STORAGE_ANTIVIRUS') === 'enabled') { // Check if scans are enabled + if (Http::getEnv('_APP_STORAGE_ANTIVIRUS') === 'enabled') { // Check if scans are enabled try { $antivirus = new Network( - App::getEnv('_APP_STORAGE_ANTIVIRUS_HOST', 'clamav'), - (int) App::getEnv('_APP_STORAGE_ANTIVIRUS_PORT', 3310) + Http::getEnv('_APP_STORAGE_ANTIVIRUS_HOST', 'clamav'), + (int) Http::getEnv('_APP_STORAGE_ANTIVIRUS_PORT', 3310) ); if ((@$antivirus->ping())) { @@ -147,8 +147,8 @@ $cli Console::error('SMTP.............disconnected 👎'); } - $host = App::getEnv('_APP_STATSD_HOST', 'telegraf'); - $port = App::getEnv('_APP_STATSD_PORT', 8125); + $host = Http::getEnv('_APP_STATSD_HOST', 'telegraf'); + $port = Http::getEnv('_APP_STATSD_PORT', 8125); if ($fp = @\fsockopen('udp://' . $host, $port, $errCode, $errStr, 2)) { Console::success('StatsD..............connected 👍'); @@ -157,8 +157,8 @@ $cli Console::error('StatsD...........disconnected 👎'); } - $host = App::getEnv('_APP_INFLUXDB_HOST', ''); - $port = App::getEnv('_APP_INFLUXDB_PORT', ''); + $host = Http::getEnv('_APP_INFLUXDB_HOST', ''); + $port = Http::getEnv('_APP_INFLUXDB_PORT', ''); if ($fp = @\fsockopen($host, $port, $errCode, $errStr, 2)) { Console::success('InfluxDB............connected 👍'); @@ -223,12 +223,12 @@ $cli } try { - if (App::isProduction()) { + if (Http::isProduction()) { Console::log(''); - $version = \json_decode(@\file_get_contents(App::getEnv('_APP_HOME', 'http://localhost') . '/v1/health/version'), true); + $version = \json_decode(@\file_get_contents(Http::getEnv('_APP_HOME', 'http://localhost') . '/v1/health/version'), true); if ($version && isset($version['version'])) { - if (\version_compare($version['version'], App::getEnv('_APP_VERSION', 'UNKNOWN')) === 0) { + if (\version_compare($version['version'], Http::getEnv('_APP_VERSION', 'UNKNOWN')) === 0) { Console::info('You are running the latest version of ' . APP_NAME . '! 🥳'); } else { Console::info('A new version (' . $version['version'] . ') is available! 🥳' . "\n"); diff --git a/app/tasks/maintenance.php b/app/tasks/maintenance.php index 4d06005f5e..85b245d644 100644 --- a/app/tasks/maintenance.php +++ b/app/tasks/maintenance.php @@ -27,7 +27,7 @@ function getConsoleDB(): Database $attempts++; $cache = new Cache(new RedisCache($register->get('cache'))); $database = new Database(new MariaDB($register->get('db')), $cache); - $database->setDefaultDatabase(App::getEnv('_APP_DB_SCHEMA', 'appwrite')); + $database->setDefaultDatabase(Http::getEnv('_APP_DB_SCHEMA', 'appwrite')); $database->setNamespace('_console'); // Main DB if (!$database->exists($database->getDefaultDatabase(), 'certificates')) { @@ -138,13 +138,13 @@ $cli } // # of days in seconds (1 day = 86400s) - $interval = (int) App::getEnv('_APP_MAINTENANCE_INTERVAL', '86400'); - $executionLogsRetention = (int) App::getEnv('_APP_MAINTENANCE_RETENTION_EXECUTION', '1209600'); - $auditLogRetention = (int) App::getEnv('_APP_MAINTENANCE_RETENTION_AUDIT', '1209600'); - $abuseLogsRetention = (int) App::getEnv('_APP_MAINTENANCE_RETENTION_ABUSE', '86400'); - $usageStatsRetentionHourly = (int) App::getEnv('_APP_MAINTENANCE_RETENTION_USAGE_HOURLY', '8640000'); //100 days + $interval = (int) Http::getEnv('_APP_MAINTENANCE_INTERVAL', '86400'); + $executionLogsRetention = (int) Http::getEnv('_APP_MAINTENANCE_RETENTION_EXECUTION', '1209600'); + $auditLogRetention = (int) Http::getEnv('_APP_MAINTENANCE_RETENTION_AUDIT', '1209600'); + $abuseLogsRetention = (int) Http::getEnv('_APP_MAINTENANCE_RETENTION_ABUSE', '86400'); + $usageStatsRetentionHourly = (int) Http::getEnv('_APP_MAINTENANCE_RETENTION_USAGE_HOURLY', '8640000'); //100 days - $cacheRetention = (int) App::getEnv('_APP_MAINTENANCE_RETENTION_CACHE', '2592000'); // 30 days + $cacheRetention = (int) Http::getEnv('_APP_MAINTENANCE_RETENTION_CACHE', '2592000'); // 30 days Console::loop(function () use ($interval, $executionLogsRetention, $abuseLogsRetention, $auditLogRetention, $usageStatsRetentionHourly, $cacheRetention) { $database = getConsoleDB(); diff --git a/app/tasks/migrate.php b/app/tasks/migrate.php index 30867a0a1c..090fb84af7 100644 --- a/app/tasks/migrate.php +++ b/app/tasks/migrate.php @@ -34,7 +34,7 @@ $cli return; } - $app = new App('UTC'); + $app = new Http('UTC'); Console::success('Starting Data Migration to version ' . $version); @@ -44,10 +44,10 @@ $cli $cache = new Cache(new RedisCache($redis)); $projectDB = new Database(new MariaDB($db), $cache); - $projectDB->setDefaultDatabase(App::getEnv('_APP_DB_SCHEMA', 'appwrite')); + $projectDB->setDefaultDatabase(Http::getEnv('_APP_DB_SCHEMA', 'appwrite')); $consoleDB = new Database(new MariaDB($db), $cache); - $consoleDB->setDefaultDatabase(App::getEnv('_APP_DB_SCHEMA', 'appwrite')); + $consoleDB->setDefaultDatabase(Http::getEnv('_APP_DB_SCHEMA', 'appwrite')); $consoleDB->setNamespace('_project_console'); $console = $app->getResource('console'); diff --git a/app/tasks/specs.php b/app/tasks/specs.php index a5015fa3fb..2386e7ce07 100644 --- a/app/tasks/specs.php +++ b/app/tasks/specs.php @@ -21,14 +21,14 @@ $cli ->action(function ($version, $mode) use ($register) { $db = $register->get('db'); $redis = $register->get('cache'); - $appRoutes = App::getRoutes(); + $appRoutes = Http::getRoutes(); $response = new Response(new HttpResponse()); $mocks = ($mode === 'mocks'); - App::setResource('request', fn () => new Request()); - App::setResource('response', fn () => $response); - App::setResource('db', fn () => $db); - App::setResource('cache', fn () => $redis); + Http::setResource('request', fn () => new Request()); + Http::setResource('response', fn () => $response); + Http::setResource('db', fn () => $db); + Http::setResource('cache', fn () => $redis); $platforms = [ 'client' => APP_PLATFORM_CLIENT, @@ -204,7 +204,7 @@ $cli } } // var_dump($models); - $arguments = [new App('UTC'), $services, $routes, $models, $keys[$platform], $authCounts[$platform] ?? 0]; + $arguments = [new Http('UTC'), $services, $routes, $models, $keys[$platform], $authCounts[$platform] ?? 0]; foreach (['swagger2', 'open-api3'] as $format) { $formatInstance = match ($format) { 'swagger2' => new Swagger2(...$arguments), @@ -213,8 +213,8 @@ $cli }; $specs = new Specification($formatInstance); - $endpoint = App::getEnv('_APP_HOME', '[HOSTNAME]'); - $email = App::getEnv('_APP_SYSTEM_EMAIL_ADDRESS', APP_EMAIL_TEAM); + $endpoint = Http::getEnv('_APP_HOME', '[HOSTNAME]'); + $email = Http::getEnv('_APP_SYSTEM_EMAIL_ADDRESS', APP_EMAIL_TEAM); $formatInstance ->setParam('name', APP_NAME) diff --git a/app/tasks/ssl.php b/app/tasks/ssl.php index 39bb817d72..525ea3d46c 100644 --- a/app/tasks/ssl.php +++ b/app/tasks/ssl.php @@ -11,7 +11,7 @@ use Utopia\Http\Validator\Hostname; $cli ->task('ssl') ->desc('Validate server certificates') - ->param('domain', App::getEnv('_APP_DOMAIN', ''), new Hostname(), 'Domain to generate certificate for. If empty, main domain will be used.', true) + ->param('domain', Http::getEnv('_APP_DOMAIN', ''), new Hostname(), 'Domain to generate certificate for. If empty, main domain will be used.', true) ->action(function ($domain) { Console::success('Scheduling a job to issue a TLS certificate for domain: ' . $domain); diff --git a/app/tasks/usage.php b/app/tasks/usage.php index 3c2cd64d47..73fc09ea38 100644 --- a/app/tasks/usage.php +++ b/app/tasks/usage.php @@ -31,7 +31,7 @@ function getDatabase(Registry &$register, string $namespace): UtopiaDatabase $cache = new Cache(new RedisCache($redis)); $database = new UtopiaDatabase(new MariaDB($db), $cache); - $database->setDefaultDatabase(App::getEnv('_APP_DB_SCHEMA', 'appwrite')); + $database->setDefaultDatabase(Http::getEnv('_APP_DB_SCHEMA', 'appwrite')); $database->setNamespace($namespace); if (!$database->exists($database->getDefaultDatabase(), 'projects')) { @@ -80,7 +80,7 @@ $logError = function (Throwable $error, string $action = 'syncUsageStats') use ( $logger = $register->get('logger'); if ($logger) { - $version = App::getEnv('_APP_VERSION', 'UNKNOWN'); + $version = Http::getEnv('_APP_VERSION', 'UNKNOWN'); $log = new Log(); $log->setNamespace("usage"); @@ -99,7 +99,7 @@ $logError = function (Throwable $error, string $action = 'syncUsageStats') use ( $log->setAction($action); - $isProduction = App::getEnv('_APP_ENV', 'development') === 'production'; + $isProduction = Http::getEnv('_APP_ENV', 'development') === 'production'; $log->setEnvironment($isProduction ? Log::ENVIRONMENT_PRODUCTION : Log::ENVIRONMENT_STAGING); $responseCode = $logger->addLog($log); @@ -120,8 +120,8 @@ $cli $database = getDatabase($register, '_console'); $influxDB = getInfluxDB($register); - $interval = (int) App::getEnv('_APP_USAGE_AGGREGATION_INTERVAL', '30'); // 30 seconds (by default) - $region = App::getEnv('region', 'default'); + $interval = (int) Http::getEnv('_APP_USAGE_AGGREGATION_INTERVAL', '30'); // 30 seconds (by default) + $region = Http::getEnv('region', 'default'); $usage = new TimeSeries($region, $database, $influxDB, $logError); Console::loop(function () use ($interval, $usage) { diff --git a/app/tasks/vars.php b/app/tasks/vars.php index ebccceb955..de9c978c75 100644 --- a/app/tasks/vars.php +++ b/app/tasks/vars.php @@ -20,6 +20,6 @@ $cli } foreach ($vars as $key => $value) { - Console::log('- ' . $value['name'] . '=' . App::getEnv($value['name'], '')); + Console::log('- ' . $value['name'] . '=' . Http::getEnv($value['name'], '')); } }); diff --git a/app/workers/builds.php b/app/workers/builds.php index 338c759327..7cb507bf50 100644 --- a/app/workers/builds.php +++ b/app/workers/builds.php @@ -34,7 +34,7 @@ class BuildsV1 extends Worker public function init(): void { - $this->executor = new Executor(App::getEnv('_APP_EXECUTOR_HOST')); + $this->executor = new Executor(Http::getEnv('_APP_EXECUTOR_HOST')); } public function run(): void @@ -91,7 +91,7 @@ class BuildsV1 extends Worker 'outputPath' => '', 'runtime' => $function->getAttribute('runtime'), 'source' => $deployment->getAttribute('path'), - 'sourceType' => strtolower(App::getEnv('_APP_STORAGE_DEVICE', Storage::DEVICE_LOCAL)), + 'sourceType' => strtolower(Http::getEnv('_APP_STORAGE_DEVICE', Storage::DEVICE_LOCAL)), 'stdout' => '', 'stderr' => '', 'endTime' => null, @@ -228,7 +228,7 @@ class BuildsV1 extends Worker /** Update usage stats */ global $register; - if (App::getEnv('_APP_USAGE_STATS', 'enabled') === 'enabled') { + if (Http::getEnv('_APP_USAGE_STATS', 'enabled') === 'enabled') { $statsd = $register->get('statsd'); $usage = new Stats($statsd); $usage diff --git a/app/workers/certificates.php b/app/workers/certificates.php index 3208437477..9784586a18 100644 --- a/app/workers/certificates.php +++ b/app/workers/certificates.php @@ -87,7 +87,7 @@ class CertificatesV1 extends Worker try { // Email for alerts is required by LetsEncrypt - $email = App::getEnv('_APP_SYSTEM_SECURITY_EMAIL_ADDRESS'); + $email = Http::getEnv('_APP_SYSTEM_SECURITY_EMAIL_ADDRESS'); if (empty($email)) { throw new Exception('You must set a valid security email address (_APP_SYSTEM_SECURITY_EMAIL_ADDRESS) to issue an SSL certificate.'); } @@ -182,7 +182,7 @@ class CertificatesV1 extends Worker */ private function getMainDomain(): ?string { - $envDomain = App::getEnv('_APP_DOMAIN', ''); + $envDomain = Http::getEnv('_APP_DOMAIN', ''); if (!empty($envDomain) && $envDomain !== 'localhost') { return $envDomain; } else { @@ -219,7 +219,7 @@ class CertificatesV1 extends Worker // TODO: Would be awesome to also support A/AAAA records here. Maybe dry run? // Validate if domain target is properly configured - $target = new Domain(App::getEnv('_APP_DOMAIN_TARGET', '')); + $target = new Domain(Http::getEnv('_APP_DOMAIN_TARGET', '')); if (!$target->isKnown() || $target->isTest()) { throw new Exception('Unreachable CNAME target (' . $target->get() . '), please use a domain with a public suffix.'); @@ -279,7 +279,7 @@ class CertificatesV1 extends Worker $stdout = ''; $stderr = ''; - $staging = (App::isProduction()) ? '' : ' --dry-run'; + $staging = (Http::isProduction()) ? '' : ' --dry-run'; $exit = Console::execute("certbot certonly --webroot --noninteractive --agree-tos{$staging}" . " --email " . $email . " --cert-name " . $folder @@ -378,7 +378,7 @@ class CertificatesV1 extends Worker // Send mail to administratore mail - $locale = new Locale(App::getEnv('_APP_LOCALE', 'en')); + $locale = new Locale(Http::getEnv('_APP_LOCALE', 'en')); if (!$locale->getText('emails.sender') || !$locale->getText("emails.certificate.hello") || !$locale->getText("emails.certificate.subject") || !$locale->getText("emails.certificate.body") || !$locale->getText("emails.certificate.footer") || !$locale->getText("emails.certificate.thanks") || !$locale->getText("emails.certificate.signature")) { $locale->setDefault('en'); } @@ -407,7 +407,7 @@ class CertificatesV1 extends Worker $body = $body->render(); $mail = new Mail(); $mail - ->setRecipient(App::getEnv('_APP_SYSTEM_SECURITY_EMAIL_ADDRESS')) + ->setRecipient(Http::getEnv('_APP_SYSTEM_SECURITY_EMAIL_ADDRESS')) ->setName('Appwrite Administrator') ->trigger(); } diff --git a/app/workers/deletes.php b/app/workers/deletes.php index cec4d0f7e4..a2cae17396 100644 --- a/app/workers/deletes.php +++ b/app/workers/deletes.php @@ -568,7 +568,7 @@ class DeletesV1 extends Worker * Request executor to delete all deployment containers */ Console::info("Requesting executor to delete all deployment containers for function " . $functionId); - $executor = new Executor(App::getEnv('_APP_EXECUTOR_HOST')); + $executor = new Executor(Http::getEnv('_APP_EXECUTOR_HOST')); foreach ($deploymentIds as $deploymentId) { try { $executor->deleteRuntime($projectId, $deploymentId); @@ -620,7 +620,7 @@ class DeletesV1 extends Worker */ Console::info("Requesting executor to delete deployment container for deployment " . $deploymentId); try { - $executor = new Executor(App::getEnv('_APP_EXECUTOR_HOST')); + $executor = new Executor(Http::getEnv('_APP_EXECUTOR_HOST')); $executor->deleteRuntime($projectId, $deploymentId); } catch (Throwable $th) { Console::error($th->getMessage()); @@ -739,7 +739,7 @@ class DeletesV1 extends Worker ]); if (!$domainUsingCertificate) { - $mainDomain = App::getEnv('_APP_DOMAIN_TARGET', ''); + $mainDomain = Http::getEnv('_APP_DOMAIN_TARGET', ''); if ($mainDomain === $document->getAttribute('domain')) { $domainUsingCertificate = $mainDomain; } diff --git a/app/workers/functions.php b/app/workers/functions.php index db74df7314..2069b206f6 100644 --- a/app/workers/functions.php +++ b/app/workers/functions.php @@ -37,7 +37,7 @@ class FunctionsV1 extends Worker public function init(): void { - $this->executor = new Executor(App::getEnv('_APP_EXECUTOR_HOST')); + $this->executor = new Executor(Http::getEnv('_APP_EXECUTOR_HOST')); } public function run(): void @@ -367,7 +367,7 @@ class FunctionsV1 extends Worker /** Update usage stats */ global $register; - if (App::getEnv('_APP_USAGE_STATS', 'enabled') === 'enabled') { + if (Http::getEnv('_APP_USAGE_STATS', 'enabled') === 'enabled') { $statsd = $register->get('statsd'); $usage = new Stats($statsd); $usage diff --git a/app/workers/mails.php b/app/workers/mails.php index 15394c6aec..40be3ba618 100644 --- a/app/workers/mails.php +++ b/app/workers/mails.php @@ -24,7 +24,7 @@ class MailsV1 extends Worker { global $register; - if (empty(App::getEnv('_APP_SMTP_HOST'))) { + if (empty(Http::getEnv('_APP_SMTP_HOST'))) { Console::info('Skipped mail processing. No SMTP server hostname has been set.'); return; } @@ -42,9 +42,9 @@ class MailsV1 extends Worker // Set project mail /*$register->get('smtp') ->setFrom( - App::getEnv('_APP_SYSTEM_EMAIL_ADDRESS', APP_EMAIL_TEAM), + Http::getEnv('_APP_SYSTEM_EMAIL_ADDRESS', APP_EMAIL_TEAM), ($project->getId() === 'console') - ? \urldecode(App::getEnv('_APP_SYSTEM_EMAIL_NAME', APP_NAME.' Server')) + ? \urldecode(Http::getEnv('_APP_SYSTEM_EMAIL_NAME', APP_NAME.' Server')) : \sprintf(Locale::getText('account.emails.team'), $project->getAttribute('name') ) );*/ @@ -56,7 +56,7 @@ class MailsV1 extends Worker $mail->clearBCCs(); $mail->clearCCs(); - $mail->setFrom(App::getEnv('_APP_SYSTEM_EMAIL_ADDRESS', APP_EMAIL_TEAM), (empty($from) ? \urldecode(App::getEnv('_APP_SYSTEM_EMAIL_NAME', APP_NAME . ' Server')) : $from)); + $mail->setFrom(Http::getEnv('_APP_SYSTEM_EMAIL_ADDRESS', APP_EMAIL_TEAM), (empty($from) ? \urldecode(Http::getEnv('_APP_SYSTEM_EMAIL_NAME', APP_NAME . ' Server')) : $from)); $mail->addAddress($recipient, $name); $mail->Subject = $subject; $mail->Body = $body; diff --git a/app/workers/messaging.php b/app/workers/messaging.php index fdd2d24493..51b6a3ef78 100644 --- a/app/workers/messaging.php +++ b/app/workers/messaging.php @@ -30,7 +30,7 @@ class MessagingV1 extends Worker public function init(): void { - $dsn = new DSN(App::getEnv('_APP_SMS_PROVIDER')); + $dsn = new DSN(Http::getEnv('_APP_SMS_PROVIDER')); $user = $dsn->getUser(); $secret = $dsn->getPassword(); @@ -44,12 +44,12 @@ class MessagingV1 extends Worker default => null }; - $this->from = App::getEnv('_APP_SMS_FROM'); + $this->from = Http::getEnv('_APP_SMS_FROM'); } public function run(): void { - if (empty(App::getEnv('_APP_SMS_PROVIDER'))) { + if (empty(Http::getEnv('_APP_SMS_PROVIDER'))) { Console::info('Skipped sms processing. No Phone provider has been set.'); return; } diff --git a/app/workers/webhooks.php b/app/workers/webhooks.php index 1ac2060301..deb8edf9e3 100644 --- a/app/workers/webhooks.php +++ b/app/workers/webhooks.php @@ -56,8 +56,8 @@ class WebhooksV1 extends Worker \curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); \curl_setopt($ch, CURLOPT_USERAGENT, \sprintf( APP_USERAGENT, - App::getEnv('_APP_VERSION', 'UNKNOWN'), - App::getEnv('_APP_SYSTEM_SECURITY_EMAIL_ADDRESS', APP_EMAIL_SECURITY) + Http::getEnv('_APP_VERSION', 'UNKNOWN'), + Http::getEnv('_APP_SYSTEM_SECURITY_EMAIL_ADDRESS', APP_EMAIL_SECURITY) )); \curl_setopt( $ch, diff --git a/docs/tutorials/add-route.md b/docs/tutorials/add-route.md index 574e7454c6..befc201ea2 100644 --- a/docs/tutorials/add-route.md +++ b/docs/tutorials/add-route.md @@ -8,7 +8,7 @@ Setting an alias allows the route to be also accessible from the alias URL. The first parameter specifies the alias URL, the second parameter specifies default values for route parameters. ```php -App::post('/v1/storage/buckets/:bucketId/files') +Http::post('/v1/storage/buckets/:bucketId/files') ->alias('/v1/storage/files', ['bucketId' => 'default']) ``` @@ -17,7 +17,7 @@ App::post('/v1/storage/buckets/:bucketId/files') Used as an abstract description of the route. ```php -App::post('/v1/storage/buckets/:bucketId/files') +Http::post('/v1/storage/buckets/:bucketId/files') ->desc('Create File') ``` @@ -26,14 +26,14 @@ App::post('/v1/storage/buckets/:bucketId/files') Groups array is used to group one or more routes with one or more hooks functionality. ```php -App::post('/v1/storage/buckets/:bucketId/files') +Http::post('/v1/storage/buckets/:bucketId/files') ->groups(['api']) ``` In the above example groups() is used to define the current route as part of the routes that shares a common init middleware hook. ```php -App::init() +Http::init() ->groups(['api']) ->action( some code..... @@ -52,7 +52,7 @@ Appwrite uses different labels to achieve different things, for example: - scope - Defines the route permissions scope. ```php -App::post('/v1/storage/buckets/:bucketId/files') +Http::post('/v1/storage/buckets/:bucketId/files') ->label('scope', 'files.write') ``` @@ -66,7 +66,7 @@ App::post('/v1/storage/buckets/:bucketId/files') - audits.resource - Signals the extraction part of the resource. ```php -App::post('/v1/account/create') +Http::post('/v1/account/create') ->label('audits.event', 'account.create') ->label('audits.resource', 'user/{response.$id}') ->label('audits.userId', '{response.$id}') @@ -84,7 +84,7 @@ App::post('/v1/account/create') * sdk.offline.response.key - JSON property name that has the ID. Defaults to $id ```php -App::post('/v1/account/jwt') +Http::post('/v1/account/jwt') ->label('sdk.auth', [APP_AUTH_TYPE_SESSION]) ->label('sdk.namespace', 'account') ->label('sdk.method', 'createJWT') @@ -100,7 +100,7 @@ App::post('/v1/account/jwt') - cache.resource - Identifies the cached resource. ```php -App::get('/v1/storage/buckets/:bucketId/files/:fileId/preview') +Http::get('/v1/storage/buckets/:bucketId/files/:fileId/preview') ->label('cache', true) ->label('cache.resource', 'file/{request.fileId}') ``` @@ -115,7 +115,7 @@ When using the example below, we configure the abuse mechanism to allow this key constructed from the combination of the ip, http method, url, userId to hit the route maximum 60 times in 1 hour (60 seconds \* 60 minutes). ```php -App::post('/v1/storage/buckets/:bucketId/files') +Http::post('/v1/storage/buckets/:bucketId/files') ->label('abuse-key', 'ip:{ip},method:{method},url:{url},userId:{userId}') ->label('abuse-limit', 60) ->label('abuse-time', 3600) @@ -127,7 +127,7 @@ App::post('/v1/storage/buckets/:bucketId/files') Placeholders marked as `[]` are parsed and replaced with their real values. ```php -App::post('/v1/storage/buckets/:bucketId/files') +Http::post('/v1/storage/buckets/:bucketId/files') ->label('event', 'buckets.[bucketId].files.[fileId].create') ``` @@ -137,7 +137,7 @@ App::post('/v1/storage/buckets/:bucketId/files') - usage.params - Additional parameters the metrics can have. ```php -App::post('/v1/storage/buckets/:bucketId/files') +Http::post('/v1/storage/buckets/:bucketId/files') ->label('usage.metric', 'files.{scope}.requests.create') ->label('usage.params', ['bucketId:{request.bucketId}']) ``` @@ -156,7 +156,7 @@ As the name implies, `param()` is used to define a request parameter. - An array of injections ```php -App::get('/v1/account/logs') +Http::get('/v1/account/logs') ->param('queries', [], new Queries(new Limit(), new Offset()), 'Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https://appwrite.io/docs/queries). Only supported methods are limit and offset', true) ``` @@ -165,14 +165,14 @@ App::get('/v1/account/logs') inject is used to inject dependencies pre-bounded to the app. ```php -App::post('/v1/storage/buckets/:bucketId/files') +Http::post('/v1/storage/buckets/:bucketId/files') ->inject('user') ``` -In the example above, the user object is injected into the route pre-bounded using `App::setResource()`. +In the example above, the user object is injected into the route pre-bounded using `Http::setResource()`. ```php -App::setResource('user', function() { +Http::setResource('user', function() { some code... }); ``` @@ -181,7 +181,7 @@ some code... Action populates the actual route code and has to be very clear and understandable. A good route stays simple and doesn't contain complex logic. An action is where we describe our business needs in code, and combine different libraries to work together and tell our story. ```php -App::post('/v1/account/sessions/anonymous') +Http::post('/v1/account/sessions/anonymous') ->action(function (Request $request) { some code... }); diff --git a/src/Appwrite/GraphQL/Resolvers.php b/src/Appwrite/GraphQL/Resolvers.php index 1a7a28d276..b1780be050 100644 --- a/src/Appwrite/GraphQL/Resolvers.php +++ b/src/Appwrite/GraphQL/Resolvers.php @@ -302,7 +302,7 @@ class Resolvers private static function escapePayload(array $payload, int $depth) { - if ($depth > App::getEnv('_APP_GRAPHQL_MAX_DEPTH', 3)) { + if ($depth > Http::getEnv('_APP_GRAPHQL_MAX_DEPTH', 3)) { return; } diff --git a/src/Appwrite/GraphQL/Schema.php b/src/Appwrite/GraphQL/Schema.php index a36b7c56ea..bc4ac396aa 100644 --- a/src/Appwrite/GraphQL/Schema.php +++ b/src/Appwrite/GraphQL/Schema.php @@ -32,7 +32,7 @@ class Schema array $urls, array $params, ): GQLSchema { - App::setResource('utopia:graphql', static function () use ($utopia) { + Http::setResource('utopia:graphql', static function () use ($utopia) { return $utopia; }); diff --git a/src/Appwrite/Messaging/Adapter/Realtime.php b/src/Appwrite/Messaging/Adapter/Realtime.php index cd836d691a..3838fe4397 100644 --- a/src/Appwrite/Messaging/Adapter/Realtime.php +++ b/src/Appwrite/Messaging/Adapter/Realtime.php @@ -140,7 +140,7 @@ class Realtime extends Adapter $userId = array_key_exists('userId', $options) ? $options['userId'] : null; $redis = new \Redis(); //TODO: make this part of the constructor - $redis->connect(App::getEnv('_APP_REDIS_HOST', ''), App::getEnv('_APP_REDIS_PORT', '')); + $redis->connect(Http::getEnv('_APP_REDIS_HOST', ''), Http::getEnv('_APP_REDIS_PORT', '')); $redis->publish('realtime', json_encode([ 'project' => $projectId, 'roles' => $roles, diff --git a/src/Appwrite/Migration/Migration.php b/src/Appwrite/Migration/Migration.php index 93edde9f0e..4f027dc6ce 100644 --- a/src/Appwrite/Migration/Migration.php +++ b/src/Appwrite/Migration/Migration.php @@ -237,7 +237,7 @@ abstract class Migration { $name ??= $id; - if (!$this->projectDB->exists(App::getEnv('_APP_DB_SCHEMA', 'appwrite'), $name)) { + if (!$this->projectDB->exists(Http::getEnv('_APP_DB_SCHEMA', 'appwrite'), $name)) { $attributes = []; $indexes = []; $collection = $this->collections[$id]; diff --git a/src/Appwrite/Migration/Version/V15.php b/src/Appwrite/Migration/Version/V15.php index ef07f349af..bbe89d512a 100644 --- a/src/Appwrite/Migration/Version/V15.php +++ b/src/Appwrite/Migration/Version/V15.php @@ -1486,7 +1486,7 @@ class V15 extends Migration */ protected function encryptFilter(string $value): string { - $key = App::getEnv('_APP_OPENSSL_KEY_V1'); + $key = Http::getEnv('_APP_OPENSSL_KEY_V1'); $iv = OpenSSL::randomPseudoBytes(OpenSSL::cipherIVLength(OpenSSL::CIPHER_AES_128_GCM)); $tag = null; diff --git a/src/Appwrite/Resque/Worker.php b/src/Appwrite/Resque/Worker.php index 65cdf7fe50..2e33fee96e 100644 --- a/src/Appwrite/Resque/Worker.php +++ b/src/Appwrite/Resque/Worker.php @@ -237,7 +237,7 @@ abstract class Worker $attempts++; $cache = new Cache(new RedisCache($register->get('cache'))); $database = new Database(new MariaDB($register->get('db')), $cache); - $database->setDefaultDatabase(App::getEnv('_APP_DB_SCHEMA', 'appwrite')); + $database->setDefaultDatabase(Http::getEnv('_APP_DB_SCHEMA', 'appwrite')); $database->setNamespace($namespace); // Main DB if ( @@ -308,43 +308,43 @@ abstract class Worker */ public function getDevice(string $root): Device { - switch (strtolower(App::getEnv('_APP_STORAGE_DEVICE', Storage::DEVICE_LOCAL))) { + switch (strtolower(Http::getEnv('_APP_STORAGE_DEVICE', Storage::DEVICE_LOCAL))) { case Storage::DEVICE_LOCAL: default: return new Local($root); case Storage::DEVICE_S3: - $s3AccessKey = App::getEnv('_APP_STORAGE_S3_ACCESS_KEY', ''); - $s3SecretKey = App::getEnv('_APP_STORAGE_S3_SECRET', ''); - $s3Region = App::getEnv('_APP_STORAGE_S3_REGION', ''); - $s3Bucket = App::getEnv('_APP_STORAGE_S3_BUCKET', ''); + $s3AccessKey = Http::getEnv('_APP_STORAGE_S3_ACCESS_KEY', ''); + $s3SecretKey = Http::getEnv('_APP_STORAGE_S3_SECRET', ''); + $s3Region = Http::getEnv('_APP_STORAGE_S3_REGION', ''); + $s3Bucket = Http::getEnv('_APP_STORAGE_S3_BUCKET', ''); $s3Acl = 'private'; return new S3($root, $s3AccessKey, $s3SecretKey, $s3Bucket, $s3Region, $s3Acl); case Storage::DEVICE_DO_SPACES: - $doSpacesAccessKey = App::getEnv('_APP_STORAGE_DO_SPACES_ACCESS_KEY', ''); - $doSpacesSecretKey = App::getEnv('_APP_STORAGE_DO_SPACES_SECRET', ''); - $doSpacesRegion = App::getEnv('_APP_STORAGE_DO_SPACES_REGION', ''); - $doSpacesBucket = App::getEnv('_APP_STORAGE_DO_SPACES_BUCKET', ''); + $doSpacesAccessKey = Http::getEnv('_APP_STORAGE_DO_SPACES_ACCESS_KEY', ''); + $doSpacesSecretKey = Http::getEnv('_APP_STORAGE_DO_SPACES_SECRET', ''); + $doSpacesRegion = Http::getEnv('_APP_STORAGE_DO_SPACES_REGION', ''); + $doSpacesBucket = Http::getEnv('_APP_STORAGE_DO_SPACES_BUCKET', ''); $doSpacesAcl = 'private'; return new DOSpaces($root, $doSpacesAccessKey, $doSpacesSecretKey, $doSpacesBucket, $doSpacesRegion, $doSpacesAcl); case Storage::DEVICE_BACKBLAZE: - $backblazeAccessKey = App::getEnv('_APP_STORAGE_BACKBLAZE_ACCESS_KEY', ''); - $backblazeSecretKey = App::getEnv('_APP_STORAGE_BACKBLAZE_SECRET', ''); - $backblazeRegion = App::getEnv('_APP_STORAGE_BACKBLAZE_REGION', ''); - $backblazeBucket = App::getEnv('_APP_STORAGE_BACKBLAZE_BUCKET', ''); + $backblazeAccessKey = Http::getEnv('_APP_STORAGE_BACKBLAZE_ACCESS_KEY', ''); + $backblazeSecretKey = Http::getEnv('_APP_STORAGE_BACKBLAZE_SECRET', ''); + $backblazeRegion = Http::getEnv('_APP_STORAGE_BACKBLAZE_REGION', ''); + $backblazeBucket = Http::getEnv('_APP_STORAGE_BACKBLAZE_BUCKET', ''); $backblazeAcl = 'private'; return new Backblaze($root, $backblazeAccessKey, $backblazeSecretKey, $backblazeBucket, $backblazeRegion, $backblazeAcl); case Storage::DEVICE_LINODE: - $linodeAccessKey = App::getEnv('_APP_STORAGE_LINODE_ACCESS_KEY', ''); - $linodeSecretKey = App::getEnv('_APP_STORAGE_LINODE_SECRET', ''); - $linodeRegion = App::getEnv('_APP_STORAGE_LINODE_REGION', ''); - $linodeBucket = App::getEnv('_APP_STORAGE_LINODE_BUCKET', ''); + $linodeAccessKey = Http::getEnv('_APP_STORAGE_LINODE_ACCESS_KEY', ''); + $linodeSecretKey = Http::getEnv('_APP_STORAGE_LINODE_SECRET', ''); + $linodeRegion = Http::getEnv('_APP_STORAGE_LINODE_REGION', ''); + $linodeBucket = Http::getEnv('_APP_STORAGE_LINODE_BUCKET', ''); $linodeAcl = 'private'; return new Linode($root, $linodeAccessKey, $linodeSecretKey, $linodeBucket, $linodeRegion, $linodeAcl); case Storage::DEVICE_WASABI: - $wasabiAccessKey = App::getEnv('_APP_STORAGE_WASABI_ACCESS_KEY', ''); - $wasabiSecretKey = App::getEnv('_APP_STORAGE_WASABI_SECRET', ''); - $wasabiRegion = App::getEnv('_APP_STORAGE_WASABI_REGION', ''); - $wasabiBucket = App::getEnv('_APP_STORAGE_WASABI_BUCKET', ''); + $wasabiAccessKey = Http::getEnv('_APP_STORAGE_WASABI_ACCESS_KEY', ''); + $wasabiSecretKey = Http::getEnv('_APP_STORAGE_WASABI_SECRET', ''); + $wasabiRegion = Http::getEnv('_APP_STORAGE_WASABI_REGION', ''); + $wasabiBucket = Http::getEnv('_APP_STORAGE_WASABI_BUCKET', ''); $wasabiAcl = 'private'; return new Wasabi($root, $wasabiAccessKey, $wasabiSecretKey, $wasabiBucket, $wasabiRegion, $wasabiAcl); } diff --git a/src/Appwrite/Usage/Stats.php b/src/Appwrite/Usage/Stats.php index caac8f7bb9..134e6d4ea2 100644 --- a/src/Appwrite/Usage/Stats.php +++ b/src/Appwrite/Usage/Stats.php @@ -83,7 +83,7 @@ class Stats { $projectId = $this->params['projectId'] ?? ''; $projectInternalId = $this->params['projectInternalId']; - $tags = ",projectInternalId={$projectInternalId},projectId={$projectId},version=" . App::getEnv('_APP_VERSION', 'UNKNOWN'); + $tags = ",projectInternalId={$projectInternalId},projectId={$projectId},version=" . Http::getEnv('_APP_VERSION', 'UNKNOWN'); // the global namespace is prepended to every key (optional) $this->statsd->setNamespace($this->namespace); diff --git a/src/Executor/Executor.php b/src/Executor/Executor.php index e6388db2a5..137f45999a 100644 --- a/src/Executor/Executor.php +++ b/src/Executor/Executor.php @@ -68,7 +68,7 @@ class Executor $route = "/runtimes"; $headers = [ 'content-type' => 'application/json', - 'x-appwrite-executor-key' => App::getEnv('_APP_EXECUTOR_SECRET', '') + 'x-appwrite-executor-key' => Http::getEnv('_APP_EXECUTOR_SECRET', '') ]; $params = [ 'runtimeId' => "$projectId-$deploymentId", @@ -83,7 +83,7 @@ class Executor 'commands' => $commands ]; - $timeout = (int) App::getEnv('_APP_FUNCTIONS_BUILD_TIMEOUT', 900); + $timeout = (int) Http::getEnv('_APP_FUNCTIONS_BUILD_TIMEOUT', 900); $response = $this->call(self::METHOD_POST, $route, $headers, $params, true, $timeout); @@ -109,7 +109,7 @@ class Executor $route = "/runtimes/$runtimeId"; $headers = [ 'content-type' => 'application/json', - 'x-appwrite-executor-key' => App::getEnv('_APP_EXECUTOR_SECRET', '') + 'x-appwrite-executor-key' => Http::getEnv('_APP_EXECUTOR_SECRET', '') ]; $params = []; @@ -153,7 +153,7 @@ class Executor $route = "/execution"; $headers = [ 'content-type' => 'application/json', - 'x-appwrite-executor-key' => App::getEnv('_APP_EXECUTOR_SECRET', '') + 'x-appwrite-executor-key' => Http::getEnv('_APP_EXECUTOR_SECRET', '') ]; $params = [ 'runtimeId' => "$projectId-$deploymentId", diff --git a/tests/e2e/General/AbuseTest.php b/tests/e2e/General/AbuseTest.php index 415be0c665..0c8e363b37 100644 --- a/tests/e2e/General/AbuseTest.php +++ b/tests/e2e/General/AbuseTest.php @@ -21,7 +21,7 @@ class AbuseTest extends Scope { parent::setUp(); - if (App::getEnv('_APP_OPTIONS_ABUSE') === 'disabled') { + if (Http::getEnv('_APP_OPTIONS_ABUSE') === 'disabled') { $this->markTestSkipped('Abuse is not enabled.'); } } diff --git a/tests/e2e/Services/GraphQL/AbuseTest.php b/tests/e2e/Services/GraphQL/AbuseTest.php index 5fa46ab5d8..958baa3b90 100644 --- a/tests/e2e/Services/GraphQL/AbuseTest.php +++ b/tests/e2e/Services/GraphQL/AbuseTest.php @@ -21,7 +21,7 @@ class AbuseTest extends Scope { parent::setUp(); - if (App::getEnv('_APP_OPTIONS_ABUSE') === 'disabled') { + if (Http::getEnv('_APP_OPTIONS_ABUSE') === 'disabled') { $this->markTestSkipped('Abuse is not enabled.'); } } @@ -90,7 +90,7 @@ class AbuseTest extends Scope 'x-appwrite-project' => $projectId, ], $this->getHeaders()), $graphQLPayload); - $max = App::getEnv('_APP_GRAPHQL_MAX_QUERY_COMPLEXITY', 250); + $max = Http::getEnv('_APP_GRAPHQL_MAX_QUERY_COMPLEXITY', 250); $this->assertEquals('Max query complexity should be ' . $max . ' but got 259.', $response['body']['errors'][0]['message']); } @@ -98,7 +98,7 @@ class AbuseTest extends Scope public function testTooManyQueriesBlocked() { $projectId = $this->getProject()['$id']; - $maxQueries = App::getEnv('_APP_GRAPHQL_MAX_QUERIES', 10); + $maxQueries = Http::getEnv('_APP_GRAPHQL_MAX_QUERIES', 10); $query = []; for ($i = 0; $i <= $maxQueries + 1; $i++) { diff --git a/tests/unit/Event/EventTest.php b/tests/unit/Event/EventTest.php index 97bab1a45f..a232705c63 100644 --- a/tests/unit/Event/EventTest.php +++ b/tests/unit/Event/EventTest.php @@ -14,8 +14,8 @@ class EventTest extends TestCase public function setUp(): void { - $redisHost = App::getEnv('_APP_REDIS_HOST', ''); - $redisPort = App::getEnv('_APP_REDIS_PORT', ''); + $redisHost = Http::getEnv('_APP_REDIS_HOST', ''); + $redisPort = Http::getEnv('_APP_REDIS_PORT', ''); \Resque::setBackend($redisHost . ':' . $redisPort); $this->queue = 'v1-tests' . uniqid(); diff --git a/tests/unit/Usage/StatsTest.php b/tests/unit/Usage/StatsTest.php index d5d12bc9e4..c2d90779df 100644 --- a/tests/unit/Usage/StatsTest.php +++ b/tests/unit/Usage/StatsTest.php @@ -15,8 +15,8 @@ class StatsTest extends TestCase public function setUp(): void { - $host = App::getEnv('_APP_STATSD_HOST', 'telegraf'); - $port = App::getEnv('_APP_STATSD_PORT', 8125); + $host = Http::getEnv('_APP_STATSD_HOST', 'telegraf'); + $port = Http::getEnv('_APP_STATSD_PORT', 8125); $connection = new \Domnikl\Statsd\Connection\UdpSocket($host, $port); $statsd = new \Domnikl\Statsd\Client($connection);