diff --git a/.travis.yml b/.travis.yml index a04ad6665..c1242c2fc 100644 --- a/.travis.yml +++ b/.travis.yml @@ -39,4 +39,4 @@ script: - docker-compose logs appwrite - docker exec appwrite doctor - docker exec appwrite vars -- docker exec appwrite test \ No newline at end of file +- docker exec appwrite test diff --git a/CHANGES.md b/CHANGES.md index 6263aa0d9..9aadc06e4 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -44,6 +44,8 @@ ## Breaking Changes (Read before upgrading!) - **Deprecated** `first` and `last` query params for documents list route in the database API - **Deprecated** Deprectaed Pubjabi Translations ('pn') +- **Deprecated** `PATCH /account/prefs` is now updating the prefs payload and not just merging it +- **Deprecated** `PATCH /users/:userId/prefs` is now updating the prefs payload and not just merging it - Switched order of limit and offset params in all the SDKs `listDocuments` method for better consistency - Default `limit` param value in all the SDKs `listDocuments` method is now 25 for better consistency diff --git a/Dockerfile b/Dockerfile index 54f8a358e..3cbf268f3 100755 --- a/Dockerfile +++ b/Dockerfile @@ -178,6 +178,7 @@ RUN chmod +x /usr/local/bin/doctor && \ chmod +x /usr/local/bin/install && \ chmod +x /usr/local/bin/migrate && \ chmod +x /usr/local/bin/schedule && \ + chmod +x /usr/local/bin/sdks && \ chmod +x /usr/local/bin/ssl && \ chmod +x /usr/local/bin/test && \ chmod +x /usr/local/bin/vars && \ diff --git a/app/config/events.php b/app/config/events.php index aeee6849f..34c4a4f2d 100644 --- a/app/config/events.php +++ b/app/config/events.php @@ -55,4 +55,16 @@ return [ 'storage.files.delete' => [ 'description' => 'This event triggers when a storage file is deleted.', ], + 'users.create' => [ + 'description' => 'This event triggers when a user is created from the users API.', + ], + 'users.update.status' => [ + 'description' => 'This event triggers when a user status is updated from the users API.', + ], + 'users.delete' => [ + 'description' => 'This event triggers when a user is deleted from users API.', + ], + 'users.sessions.delete' => [ + 'description' => 'This event triggers when a user session is deleted from users API.', + ], ]; \ No newline at end of file diff --git a/app/controllers/api/account.php b/app/controllers/api/account.php index 9d6785309..229b70efd 100644 --- a/app/controllers/api/account.php +++ b/app/controllers/api/account.php @@ -55,8 +55,8 @@ App::post('/v1/account') ->param('password', '', new Password(), 'User password. Must be between 6 to 32 chars.') ->param('name', '', new Text(128), 'User name. Max length: 128 chars.', true) ->action(function ($email, $password, $name, $request, $response, $project, $projectDB, $webhooks, $audits) use ($oauth2Keys) { - /** @var Utopia\Request $request */ - /** @var Utopia\Response $response */ + /** @var Utopia\Swoole\Request $request */ + /** @var Appwrite\Utopia\Response $response */ /** @var Appwrite\Database\Document $project */ /** @var Appwrite\Database\Database $projectDB */ /** @var Appwrite\Event\Event $webhooks */ @@ -160,7 +160,7 @@ App::post('/v1/account/sessions') ->param('email', '', new Email(), 'User email.') ->param('password', '', new Password(), 'User password. Must be between 6 to 32 chars.') ->action(function ($email, $password, $request, $response, $projectDB, $webhooks, $audits) { - /** @var Appwrite\Swoole\Request $request */ + /** @var Utopia\Swoole\Request $request */ /** @var Appwrite\Utopia\Response $response */ /** @var Appwrite\Database\Database $projectDB */ /** @var Appwrite\Event\Event $webhooks */ @@ -261,8 +261,8 @@ App::get('/v1/account/sessions/oauth2/:provider') ->param('failure', $oauthDefaultFailure, function ($clients) { return new Host($clients); }, 'URL to redirect back to your app after a failed login attempt. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https://cheatsheetseries.owasp.org/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.', true, ['clients']) ->param('scopes', [], new ArrayList(new Text(128)), 'A list of custom OAuth2 scopes. Check each provider internal docs for a list of supported scopes.', true) ->action(function ($provider, $success, $failure, $scopes, $request, $response, $project) { - /** @var Utopia\Request $request */ - /** @var Utopia\Response $response */ + /** @var Utopia\Swoole\Request $request */ + /** @var Appwrite\Utopia\Response $response */ /** @var Appwrite\Database\Document $project */ $protocol = $request->getProtocol(); @@ -306,8 +306,8 @@ App::get('/v1/account/sessions/oauth2/callback/:provider/:projectId') ->param('code', '', new Text(1024), 'OAuth2 code.') ->param('state', '', new Text(2048), 'Login state params.', true) ->action(function ($projectId, $provider, $code, $state, $request, $response) { - /** @var Utopia\Request $request */ - /** @var Utopia\Response $response */ + /** @var Utopia\Swoole\Request $request */ + /** @var Appwrite\Utopia\Response $response */ $domain = $request->getHostname(); $protocol = $request->getProtocol(); @@ -331,8 +331,8 @@ App::post('/v1/account/sessions/oauth2/callback/:provider/:projectId') ->param('code', '', new Text(1024), 'OAuth2 code.') ->param('state', '', new Text(2048), 'Login state params.', true) ->action(function ($projectId, $provider, $code, $state, $request, $response) { - /** @var Utopia\Request $request */ - /** @var Utopia\Response $response */ + /** @var Utopia\Swoole\Request $request */ + /** @var Appwrite\Utopia\Response $response */ $domain = $request->getHostname(); $protocol = $request->getProtocol(); @@ -357,8 +357,8 @@ App::get('/v1/account/sessions/oauth2/:provider/redirect') ->param('code', '', new Text(1024), 'OAuth2 code.') ->param('state', '', new Text(2048), 'OAuth2 state params.', true) ->action(function ($provider, $code, $state, $request, $response, $project, $user, $projectDB, $audits) use ($oauthDefaultSuccess) { - /** @var Utopia\Request $request */ - /** @var Utopia\Response $response */ + /** @var Utopia\Swoole\Request $request */ + /** @var Appwrite\Utopia\Response $response */ /** @var Appwrite\Database\Document $project */ /** @var Appwrite\Database\Document $user */ /** @var Appwrite\Database\Database $projectDB */ @@ -553,7 +553,7 @@ App::get('/v1/account') ->label('sdk.description', '/docs/references/account/get.md') ->label('sdk.response', ['200' => 'user']) ->action(function ($response, $user) use ($oauth2Keys) { - /** @var Utopia\Response $response */ + /** @var Appwrite\Utopia\Response $response */ /** @var Appwrite\Database\Document $user */ $response->json(\array_merge($user->getArrayCopy(\array_merge( @@ -577,7 +577,7 @@ App::get('/v1/account/prefs') ->label('sdk.method', 'getPrefs') ->label('sdk.description', '/docs/references/account/get-prefs.md') ->action(function ($response, $user) { - /** @var Utopia\Response $response */ + /** @var Appwrite\Utopia\Response $response */ /** @var Appwrite\Database\Document $user */ $prefs = $user->getAttribute('prefs', '{}'); @@ -601,7 +601,7 @@ App::get('/v1/account/sessions') ->label('sdk.method', 'getSessions') ->label('sdk.description', '/docs/references/account/get-sessions.md') ->action(function ($response, $user, $locale, $geodb) { - /** @var Utopia\Response $response */ + /** @var Appwrite\Utopia\Response $response */ /** @var Appwrite\Database\Document $user */ /** @var Utopia\Locale\Locale $locale */ /** @var MaxMind\Db\Reader $geodb */ @@ -648,7 +648,6 @@ App::get('/v1/account/sessions') $sessions[$index]['geo']['isoCode'] = '--'; $sessions[$index]['geo']['country'] = $locale->getText('locale.country.unknown'); } - } catch (\Exception $e) { $sessions[$index]['geo']['isoCode'] = '--'; $sessions[$index]['geo']['country'] = $locale->getText('locale.country.unknown'); @@ -669,7 +668,7 @@ App::get('/v1/account/logs') ->label('sdk.method', 'getLogs') ->label('sdk.description', '/docs/references/account/get-logs.md') ->action(function ($response, $register, $project, $user, $locale, $geodb) { - /** @var Utopia\Response $response */ + /** @var Appwrite\Utopia\Response $response */ /** @var Appwrite\Database\Document $project */ /** @var Appwrite\Database\Document $user */ /** @var Utopia\Locale\Locale $locale */ @@ -732,7 +731,6 @@ App::get('/v1/account/logs') $output[$i]['geo']['isoCode'] = '--'; $output[$i]['geo']['country'] = $locale->getText('locale.country.unknown'); } - } catch (\Exception $e) { $output[$i]['geo']['isoCode'] = '--'; $output[$i]['geo']['country'] = $locale->getText('locale.country.unknown'); @@ -753,7 +751,7 @@ App::patch('/v1/account/name') ->label('sdk.description', '/docs/references/account/update-name.md') ->param('name', '', new Text(128), 'User name. Max length: 128 chars.') ->action(function ($name, $response, $user, $projectDB, $audits) use ($oauth2Keys) { - /** @var Utopia\Response $response */ + /** @var Appwrite\Utopia\Response $response */ /** @var Appwrite\Database\Document $user */ /** @var Appwrite\Database\Database $projectDB */ /** @var Appwrite\Event\Event $audits */ @@ -795,7 +793,7 @@ App::patch('/v1/account/password') ->param('password', '', new Password(), 'New user password. Must be between 6 to 32 chars.') ->param('oldPassword', '', new Password(), 'Old user password. Must be between 6 to 32 chars.') ->action(function ($password, $oldPassword, $response, $user, $projectDB, $audits) use ($oauth2Keys) { - /** @var Utopia\Response $response */ + /** @var Appwrite\Utopia\Response $response */ /** @var Appwrite\Database\Document $user */ /** @var Appwrite\Database\Database $projectDB */ /** @var Appwrite\Event\Event $audits */ @@ -841,7 +839,7 @@ App::patch('/v1/account/email') ->param('email', '', new Email(), 'User email.') ->param('password', '', new Password(), 'User password. Must be between 6 to 32 chars.') ->action(function ($email, $password, $response, $user, $projectDB, $audits) use ($oauth2Keys) { - /** @var Utopia\Response $response */ + /** @var Appwrite\Utopia\Response $response */ /** @var Appwrite\Database\Document $user */ /** @var Appwrite\Database\Database $projectDB */ /** @var Appwrite\Event\Event $audits */ @@ -901,7 +899,7 @@ App::patch('/v1/account/prefs') ->param('prefs', '', new Assoc(), 'Prefs key-value JSON object.') ->label('sdk.description', '/docs/references/account/update-prefs.md') ->action(function ($prefs, $response, $user, $projectDB, $audits) { - /** @var Utopia\Response $response */ + /** @var Appwrite\Utopia\Response $response */ /** @var Appwrite\Database\Document $user */ /** @var Appwrite\Database\Database $projectDB */ /** @var Appwrite\Event\Event $audits */ @@ -944,8 +942,8 @@ App::delete('/v1/account') ->label('sdk.method', 'delete') ->label('sdk.description', '/docs/references/account/delete.md') ->action(function ($request, $response, $user, $projectDB, $audits, $webhooks) { - /** @var Utopia\Request $request */ - /** @var Utopia\Response $response */ + /** @var Utopia\Swoole\Request $request */ + /** @var Appwrite\Utopia\Response $response */ /** @var Appwrite\Database\Document $user */ /** @var Appwrite\Database\Database $projectDB */ /** @var Appwrite\Event\Event $audits */ @@ -1007,8 +1005,8 @@ App::delete('/v1/account/sessions/:sessionId') ->label('abuse-limit', 100) ->param('sessionId', null, new UID(), 'Session unique ID. Use the string \'current\' to delete the current device session.') ->action(function ($sessionId, $request, $response, $user, $projectDB, $audits, $webhooks) { - /** @var Utopia\Request $request */ - /** @var Utopia\Response $response */ + /** @var Utopia\Swoole\Request $request */ + /** @var Appwrite\Utopia\Response $response */ /** @var Appwrite\Database\Document $user */ /** @var Appwrite\Database\Database $projectDB */ /** @var Appwrite\Event\Event $audits */ @@ -1071,8 +1069,8 @@ App::delete('/v1/account/sessions') ->label('sdk.description', '/docs/references/account/delete-sessions.md') ->label('abuse-limit', 100) ->action(function ($request, $response, $user, $projectDB, $audits, $webhooks) { - /** @var Utopia\Request $request */ - /** @var Utopia\Response $response */ + /** @var Utopia\Swoole\Request $request */ + /** @var Appwrite\Utopia\Response $response */ /** @var Appwrite\Database\Document $user */ /** @var Appwrite\Database\Database $projectDB */ /** @var Appwrite\Event\Event $audits */ @@ -1129,8 +1127,8 @@ App::post('/v1/account/recovery') ->param('email', '', new Email(), 'User email.') ->param('url', '', function ($clients) { return new Host($clients); }, 'URL to redirect the user back to your app from the recovery email. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https://cheatsheetseries.owasp.org/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.', false, ['clients']) ->action(function ($email, $url, $request, $response, $projectDB, $project, $locale, $mails, $audits) { - /** @var Utopia\Request $request */ - /** @var Utopia\Response $response */ + /** @var Utopia\Swoole\Request $request */ + /** @var Appwrite\Utopia\Response $response */ /** @var Appwrite\Database\Database $projectDB */ /** @var Appwrite\Database\Document $project */ /** @var Utopia\Locale\Locale $locale */ @@ -1237,7 +1235,7 @@ App::put('/v1/account/recovery') ->param('password', '', new Password(), 'New password. Must be between 6 to 32 chars.') ->param('passwordAgain', '', new Password(), 'New password again. Must be between 6 to 32 chars.') ->action(function ($userId, $secret, $password, $passwordAgain, $response, $projectDB, $audits) { - /** @var Utopia\Response $response */ + /** @var Appwrite\Utopia\Response $response */ /** @var Appwrite\Database\Database $projectDB */ /** @var Appwrite\Event\Event $audits */ @@ -1306,8 +1304,8 @@ App::post('/v1/account/verification') ->label('abuse-key', 'url:{url},email:{param-email}') ->param('url', '', function ($clients) { return new Host($clients); }, 'URL to redirect the user back to your app from the verification email. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https://cheatsheetseries.owasp.org/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.', false, ['clients']) // TODO add built-in confirm page ->action(function ($url, $request, $response, $project, $user, $projectDB, $locale, $audits, $mails) { - /** @var Utopia\Request $request */ - /** @var Utopia\Response $response */ + /** @var Utopia\Swoole\Request $request */ + /** @var Appwrite\Utopia\Response $response */ /** @var Appwrite\Database\Document $project */ /** @var Appwrite\Database\Document $user */ /** @var Appwrite\Database\Database $projectDB */ @@ -1402,7 +1400,7 @@ App::put('/v1/account/verification') ->param('userId', '', new UID(), 'User unique ID.') ->param('secret', '', new Text(256), 'Valid verification token.') ->action(function ($userId, $secret, $response, $user, $projectDB, $audits) { - /** @var Utopia\Response $response */ + /** @var Appwrite\Utopia\Response $response */ /** @var Appwrite\Database\Document $user */ /** @var Appwrite\Database\Database $projectDB */ /** @var Appwrite\Event\Event $audits */ diff --git a/app/controllers/api/avatars.php b/app/controllers/api/avatars.php index 5a3e9e48d..5b75073f2 100644 --- a/app/controllers/api/avatars.php +++ b/app/controllers/api/avatars.php @@ -17,7 +17,7 @@ use chillerlan\QRCode\QRCode; use chillerlan\QRCode\QROptions; $avatarCallback = function ($type, $code, $width, $height, $quality, $response) { - /** @var Utopia\Response $response */ + /** @var Appwrite\Utopia\Response $response */ $code = \strtolower($code); $type = \strtolower($type); @@ -143,7 +143,7 @@ App::get('/v1/avatars/image') ->param('width', 400, new Range(0, 2000), 'Resize preview image width, Pass an integer between 0 to 2000.', true) ->param('height', 400, new Range(0, 2000), 'Resize preview image height, Pass an integer between 0 to 2000.', true) ->action(function ($url, $width, $height, $response) { - /** @var Utopia\Response $response */ + /** @var Appwrite\Utopia\Response $response */ $quality = 80; $output = 'png'; @@ -207,7 +207,7 @@ App::get('/v1/avatars/favicon') ->label('sdk.description', '/docs/references/avatars/get-favicon.md') ->param('url', '', new URL(), 'Website URL which you want to fetch the favicon from.') ->action(function ($url, $response) { - /** @var Utopia\Response $response */ + /** @var Appwrite\Utopia\Response $response */ $width = 56; $height = 56; @@ -360,7 +360,7 @@ App::get('/v1/avatars/qr') ->param('margin', 1, new Range(0, 10), 'Margin from edge. Pass an integer between 0 to 10. Defaults to 1.', true) ->param('download', false, new Boolean(true), 'Return resulting image with \'Content-Disposition: attachment \' headers for the browser to start downloading it. Pass 0 for no header, or 1 for otherwise. Default value is set to 0.', true) ->action(function ($text, $size, $margin, $download, $response) { - /** @var Utopia\Response $response */ + /** @var Appwrite\Utopia\Response $response */ $download = ($download === '1' || $download === 'true' || $download === 1 || $download === true); $options = new QROptions([ @@ -396,7 +396,7 @@ App::get('/v1/avatars/initials') ->param('color', '', new HexColor(), 'Changes text color. By default a random color will be picked and stay will persistent to the given name.', true) ->param('background', '', new HexColor(), 'Changes background color. By default a random color will be picked and stay will persistent to the given name.', true) ->action(function ($name, $width, $height, $color, $background, $response, $user) { - /** @var Utopia\Response $response */ + /** @var Appwrite\Utopia\Response $response */ /** @var Appwrite\Database\Document $user */ $themes = [ diff --git a/app/controllers/api/database.php b/app/controllers/api/database.php index bd1993575..b535bb489 100644 --- a/app/controllers/api/database.php +++ b/app/controllers/api/database.php @@ -35,7 +35,7 @@ App::post('/v1/database/collections') ->param('write', [], new ArrayList(new Text(64)), 'An array of strings with write permissions. By default no user is granted with any write permissions. [learn more about permissions](/docs/permissions) and get a full list of available permissions.') ->param('rules', [], function ($projectDB) { return new ArrayList(new Collection($projectDB, [Database::SYSTEM_COLLECTION_RULES], ['$collection' => Database::SYSTEM_COLLECTION_RULES, '$permissions' => ['read' => [], 'write' => []]])); }, 'Array of [rule objects](/docs/rules). Each rule define a collection field name, data type and validation.', false, ['projectDB']) ->action(function ($name, $read, $write, $rules, $response, $projectDB, $webhooks, $audits) { - /** @var Utopia\Response $response */ + /** @var Appwrite\Utopia\Response $response */ /** @var Appwrite\Database\Database $projectDB */ /** @var Appwrite\Event\Event $webhooks */ /** @var Appwrite\Event\Event $audits */ @@ -111,7 +111,7 @@ App::get('/v1/database/collections') ->param('offset', 0, new Range(0, 40000), 'Results offset. The default value is 0. Use this param to manage pagination.', true) ->param('orderType', 'ASC', new WhiteList(['ASC', 'DESC'], true), 'Order result by ASC or DESC order.', true) ->action(function ($search, $limit, $offset, $orderType, $response, $projectDB) { - /** @var Utopia\Response $response */ + /** @var Appwrite\Utopia\Response $response */ /** @var Appwrite\Database\Database $projectDB */ $results = $projectDB->getCollection([ @@ -139,7 +139,7 @@ App::get('/v1/database/collections/:collectionId') ->label('sdk.description', '/docs/references/database/get-collection.md') ->param('collectionId', '', new UID(), 'Collection unique ID.') ->action(function ($collectionId, $response, $projectDB) { - /** @var Utopia\Response $response */ + /** @var Appwrite\Utopia\Response $response */ /** @var Appwrite\Database\Database $projectDB */ $collection = $projectDB->getDocument($collectionId, false); @@ -231,7 +231,7 @@ App::put('/v1/database/collections/:collectionId') ->param('write', [], new ArrayList(new Text(64)), 'An array of strings with write permissions. By default no user is granted with any write permissions. [learn more about permissions](/docs/permissions) and get a full list of available permissions.') ->param('rules', [], function ($projectDB) { return new ArrayList(new Collection($projectDB, [Database::SYSTEM_COLLECTION_RULES], ['$collection' => Database::SYSTEM_COLLECTION_RULES, '$permissions' => ['read' => [], 'write' => []]])); }, 'Array of [rule objects](/docs/rules). Each rule define a collection field name, data type and validation.', true, ['projectDB']) ->action(function ($collectionId, $name, $read, $write, $rules, $response, $projectDB, $webhooks, $audits) { - /** @var Utopia\Response $response */ + /** @var Appwrite\Utopia\Response $response */ /** @var Appwrite\Database\Database $projectDB */ /** @var Appwrite\Event\Event $webhooks */ /** @var Appwrite\Event\Event $audits */ @@ -303,7 +303,7 @@ App::delete('/v1/database/collections/:collectionId') ->label('sdk.description', '/docs/references/database/delete-collection.md') ->param('collectionId', '', new UID(), 'Collection unique ID.') ->action(function ($collectionId, $response, $projectDB, $webhooks, $audits) { - /** @var Utopia\Response $response */ + /** @var Appwrite\Utopia\Response $response */ /** @var Appwrite\Database\Database $projectDB */ /** @var Appwrite\Event\Event $webhooks */ /** @var Appwrite\Event\Event $audits */ @@ -350,7 +350,7 @@ App::post('/v1/database/collections/:collectionId/documents') ->param('parentProperty', '', new Key(), 'Parent document property name. Use when you want your new document to be a child of a parent document.', true) ->param('parentPropertyType', Document::SET_TYPE_ASSIGN, new WhiteList([Document::SET_TYPE_ASSIGN, Document::SET_TYPE_APPEND, Document::SET_TYPE_PREPEND], true), 'Parent document property connection type. You can set this value to **assign**, **append** or **prepend**, default value is assign. Use when you want your new document to be a child of a parent document.', true) ->action(function ($collectionId, $data, $read, $write, $parentDocument, $parentProperty, $parentPropertyType, $response, $projectDB, $webhooks, $audits) { - /** @var Utopia\Response $response */ + /** @var Appwrite\Utopia\Response $response */ /** @var Appwrite\Database\Database $projectDB */ /** @var Appwrite\Event\Event $webhooks */ /** @var Appwrite\Event\Event $audits */ @@ -474,7 +474,7 @@ App::get('/v1/database/collections/:collectionId/documents') ->param('orderCast', 'string', new WhiteList(['int', 'string', 'date', 'time', 'datetime'], true), 'Order field type casting. Possible values are int, string, date, time or datetime. The database will attempt to cast the order field to the value you pass here. The default value is a string.', true) ->param('search', '', new Text(256), 'Search query. Enter any free text search. The database will try to find a match against all document attributes and children. Max length: 256 chars.', true) ->action(function ($collectionId, $filters, $limit, $offset, $orderField, $orderType, $orderCast, $search, $response, $projectDB) { - /** @var Utopia\Response $response */ + /** @var Appwrite\Utopia\Response $response */ /** @var Appwrite\Database\Database $projectDB */ $collection = $projectDB->getDocument($collectionId, false); @@ -529,8 +529,8 @@ App::get('/v1/database/collections/:collectionId/documents/:documentId') ->param('collectionId', null, new UID(), 'Collection unique ID. You can create a new collection with validation rules using the Database service [server integration](/docs/server/database#createCollection).') ->param('documentId', null, new UID(), 'Document unique ID.') ->action(function ($collectionId, $documentId, $request, $response, $projectDB) { - /** @var Utopia\Request $request */ - /** @var Utopia\Response $response */ + /** @var Utopia\Swoole\Request $request */ + /** @var Appwrite\Utopia\Response $response */ /** @var Appwrite\Database\Database $projectDB */ $document = $projectDB->getDocument($documentId, false); @@ -581,7 +581,7 @@ App::patch('/v1/database/collections/:collectionId/documents/:documentId') ->param('read', [], new ArrayList(new Text(64)), 'An array of strings with read permissions. By default no user is granted with any read permissions. [learn more about permissions](/docs/permissions) and get a full list of available permissions.') ->param('write', [], new ArrayList(new Text(64)), 'An array of strings with write permissions. By default no user is granted with any write permissions. [learn more about permissions](/docs/permissions) and get a full list of available permissions.') ->action(function ($collectionId, $documentId, $data, $read, $write, $response, $projectDB, $webhooks, $audits) { - /** @var Utopia\Response $response */ + /** @var Appwrite\Utopia\Response $response */ /** @var Appwrite\Database\Database $projectDB */ /** @var Appwrite\Event\Event $webhooks */ /** @var Appwrite\Event\Event $audits */ @@ -661,7 +661,7 @@ App::delete('/v1/database/collections/:collectionId/documents/:documentId') ->param('collectionId', null, new UID(), 'Collection unique ID. You can create a new collection with validation rules using the Database service [server integration](/docs/server/database#createCollection).') ->param('documentId', null, new UID(), 'Document unique ID.') ->action(function ($collectionId, $documentId, $response, $projectDB, $webhooks, $audits) { - /** @var Utopia\Response $response */ + /** @var Appwrite\Utopia\Response $response */ /** @var Appwrite\Database\Database $projectDB */ /** @var Appwrite\Event\Event $webhooks */ /** @var Appwrite\Event\Event $audits */ diff --git a/app/controllers/api/functions.php b/app/controllers/api/functions.php index 039eeb3f5..41ea32348 100644 --- a/app/controllers/api/functions.php +++ b/app/controllers/api/functions.php @@ -352,7 +352,7 @@ App::get('/v1/functions/:functionId/tags/:tagId') $tag = $projectDB->getDocument($tagId); - if($tag->getAttribute('functionId') !== $function->getId()) { + if ($tag->getAttribute('functionId') !== $function->getId()) { throw new Exception('Tag not found', 404); } @@ -382,7 +382,7 @@ App::delete('/v1/functions/:functionId/tags/:tagId') $tag = $projectDB->getDocument($tagId); - if($tag->getAttribute('functionId') !== $function->getId()) { + if ($tag->getAttribute('functionId') !== $function->getId()) { throw new Exception('Tag not found', 404); } @@ -416,7 +416,7 @@ App::post('/v1/functions/:functionId/executions') ->param('functionId', '', new UID(), 'Function unique ID.') ->param('async', 1, new Range(0, 1), 'Execute code asynchronously. Pass 1 for true, 0 for false. Default value is 1.', true) ->action(function ($functionId, $async, $response, $project, $projectDB) { - /** @var Utopia\Response $response */ + /** @var Appwrite\Utopia\Response $response */ /** @var Appwrite\Database\Document $project */ /** @var Appwrite\Database\Database $projectDB */ @@ -428,7 +428,7 @@ App::post('/v1/functions/:functionId/executions') $tag = $projectDB->getDocument($function->getAttribute('tag')); - if($tag->getAttribute('functionId') !== $function->getId()) { + if ($tag->getAttribute('functionId') !== $function->getId()) { throw new Exception('Tag not found. Deploy tag before trying to execute a function', 404); } @@ -455,7 +455,7 @@ App::post('/v1/functions/:functionId/executions') throw new Exception('Failed saving execution to DB', 500); } - if((bool)$async) { + if ((bool)$async) { // Issue a TLS certificate when domain is verified Resque::enqueue('v1-functions', 'FunctionsV1', [ 'projectId' => $project->getId(), @@ -527,7 +527,7 @@ App::get('/v1/functions/:functionId/executions/:executionId') $execution = $projectDB->getDocument($executionId); - if($execution->getAttribute('functionId') !== $function->getId()) { + if ($execution->getAttribute('functionId') !== $function->getId()) { throw new Exception('Execution not found', 404); } diff --git a/app/controllers/api/health.php b/app/controllers/api/health.php index 5ef4f2b9c..8b146167d 100644 --- a/app/controllers/api/health.php +++ b/app/controllers/api/health.php @@ -15,7 +15,7 @@ App::get('/v1/health') ->label('sdk.method', 'get') ->label('sdk.description', '/docs/references/health/get.md') ->action(function ($response) { - /** @var Utopia\Response $response */ + /** @var Appwrite\Utopia\Response $response */ $response->json(['status' => 'OK']); }, ['response']); @@ -25,7 +25,7 @@ App::get('/v1/health/version') ->groups(['api', 'health']) ->label('scope', 'public') ->action(function ($response) { - /** @var Utopia\Response $response */ + /** @var Appwrite\Utopia\Response $response */ $response->json(['version' => APP_VERSION_STABLE]); }, ['response']); @@ -39,7 +39,7 @@ App::get('/v1/health/db') ->label('sdk.method', 'getDB') ->label('sdk.description', '/docs/references/health/get-db.md') ->action(function ($response, $register) { - /** @var Utopia\Response $response */ + /** @var Appwrite\Utopia\Response $response */ /** @var Utopia\Registry\Registry $register */ $register->get('db'); /* @var $db PDO */ @@ -56,7 +56,7 @@ App::get('/v1/health/cache') ->label('sdk.method', 'getCache') ->label('sdk.description', '/docs/references/health/get-cache.md') ->action(function ($response, $register) { - /** @var Utopia\Response $response */ + /** @var Appwrite\Utopia\Response $response */ /** @var Utopia\Registry\Registry $register */ $register->get('cache'); /* @var $cache Predis\Client */ @@ -72,7 +72,7 @@ App::get('/v1/health/time') ->label('sdk.method', 'getTime') ->label('sdk.description', '/docs/references/health/get-time.md') ->action(function ($response) { - /** @var Utopia\Response $response */ + /** @var Appwrite\Utopia\Response $response */ /* * Code from: @see https://www.beliefmedia.com.au/query-ntp-time-server @@ -120,7 +120,7 @@ App::get('/v1/health/queue/webhooks') ->label('sdk.method', 'getQueueWebhooks') ->label('sdk.description', '/docs/references/health/get-queue-webhooks.md') ->action(function ($response) { - /** @var Utopia\Response $response */ + /** @var Appwrite\Utopia\Response $response */ $response->json(['size' => Resque::size('v1-webhooks')]); }, ['response']); @@ -134,7 +134,7 @@ App::get('/v1/health/queue/tasks') ->label('sdk.method', 'getQueueTasks') ->label('sdk.description', '/docs/references/health/get-queue-tasks.md') ->action(function ($response) { - /** @var Utopia\Response $response */ + /** @var Appwrite\Utopia\Response $response */ $response->json(['size' => Resque::size('v1-tasks')]); }, ['response']); @@ -148,7 +148,7 @@ App::get('/v1/health/queue/logs') ->label('sdk.method', 'getQueueLogs') ->label('sdk.description', '/docs/references/health/get-queue-logs.md') ->action(function ($response) { - /** @var Utopia\Response $response */ + /** @var Appwrite\Utopia\Response $response */ $response->json(['size' => Resque::size('v1-audit')]); }, ['response']); @@ -162,7 +162,7 @@ App::get('/v1/health/queue/usage') ->label('sdk.method', 'getQueueUsage') ->label('sdk.description', '/docs/references/health/get-queue-usage.md') ->action(function ($response) { - /** @var Utopia\Response $response */ + /** @var Appwrite\Utopia\Response $response */ $response->json(['size' => Resque::size('v1-usage')]); }, ['response']); @@ -176,7 +176,7 @@ App::get('/v1/health/queue/certificates') ->label('sdk.method', 'getQueueCertificates') ->label('sdk.description', '/docs/references/health/get-queue-certificates.md') ->action(function ($response) { - /** @var Utopia\Response $response */ + /** @var Appwrite\Utopia\Response $response */ $response->json(['size' => Resque::size('v1-certificates')]); }, ['response']); @@ -190,7 +190,7 @@ App::get('/v1/health/queue/functions') ->label('sdk.method', 'getQueueFunctions') ->label('sdk.description', '/docs/references/health/get-queue-functions.md') ->action(function ($response) { - /** @var Utopia\Response $response */ + /** @var Appwrite\Utopia\Response $response */ $response->json(['size' => Resque::size('v1-functions')]); }, ['response']); @@ -204,7 +204,7 @@ App::get('/v1/health/storage/local') ->label('sdk.method', 'getStorageLocal') ->label('sdk.description', '/docs/references/health/get-storage-local.md') ->action(function ($response) { - /** @var Utopia\Response $response */ + /** @var Appwrite\Utopia\Response $response */ foreach ([ 'Uploads' => APP_STORAGE_UPLOADS, @@ -235,7 +235,7 @@ App::get('/v1/health/anti-virus') ->label('sdk.method', 'getAntiVirus') ->label('sdk.description', '/docs/references/health/get-storage-anti-virus.md') ->action(function ($response) { - /** @var Utopia\Response $response */ + /** @var Appwrite\Utopia\Response $response */ if (App::getEnv('_APP_STORAGE_ANTIVIRUS') === 'disabled') { // Check if scans are enabled throw new Exception('Anitvirus is disabled'); @@ -258,7 +258,7 @@ App::get('/v1/health/stats') // Currently only used internally // ->label('sdk.method', 'getStats') ->label('docs', false) ->action(function ($response, $register) { - /** @var Utopia\Response $response */ + /** @var Appwrite\Utopia\Response $response */ /** @var Utopia\Registry\Registry $register */ $device = Storage::getDevice('files'); diff --git a/app/controllers/api/locale.php b/app/controllers/api/locale.php index aa6fa9278..7be2a5ce4 100644 --- a/app/controllers/api/locale.php +++ b/app/controllers/api/locale.php @@ -12,8 +12,8 @@ App::get('/v1/locale') ->label('sdk.method', 'get') ->label('sdk.description', '/docs/references/locale/get-locale.md') ->action(function ($request, $response, $locale, $geodb) { - /** @var Utopia\Request $request */ - /** @var Utopia\Response $response */ + /** @var Utopia\Swoole\Request $request */ + /** @var Appwrite\Utopia\Response $response */ /** @var Utopia\Locale\Locale $locale */ /** @var MaxMind\Db\Reader $geodb */ @@ -69,7 +69,7 @@ App::get('/v1/locale/countries') ->label('sdk.method', 'getCountries') ->label('sdk.description', '/docs/references/locale/get-countries.md') ->action(function ($response, $locale) { - /** @var Utopia\Response $response */ + /** @var Appwrite\Utopia\Response $response */ /** @var Utopia\Locale\Locale $locale */ $list = $locale->getText('countries'); /* @var $list array */ @@ -88,7 +88,7 @@ App::get('/v1/locale/countries/eu') ->label('sdk.method', 'getCountriesEU') ->label('sdk.description', '/docs/references/locale/get-countries-eu.md') ->action(function ($response, $locale) { - /** @var Utopia\Response $response */ + /** @var Appwrite\Utopia\Response $response */ /** @var Utopia\Locale\Locale $locale */ $countries = $locale->getText('countries'); /* @var $countries array */ @@ -115,7 +115,7 @@ App::get('/v1/locale/countries/phones') ->label('sdk.method', 'getCountriesPhones') ->label('sdk.description', '/docs/references/locale/get-countries-phones.md') ->action(function ($response, $locale) { - /** @var Utopia\Response $response */ + /** @var Appwrite\Utopia\Response $response */ /** @var Utopia\Locale\Locale $locale */ $list = Config::getParam('locale-phones'); /* @var $list array */ @@ -142,7 +142,7 @@ App::get('/v1/locale/continents') ->label('sdk.method', 'getContinents') ->label('sdk.description', '/docs/references/locale/get-continents.md') ->action(function ($response, $locale) { - /** @var Utopia\Response $response */ + /** @var Appwrite\Utopia\Response $response */ /** @var Utopia\Locale\Locale $locale */ $list = $locale->getText('continents'); /* @var $list array */ @@ -161,7 +161,7 @@ App::get('/v1/locale/currencies') ->label('sdk.method', 'getCurrencies') ->label('sdk.description', '/docs/references/locale/get-currencies.md') ->action(function ($response) { - /** @var Utopia\Response $response */ + /** @var Appwrite\Utopia\Response $response */ $currencies = Config::getParam('locale-currencies'); @@ -178,7 +178,7 @@ App::get('/v1/locale/languages') ->label('sdk.method', 'getLanguages') ->label('sdk.description', '/docs/references/locale/get-languages.md') ->action(function ($response) { - /** @var Utopia\Response $response */ + /** @var Appwrite\Utopia\Response $response */ $languages = Config::getParam('locale-languages'); diff --git a/app/controllers/api/projects.php b/app/controllers/api/projects.php index 3f62a66c6..5037624b2 100644 --- a/app/controllers/api/projects.php +++ b/app/controllers/api/projects.php @@ -38,7 +38,7 @@ App::post('/v1/projects') ->param('legalAddress', '', new Text(256), 'Project legal Address. Max length: 256 chars.', true) ->param('legalTaxId', '', new Text(256), 'Project legal Tax ID. Max length: 256 chars.', true) ->action(function ($name, $teamId, $description, $logo, $url, $legalName, $legalCountry, $legalState, $legalCity, $legalAddress, $legalTaxId, $response, $consoleDB, $projectDB) { - /** @var Utopia\Response $response */ + /** @var Appwrite\Utopia\Response $response */ /** @var Appwrite\Database\Database $consoleDB */ /** @var Appwrite\Database\Database $projectDB */ @@ -96,7 +96,7 @@ App::get('/v1/projects') ->param('offset', 0, new Range(0, 2000), 'Results offset. The default value is 0. Use this param to manage pagination.', true) ->param('orderType', 'ASC', new WhiteList(['ASC', 'DESC'], true), 'Order result by ASC or DESC order.', true) ->action(function ($search, $limit, $offset, $orderType, $response, $consoleDB) { - /** @var Utopia\Response $response */ + /** @var Appwrite\Utopia\Response $response */ /** @var Appwrite\Database\Database $consoleDB */ $results = $consoleDB->getCollection([ @@ -122,7 +122,7 @@ App::get('/v1/projects/:projectId') ->label('sdk.method', 'get') ->param('projectId', '', new UID(), 'Project unique ID.') ->action(function ($projectId, $response, $consoleDB) { - /** @var Utopia\Response $response */ + /** @var Appwrite\Utopia\Response $response */ /** @var Appwrite\Database\Database $consoleDB */ $project = $consoleDB->getDocument($projectId); @@ -143,7 +143,7 @@ App::get('/v1/projects/:projectId/usage') ->param('projectId', '', new UID(), 'Project unique ID.') ->param('range', 'last30', new WhiteList(['daily', 'monthly', 'last30', 'last90'], true), 'Date range.', true) ->action(function ($projectId, $range, $response, $consoleDB, $projectDB, $register) { - /** @var Utopia\Response $response */ + /** @var Appwrite\Utopia\Response $response */ /** @var Appwrite\Database\Database $consoleDB */ /** @var Appwrite\Database\Database $projectDB */ /** @var Utopia\Registry\Registry $register */ @@ -326,7 +326,7 @@ App::patch('/v1/projects/:projectId') ->param('legalAddress', '', new Text(256), 'Project legal address. Max length: 256 chars.', true) ->param('legalTaxId', '', new Text(256), 'Project legal tax ID. Max length: 256 chars.', true) ->action(function ($projectId, $name, $description, $logo, $url, $legalName, $legalCountry, $legalState, $legalCity, $legalAddress, $legalTaxId, $response, $consoleDB) { - /** @var Utopia\Response $response */ + /** @var Appwrite\Utopia\Response $response */ /** @var Appwrite\Database\Database $consoleDB */ $project = $consoleDB->getDocument($projectId); @@ -366,7 +366,7 @@ App::patch('/v1/projects/:projectId/oauth2') ->param('appId', '', new Text(256), 'Provider app ID. Max length: 256 chars.', true) ->param('secret', '', new text(512), 'Provider secret key. Max length: 512 chars.', true) ->action(function ($projectId, $provider, $appId, $secret, $response, $consoleDB) { - /** @var Utopia\Response $response */ + /** @var Appwrite\Utopia\Response $response */ /** @var Appwrite\Database\Database $consoleDB */ $project = $consoleDB->getDocument($projectId); @@ -396,7 +396,7 @@ App::delete('/v1/projects/:projectId') ->param('projectId', '', new UID(), 'Project unique ID.') ->param('password', '', new UID(), 'Your user password for confirmation. Must be between 6 to 32 chars.') ->action(function ($projectId, $password, $response, $user, $consoleDB, $deletes) { - /** @var Utopia\Response $response */ + /** @var Appwrite\Utopia\Response $response */ /** @var Appwrite\Database\Document $user */ /** @var Appwrite\Database\Database $consoleDB */ /** @var Appwrite\Event\Event $deletes */ @@ -450,7 +450,7 @@ App::post('/v1/projects/:projectId/webhooks') ->param('httpUser', '', new Text(256), 'Webhook HTTP user. Max length: 256 chars.', true) ->param('httpPass', '', new Text(256), 'Webhook HTTP password. Max length: 256 chars.', true) ->action(function ($projectId, $name, $events, $url, $security, $httpUser, $httpPass, $response, $consoleDB) { - /** @var Utopia\Response $response */ + /** @var Appwrite\Utopia\Response $response */ /** @var Appwrite\Database\Database $consoleDB */ $project = $consoleDB->getDocument($projectId); @@ -501,7 +501,7 @@ App::get('/v1/projects/:projectId/webhooks') ->label('sdk.method', 'listWebhooks') ->param('projectId', '', new UID(), 'Project unique ID.') ->action(function ($projectId, $response, $consoleDB) { - /** @var Utopia\Response $response */ + /** @var Appwrite\Utopia\Response $response */ /** @var Appwrite\Database\Database $consoleDB */ $project = $consoleDB->getDocument($projectId); @@ -524,7 +524,7 @@ App::get('/v1/projects/:projectId/webhooks/:webhookId') ->param('projectId', null, new UID(), 'Project unique ID.') ->param('webhookId', null, new UID(), 'Webhook unique ID.') ->action(function ($projectId, $webhookId, $response, $consoleDB) { - /** @var Utopia\Response $response */ + /** @var Appwrite\Utopia\Response $response */ /** @var Appwrite\Database\Database $consoleDB */ $project = $consoleDB->getDocument($projectId); @@ -557,7 +557,7 @@ App::put('/v1/projects/:projectId/webhooks/:webhookId') ->param('httpUser', '', new Text(256), 'Webhook HTTP user. Max length: 256 chars.', true) ->param('httpPass', '', new Text(256), 'Webhook HTTP password. Max length: 256 chars.', true) ->action(function ($projectId, $webhookId, $name, $events, $url, $security, $httpUser, $httpPass, $response, $consoleDB) { - /** @var Utopia\Response $response */ + /** @var Appwrite\Utopia\Response $response */ /** @var Appwrite\Database\Database $consoleDB */ $project = $consoleDB->getDocument($projectId); @@ -599,7 +599,7 @@ App::delete('/v1/projects/:projectId/webhooks/:webhookId') ->param('projectId', null, new UID(), 'Project unique ID.') ->param('webhookId', null, new UID(), 'Webhook unique ID.') ->action(function ($projectId, $webhookId, $response, $consoleDB) { - /** @var Utopia\Response $response */ + /** @var Appwrite\Utopia\Response $response */ /** @var Appwrite\Database\Database $consoleDB */ $project = $consoleDB->getDocument($projectId); @@ -633,7 +633,7 @@ App::post('/v1/projects/:projectId/keys') ->param('name', null, new Text(128), 'Key name. Max length: 128 chars.') ->param('scopes', null, new ArrayList(new WhiteList(Config::getParam('scopes'), true)), 'Key scopes list.') ->action(function ($projectId, $name, $scopes, $response, $consoleDB) { - /** @var Utopia\Response $response */ + /** @var Appwrite\Utopia\Response $response */ /** @var Appwrite\Database\Database $consoleDB */ $project = $consoleDB->getDocument($projectId); @@ -679,7 +679,7 @@ App::get('/v1/projects/:projectId/keys') ->label('sdk.method', 'listKeys') ->param('projectId', null, new UID(), 'Project unique ID.') ->action(function ($projectId, $response, $consoleDB) { - /** @var Utopia\Response $response */ + /** @var Appwrite\Utopia\Response $response */ /** @var Appwrite\Database\Database $consoleDB */ $project = $consoleDB->getDocument($projectId); @@ -726,7 +726,7 @@ App::put('/v1/projects/:projectId/keys/:keyId') ->param('name', null, new Text(128), 'Key name. Max length: 128 chars.') ->param('scopes', null, new ArrayList(new WhiteList(Config::getParam('scopes'), true)), 'Key scopes list') ->action(function ($projectId, $keyId, $name, $scopes, $response, $consoleDB) { - /** @var Utopia\Response $response */ + /** @var Appwrite\Utopia\Response $response */ /** @var Appwrite\Database\Database $consoleDB */ $project = $consoleDB->getDocument($projectId); @@ -762,7 +762,7 @@ App::delete('/v1/projects/:projectId/keys/:keyId') ->param('projectId', null, new UID(), 'Project unique ID.') ->param('keyId', null, new UID(), 'Key unique ID.') ->action(function ($projectId, $keyId, $response, $consoleDB) { - /** @var Utopia\Response $response */ + /** @var Appwrite\Utopia\Response $response */ /** @var Appwrite\Database\Database $consoleDB */ $project = $consoleDB->getDocument($projectId); @@ -803,7 +803,7 @@ App::post('/v1/projects/:projectId/tasks') ->param('httpUser', '', new Text(256), 'Task HTTP user. Max length: 256 chars.', true) ->param('httpPass', '', new Text(256), 'Task HTTP password. Max length: 256 chars.', true) ->action(function ($projectId, $name, $status, $schedule, $security, $httpMethod, $httpUrl, $httpHeaders, $httpUser, $httpPass, $response, $consoleDB) { - /** @var Utopia\Response $response */ + /** @var Appwrite\Utopia\Response $response */ /** @var Appwrite\Database\Database $consoleDB */ $project = $consoleDB->getDocument($projectId); @@ -869,7 +869,7 @@ App::get('/v1/projects/:projectId/tasks') ->label('sdk.method', 'listTasks') ->param('projectId', '', new UID(), 'Project unique ID.') ->action(function ($projectId, $response, $consoleDB) { - /** @var Utopia\Response $response */ + /** @var Appwrite\Utopia\Response $response */ /** @var Appwrite\Database\Database $consoleDB */ $project = $consoleDB->getDocument($projectId); @@ -892,7 +892,7 @@ App::get('/v1/projects/:projectId/tasks/:taskId') ->param('projectId', null, new UID(), 'Project unique ID.') ->param('taskId', null, new UID(), 'Task unique ID.') ->action(function ($projectId, $taskId, $response, $consoleDB) { - /** @var Utopia\Response $response */ + /** @var Appwrite\Utopia\Response $response */ /** @var Appwrite\Database\Database $consoleDB */ $project = $consoleDB->getDocument($projectId); @@ -928,7 +928,7 @@ App::put('/v1/projects/:projectId/tasks/:taskId') ->param('httpUser', '', new Text(256), 'Task HTTP user. Max length: 256 chars.', true) ->param('httpPass', '', new Text(256), 'Task HTTP password. Max length: 256 chars.', true) ->action(function ($projectId, $taskId, $name, $status, $schedule, $security, $httpMethod, $httpUrl, $httpHeaders, $httpUser, $httpPass, $response, $consoleDB) { - /** @var Utopia\Response $response */ + /** @var Appwrite\Utopia\Response $response */ /** @var Appwrite\Database\Database $consoleDB */ $project = $consoleDB->getDocument($projectId); @@ -982,7 +982,7 @@ App::delete('/v1/projects/:projectId/tasks/:taskId') ->param('projectId', null, new UID(), 'Project unique ID.') ->param('taskId', null, new UID(), 'Task unique ID.') ->action(function ($projectId, $taskId, $response, $consoleDB) { - /** @var Utopia\Response $response */ + /** @var Appwrite\Utopia\Response $response */ /** @var Appwrite\Database\Database $consoleDB */ $project = $consoleDB->getDocument($projectId); @@ -1019,7 +1019,7 @@ App::post('/v1/projects/:projectId/platforms') ->param('store', '', new Text(256), 'App store or Google Play store ID. Max length: 256 chars.', true) ->param('hostname', '', new Text(256), 'Platform client hostname. Max length: 256 chars.', true) ->action(function ($projectId, $type, $name, $key, $store, $hostname, $response, $consoleDB) { - /** @var Utopia\Response $response */ + /** @var Appwrite\Utopia\Response $response */ /** @var Appwrite\Database\Database $consoleDB */ $project = $consoleDB->getDocument($projectId); @@ -1069,7 +1069,7 @@ App::get('/v1/projects/:projectId/platforms') ->label('sdk.method', 'listPlatforms') ->param('projectId', '', new UID(), 'Project unique ID.') ->action(function ($projectId, $response, $consoleDB) { - /** @var Utopia\Response $response */ + /** @var Appwrite\Utopia\Response $response */ /** @var Appwrite\Database\Database $consoleDB */ $project = $consoleDB->getDocument($projectId); @@ -1092,7 +1092,7 @@ App::get('/v1/projects/:projectId/platforms/:platformId') ->param('projectId', null, new UID(), 'Project unique ID.') ->param('platformId', null, new UID(), 'Platform unique ID.') ->action(function ($projectId, $platformId, $response, $consoleDB) { - /** @var Utopia\Response $response */ + /** @var Appwrite\Utopia\Response $response */ /** @var Appwrite\Database\Database $consoleDB */ $project = $consoleDB->getDocument($projectId); @@ -1123,7 +1123,7 @@ App::put('/v1/projects/:projectId/platforms/:platformId') ->param('store', '', new Text(256), 'App store or Google Play store ID. Max length: 256 chars.', true) ->param('hostname', '', new Text(256), 'Platform client URL. Max length: 256 chars.', true) ->action(function ($projectId, $platformId, $name, $key, $store, $hostname, $response, $consoleDB) { - /** @var Utopia\Response $response */ + /** @var Appwrite\Utopia\Response $response */ /** @var Appwrite\Database\Database $consoleDB */ $project = $consoleDB->getDocument($projectId); @@ -1162,7 +1162,7 @@ App::delete('/v1/projects/:projectId/platforms/:platformId') ->param('projectId', null, new UID(), 'Project unique ID.') ->param('platformId', null, new UID(), 'Platform unique ID.') ->action(function ($projectId, $platformId, $response, $consoleDB) { - /** @var Utopia\Response $response */ + /** @var Appwrite\Utopia\Response $response */ /** @var Appwrite\Database\Database $consoleDB */ $project = $consoleDB->getDocument($projectId); @@ -1195,7 +1195,7 @@ App::post('/v1/projects/:projectId/domains') ->param('projectId', null, new UID(), 'Project unique ID.') ->param('domain', null, new DomainValidator(), 'Domain name.') ->action(function ($projectId, $domain, $response, $consoleDB) { - /** @var Utopia\Response $response */ + /** @var Appwrite\Utopia\Response $response */ /** @var Appwrite\Database\Database $consoleDB */ $project = $consoleDB->getDocument($projectId); @@ -1258,7 +1258,7 @@ App::get('/v1/projects/:projectId/domains') ->label('sdk.method', 'listDomains') ->param('projectId', '', new UID(), 'Project unique ID.') ->action(function ($projectId, $response, $consoleDB) { - /** @var Utopia\Response $response */ + /** @var Appwrite\Utopia\Response $response */ /** @var Appwrite\Database\Database $consoleDB */ $project = $consoleDB->getDocument($projectId); @@ -1281,7 +1281,7 @@ App::get('/v1/projects/:projectId/domains/:domainId') ->param('projectId', null, new UID(), 'Project unique ID.') ->param('domainId', null, new UID(), 'Domain unique ID.') ->action(function ($projectId, $domainId, $response, $consoleDB) { - /** @var Utopia\Response $response */ + /** @var Appwrite\Utopia\Response $response */ /** @var Appwrite\Database\Database $consoleDB */ $project = $consoleDB->getDocument($projectId); @@ -1308,7 +1308,7 @@ App::patch('/v1/projects/:projectId/domains/:domainId/verification') ->param('projectId', null, new UID(), 'Project unique ID.') ->param('domainId', null, new UID(), 'Domain unique ID.') ->action(function ($projectId, $domainId, $response, $consoleDB) { - /** @var Utopia\Response $response */ + /** @var Appwrite\Utopia\Response $response */ /** @var Appwrite\Database\Database $consoleDB */ $project = $consoleDB->getDocument($projectId); @@ -1366,7 +1366,7 @@ App::delete('/v1/projects/:projectId/domains/:domainId') ->param('projectId', null, new UID(), 'Project unique ID.') ->param('domainId', null, new UID(), 'Domain unique ID.') ->action(function ($projectId, $domainId, $response, $consoleDB) { - /** @var Utopia\Response $response */ + /** @var Appwrite\Utopia\Response $response */ /** @var Appwrite\Database\Database $consoleDB */ $project = $consoleDB->getDocument($projectId); diff --git a/app/controllers/api/storage.php b/app/controllers/api/storage.php index 18cfb58f4..2add12c61 100644 --- a/app/controllers/api/storage.php +++ b/app/controllers/api/storage.php @@ -37,8 +37,8 @@ App::post('/v1/storage/files') ->param('read', [], new ArrayList(new Text(64)), 'An array of strings with read permissions. By default no user is granted with any read permissions. [learn more about permissions](/docs/permissions) and get a full list of available permissions.') ->param('write', [], new ArrayList(new Text(64)), 'An array of strings with write permissions. By default no user is granted with any write permissions. [learn more about permissions](/docs/permissions) and get a full list of available permissions.') ->action(function ($file, $read, $write, $request, $response, $user, $projectDB, $webhooks, $audits, $usage) { - /** @var Utopia\Request $request */ - /** @var Utopia\Response $response */ + /** @var Utopia\Swoole\Request $request */ + /** @var Appwrite\Utopia\Response $response */ /** @var Appwrite\Database\Document $user */ /** @var Appwrite\Database\Database $projectDB */ /** @var Appwrite\Event\Event $webhooks */ @@ -172,7 +172,7 @@ App::get('/v1/storage/files') ->param('offset', 0, new Range(0, 2000), 'Results offset. The default value is 0. Use this param to manage pagination.', true) ->param('orderType', 'ASC', new WhiteList(['ASC', 'DESC'], true), 'Order result by ASC or DESC order.', true) ->action(function ($search, $limit, $offset, $orderType, $response, $projectDB) { - /** @var Utopia\Response $response */ + /** @var Appwrite\Utopia\Response $response */ /** @var Appwrite\Database\Database $projectDB */ $results = $projectDB->getCollection([ @@ -204,7 +204,7 @@ App::get('/v1/storage/files/:fileId') ->label('sdk.description', '/docs/references/storage/get-file.md') ->param('fileId', '', new UID(), 'File unique ID.') ->action(function ($fileId, $response, $projectDB) { - /** @var Utopia\Response $response */ + /** @var Appwrite\Utopia\Response $response */ /** @var Appwrite\Database\Database $projectDB */ $file = $projectDB->getDocument($fileId); @@ -233,8 +233,8 @@ App::get('/v1/storage/files/:fileId/preview') ->param('background', '', new HexColor(), 'Preview image background color. Only works with transparent images (png). Use a valid HEX color, no # is needed for prefix.', true) ->param('output', '', new WhiteList(\array_keys(Config::getParam('storage-outputs')), true), 'Output format type (jpeg, jpg, png, gif and webp).', true) ->action(function ($fileId, $width, $height, $quality, $background, $output, $request, $response, $project, $projectDB) { - /** @var Utopia\Request $request */ - /** @var Utopia\Response $response */ + /** @var Utopia\Swoole\Request $request */ + /** @var Appwrite\Utopia\Response $response */ /** @var Appwrite\Database\Document $project */ /** @var Appwrite\Database\Database $projectDB */ @@ -354,7 +354,7 @@ App::get('/v1/storage/files/:fileId/download') ->label('sdk.methodType', 'location') ->param('fileId', '', new UID(), 'File unique ID.') ->action(function ($fileId, $response, $projectDB) { - /** @var Utopia\Response $response */ + /** @var Appwrite\Utopia\Response $response */ /** @var Appwrite\Database\Database $projectDB */ $file = $projectDB->getDocument($fileId); @@ -410,7 +410,7 @@ App::get('/v1/storage/files/:fileId/view') ->param('fileId', '', new UID(), 'File unique ID.') ->param('as', '', new WhiteList(['pdf', /*'html',*/ 'text'], true), 'Choose a file format to convert your file to. Currently you can only convert word and pdf files to pdf or txt. This option is currently experimental only, use at your own risk.', true) ->action(function ($fileId, $as, $response, $projectDB) { - /** @var Utopia\Response $response */ + /** @var Appwrite\Utopia\Response $response */ /** @var Appwrite\Database\Database $projectDB */ $file = $projectDB->getDocument($fileId); @@ -483,7 +483,7 @@ App::put('/v1/storage/files/:fileId') ->param('read', [], new ArrayList(new Text(64)), 'An array of strings with read permissions. By default no user is granted with any read permissions. [learn more about permissions](/docs/permissions) and get a full list of available permissions.') ->param('write', [], new ArrayList(new Text(64)), 'An array of strings with write permissions. By default no user is granted with any write permissions. [learn more about permissions](/docs/permissions) and get a full list of available permissions.') ->action(function ($fileId, $read, $write, $response, $projectDB, $webhooks, $audits) { - /** @var Utopia\Response $response */ + /** @var Appwrite\Utopia\Response $response */ /** @var Appwrite\Database\Database $projectDB */ /** @var Appwrite\Event\Event $webhooks */ /** @var Appwrite\Event\Event $audits */ @@ -529,7 +529,7 @@ App::delete('/v1/storage/files/:fileId') ->label('sdk.description', '/docs/references/storage/delete-file.md') ->param('fileId', '', new UID(), 'File unique ID.') ->action(function ($fileId, $response, $projectDB, $webhooks, $audits, $usage) { - /** @var Utopia\Response $response */ + /** @var Appwrite\Utopia\Response $response */ /** @var Appwrite\Database\Database $projectDB */ /** @var Appwrite\Event\Event $webhooks */ /** @var Appwrite\Event\Event $audits */ diff --git a/app/controllers/api/teams.php b/app/controllers/api/teams.php index ae9e44015..28f3aff49 100644 --- a/app/controllers/api/teams.php +++ b/app/controllers/api/teams.php @@ -30,7 +30,7 @@ App::post('/v1/teams') ->param('name', null, new Text(128), 'Team name. Max length: 128 chars.') ->param('roles', ['owner'], new ArrayList(new Key()), 'Array of strings. Use this param to set the roles in the team for the user who created it. The default role is **owner**. A role can be any string. Learn more about [roles and permissions](/docs/permissions). Max length for each role is 32 chars.', true) ->action(function ($name, $roles, $response, $user, $projectDB, $mode) { - /** @var Utopia\Response $response */ + /** @var Appwrite\Utopia\Response $response */ /** @var Appwrite\Database\Document $user */ /** @var Appwrite\Database\Database $projectDB */ /** @var bool $mode */ @@ -99,7 +99,7 @@ App::get('/v1/teams') ->param('offset', 0, new Range(0, 2000), 'Results offset. The default value is 0. Use this param to manage pagination.', true) ->param('orderType', 'ASC', new WhiteList(['ASC', 'DESC'], true), 'Order result by ASC or DESC order.', true) ->action(function ($search, $limit, $offset, $orderType, $response, $projectDB) { - /** @var Utopia\Response $response */ + /** @var Appwrite\Utopia\Response $response */ /** @var Appwrite\Database\Database $projectDB */ $results = $projectDB->getCollection([ @@ -127,7 +127,7 @@ App::get('/v1/teams/:teamId') ->label('sdk.description', '/docs/references/teams/get-team.md') ->param('teamId', '', new UID(), 'Team unique ID.') ->action(function ($teamId, $response, $projectDB) { - /** @var Utopia\Response $response */ + /** @var Appwrite\Utopia\Response $response */ /** @var Appwrite\Database\Database $projectDB */ $team = $projectDB->getDocument($teamId); @@ -150,7 +150,7 @@ App::put('/v1/teams/:teamId') ->param('teamId', '', new UID(), 'Team unique ID.') ->param('name', null, new Text(128), 'Team name. Max length: 128 chars.') ->action(function ($teamId, $name, $response, $projectDB) { - /** @var Utopia\Response $response */ + /** @var Appwrite\Utopia\Response $response */ /** @var Appwrite\Database\Database $projectDB */ $team = $projectDB->getDocument($teamId); @@ -180,7 +180,7 @@ App::delete('/v1/teams/:teamId') ->label('sdk.description', '/docs/references/teams/delete-team.md') ->param('teamId', '', new UID(), 'Team unique ID.') ->action(function ($teamId, $response, $projectDB) { - /** @var Utopia\Response $response */ + /** @var Appwrite\Utopia\Response $response */ /** @var Appwrite\Database\Database $projectDB */ $team = $projectDB->getDocument($teamId); @@ -225,7 +225,7 @@ App::post('/v1/teams/:teamId/memberships') ->param('roles', [], new ArrayList(new Key()), 'Array of strings. Use this param to set the user roles in the team. A role can be any string. Learn more about [roles and permissions](/docs/permissions). Max length for each role is 32 chars.') ->param('url', '', function ($clients) { return new Host($clients); }, 'URL to redirect the user back to your app from the invitation email. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https://cheatsheetseries.owasp.org/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.', false, ['clients']) // TODO add our own built-in confirm page ->action(function ($teamId, $email, $name, $roles, $url, $response, $project, $user, $projectDB, $locale, $audits, $mails, $mode) { - /** @var Utopia\Response $response */ + /** @var Appwrite\Utopia\Response $response */ /** @var Appwrite\Database\Document $project */ /** @var Appwrite\Database\Document $user */ /** @var Appwrite\Database\Database $projectDB */ @@ -422,7 +422,7 @@ App::get('/v1/teams/:teamId/memberships') ->param('offset', 0, new Range(0, 2000), 'Results offset. The default value is 0. Use this param to manage pagination.', true) ->param('orderType', 'ASC', new WhiteList(['ASC', 'DESC'], true), 'Order result by ASC or DESC order.', true) ->action(function ($teamId, $search, $limit, $offset, $orderType, $response, $projectDB) { - /** @var Utopia\Response $response */ + /** @var Appwrite\Utopia\Response $response */ /** @var Appwrite\Database\Database $projectDB */ $team = $projectDB->getDocument($teamId); @@ -480,8 +480,8 @@ App::patch('/v1/teams/:teamId/memberships/:inviteId/status') ->param('userId', '', new UID(), 'User unique ID.') ->param('secret', '', new Text(256), 'Secret key.') ->action(function ($teamId, $inviteId, $userId, $secret, $request, $response, $user, $projectDB, $audits) { - /** @var Utopia\Request $request */ - /** @var Utopia\Response $response */ + /** @var Utopia\Swoole\Request $request */ + /** @var Appwrite\Utopia\Response $response */ /** @var Appwrite\Database\Document $user */ /** @var Appwrite\Database\Database $projectDB */ /** @var Appwrite\Event\Event $audits */ @@ -594,7 +594,6 @@ App::patch('/v1/teams/:teamId/memberships/:inviteId/status') 'email' => $user->getAttribute('email'), 'name' => $user->getAttribute('name'), ])), Response::MODEL_MEMBERSHIP); - }, ['request', 'response', 'user', 'projectDB', 'audits']); App::delete('/v1/teams/:teamId/memberships/:inviteId') @@ -608,7 +607,7 @@ App::delete('/v1/teams/:teamId/memberships/:inviteId') ->param('teamId', '', new UID(), 'Team unique ID.') ->param('inviteId', '', new UID(), 'Invite unique ID.') ->action(function ($teamId, $inviteId, $response, $projectDB, $audits) { - /** @var Utopia\Response $response */ + /** @var Appwrite\Utopia\Response $response */ /** @var Appwrite\Database\Database $projectDB */ /** @var Appwrite\Event\Event $audits */ diff --git a/app/controllers/api/users.php b/app/controllers/api/users.php index 741d0c661..d83efeaca 100644 --- a/app/controllers/api/users.php +++ b/app/controllers/api/users.php @@ -30,7 +30,7 @@ App::post('/v1/users') ->param('password', '', new Password(), 'User password. Must be between 6 to 32 chars.') ->param('name', '', new Text(128), 'User name. Max length: 128 chars.', true) ->action(function ($email, $password, $name, $response, $projectDB) { - /** @var Utopia\Response $response */ + /** @var Appwrite\Utopia\Response $response */ /** @var Appwrite\Database\Database $projectDB */ $profile = $projectDB->getCollectionFirst([ // Get user by email address @@ -101,7 +101,7 @@ App::get('/v1/users') ->param('offset', 0, new Range(0, 2000), 'Results offset. The default value is 0. Use this param to manage pagination.', true) ->param('orderType', 'ASC', new WhiteList(['ASC', 'DESC'], true), 'Order result by ASC or DESC order.', true) ->action(function ($search, $limit, $offset, $orderType, $response, $projectDB) { - /** @var Utopia\Response $response */ + /** @var Appwrite\Utopia\Response $response */ /** @var Appwrite\Database\Database $projectDB */ $results = $projectDB->getCollection([ @@ -154,7 +154,7 @@ App::get('/v1/users/:userId') ->label('sdk.description', '/docs/references/users/get-user.md') ->param('userId', '', new UID(), 'User unique ID.') ->action(function ($userId, $response, $projectDB) { - /** @var Utopia\Response $response */ + /** @var Appwrite\Utopia\Response $response */ /** @var Appwrite\Database\Database $projectDB */ $user = $projectDB->getDocument($userId); @@ -197,7 +197,7 @@ App::get('/v1/users/:userId/prefs') ->label('sdk.description', '/docs/references/users/get-user-prefs.md') ->param('userId', '', new UID(), 'User unique ID.') ->action(function ($userId, $response, $projectDB) { - /** @var Utopia\Response $response */ + /** @var Appwrite\Utopia\Response $response */ /** @var Appwrite\Database\Database $projectDB */ $user = $projectDB->getDocument($userId); @@ -228,7 +228,7 @@ App::get('/v1/users/:userId/sessions') ->label('sdk.description', '/docs/references/users/get-user-sessions.md') ->param('userId', '', new UID(), 'User unique ID.') ->action(function ($userId, $response, $projectDB, $locale, $geodb) { - /** @var Utopia\Response $response */ + /** @var Appwrite\Utopia\Response $response */ /** @var Appwrite\Database\Database $projectDB */ /** @var Utopia\Locale\Locale $locale */ /** @var MaxMind\Db\Reader $geodb */ @@ -279,7 +279,6 @@ App::get('/v1/users/:userId/sessions') $sessions[$index]['geo']['isoCode'] = '--'; $sessions[$index]['geo']['country'] = $locale->getText('locale.country.unknown'); } - } catch (\Exception $e) { $sessions[$index]['geo']['isoCode'] = '--'; $sessions[$index]['geo']['country'] = $locale->getText('locale.country.unknown'); @@ -301,7 +300,7 @@ App::get('/v1/users/:userId/logs') ->label('sdk.description', '/docs/references/users/get-user-logs.md') ->param('userId', '', new UID(), 'User unique ID.') ->action(function ($userId, $response, $register, $project, $projectDB, $locale, $geodb) { - /** @var Utopia\Response $response */ + /** @var Appwrite\Utopia\Response $response */ /** @var Utopia\Registry\Registry $register */ /** @var Appwrite\Database\Document $project */ /** @var Appwrite\Database\Database $projectDB */ @@ -365,14 +364,13 @@ App::get('/v1/users/:userId/logs') try { $record = $geodb->get($log['ip']); - if($record){ + if ($record) { $output[$i]['geo']['isoCode'] = \strtolower($record['country']['iso_code']); $output[$i]['geo']['country'] = (isset($countries[$record['country']['iso_code']])) ? $countries[$record['country']['iso_code']] : $locale->getText('locale.country.unknown'); - } else{ + } else { $output[$i]['geo']['isoCode'] = '--'; $output[$i]['geo']['country'] = $locale->getText('locale.country.unknown'); } - } catch (\Exception $e) { $output[$i]['geo']['isoCode'] = '--'; $output[$i]['geo']['country'] = $locale->getText('locale.country.unknown'); @@ -393,7 +391,7 @@ App::patch('/v1/users/:userId/status') ->param('userId', '', new UID(), 'User unique ID.') ->param('status', '', new WhiteList([Auth::USER_STATUS_ACTIVATED, Auth::USER_STATUS_BLOCKED, Auth::USER_STATUS_UNACTIVATED], true), 'User Status code. To activate the user pass '.Auth::USER_STATUS_ACTIVATED.', to block the user pass '.Auth::USER_STATUS_BLOCKED.' and for disabling the user pass '.Auth::USER_STATUS_UNACTIVATED) ->action(function ($userId, $status, $response, $projectDB) { - /** @var Utopia\Response $response */ + /** @var Appwrite\Utopia\Response $response */ /** @var Appwrite\Database\Database $projectDB */ $user = $projectDB->getDocument($userId); @@ -443,7 +441,7 @@ App::patch('/v1/users/:userId/prefs') ->param('userId', '', new UID(), 'User unique ID.') ->param('prefs', '', new Assoc(), 'Prefs key-value JSON object.') ->action(function ($userId, $prefs, $response, $projectDB) { - /** @var Utopia\Response $response */ + /** @var Appwrite\Utopia\Response $response */ /** @var Appwrite\Database\Database $projectDB */ $user = $projectDB->getDocument($userId); @@ -487,7 +485,7 @@ App::delete('/v1/users/:userId/sessions/:sessionId') ->param('userId', '', new UID(), 'User unique ID.') ->param('sessionId', null, new UID(), 'User unique session ID.') ->action(function ($userId, $sessionId, $response, $projectDB) { - /** @var Utopia\Response $response */ + /** @var Appwrite\Utopia\Response $response */ /** @var Appwrite\Database\Database $projectDB */ $user = $projectDB->getDocument($userId); @@ -520,7 +518,7 @@ App::delete('/v1/users/:userId/sessions') ->label('abuse-limit', 100) ->param('userId', '', new UID(), 'User unique ID.') ->action(function ($userId, $response, $projectDB) { - /** @var Utopia\Response $response */ + /** @var Appwrite\Utopia\Response $response */ /** @var Appwrite\Database\Database $projectDB */ $user = $projectDB->getDocument($userId); @@ -551,7 +549,7 @@ App::delete('/v1/users/:userId') ->label('abuse-limit', 100) ->param('userId', '', function () {return new UID();}, 'User unique ID.') ->action(function ($userId, $response, $projectDB, $deletes) { - /** @var Utopia\Response $response */ + /** @var Appwrite\Utopia\Response $response */ /** @var Appwrite\Database\Database $projectDB */ /** @var Appwrite\Event\Event $deletes */ diff --git a/app/controllers/general.php b/app/controllers/general.php index 5aae62ac3..94926a936 100644 --- a/app/controllers/general.php +++ b/app/controllers/general.php @@ -3,7 +3,7 @@ require_once __DIR__.'/../init.php'; use Utopia\App; -use Appwrite\Swoole\Request; +use Utopia\Swoole\Request; use Appwrite\Utopia\Response; use Utopia\View; use Utopia\Exception; @@ -16,13 +16,14 @@ use Appwrite\Database\Validator\Authorization; use Appwrite\Network\Validator\Origin; use Appwrite\Storage\Device\Local; use Appwrite\Storage\Storage; +use Utopia\CLI\Console; Config::setParam('domainVerification', false); Config::setParam('cookieDomain', 'localhost'); Config::setParam('cookieSamesite', Response::COOKIE_SAMESITE_NONE); App::init(function ($utopia, $request, $response, $console, $project, $user, $locale, $webhooks, $audits, $usage, $clients) { - /** @var Appwrite\Swoole\Request $request */ + /** @var Utopia\Swoole\Request $request */ /** @var Appwrite\Utopia\Response $response */ /** @var Appwrite\Database\Document $console */ /** @var Appwrite\Database\Document $project */ @@ -44,7 +45,7 @@ App::init(function ($utopia, $request, $response, $console, $project, $user, $lo $route = $utopia->match($request); - if(!empty($route->getLabel('sdk.platform', [])) && empty($project->getId()) && ($route->getLabel('scope', '') !== 'public')) { + if (!empty($route->getLabel('sdk.platform', [])) && empty($project->getId()) && ($route->getLabel('scope', '') !== 'public')) { throw new Exception('Missing or unknown project ID', 400); } @@ -99,8 +100,8 @@ App::init(function ($utopia, $request, $response, $console, $project, $user, $lo * @see https://www.owasp.org/index.php/List_of_useful_HTTP_headers */ if (App::getEnv('_APP_OPTIONS_FORCE_HTTPS', 'disabled') === 'enabled') { // Force HTTPS - if($request->getProtocol() !== 'https') { - return $response->redirect('https://'.$request->getHostname().$request->getURI()); + if ($request->getProtocol() !== 'https') { + return $response->redirect('https://'.$request->getHostname().$request->getURI()); } $response->addHeader('Strict-Transport-Security', 'max-age='.(60 * 60 * 24 * 126)); // 126 days @@ -126,11 +127,11 @@ App::init(function ($utopia, $request, $response, $console, $project, $user, $lo $origin = $request->getOrigin($request->getReferer('')); $originValidator = new Origin(\array_merge($project->getAttribute('platforms', []), $console->getAttribute('platforms', []))); - if(!$originValidator->isValid($origin) + if (!$originValidator->isValid($origin) && \in_array($request->getMethod(), [Request::METHOD_POST, Request::METHOD_PUT, Request::METHOD_PATCH, Request::METHOD_DELETE]) && $route->getLabel('origin', false) !== '*' && empty($request->getHeader('x-appwrite-key', ''))) { - throw new Exception($originValidator->getDescription(), 403); + throw new Exception($originValidator->getDescription(), 403); } /* @@ -183,7 +184,10 @@ App::init(function ($utopia, $request, $response, $console, $project, $user, $lo Authorization::setDefaultStatus(false); // Cancel security segmentation for API keys. } - Authorization::setRole('user:'.$user->getId()); + if ($user->getId()) { + Authorization::setRole('user:'.$user->getId()); + } + Authorization::setRole('role:'.$role); \array_map(function ($node) { @@ -246,8 +250,8 @@ App::init(function ($utopia, $request, $response, $console, $project, $user, $lo App::shutdown(function ($utopia, $request, $response, $project, $webhooks, $audits, $usage, $deletes, $mode) { /** @var Utopia\App $utopia */ - /** @var Utopia\Request $request */ - /** @var Utopia\Response $response */ + /** @var Utopia\Swoole\Request $request */ + /** @var Appwrite\Utopia\Response $response */ /** @var Appwrite\Database\Document $project */ /** @var Appwrite\Event\Event $webhooks */ /** @var Appwrite\Event\Event $audits */ @@ -269,7 +273,7 @@ App::shutdown(function ($utopia, $request, $response, $project, $webhooks, $audi $route = $utopia->match($request); - if($project->getId() + if ($project->getId() && $mode !== APP_MODE_ADMIN && !empty($route->getLabel('sdk.namespace', null))) { // Don't calculate console usage and admin mode @@ -282,7 +286,7 @@ App::shutdown(function ($utopia, $request, $response, $project, $webhooks, $audi }, ['utopia', 'request', 'response', 'project', 'webhooks', 'audits', 'usage', 'deletes', 'mode']); App::options(function ($request, $response) { - /** @var Appwrite\Swoole\Request $request */ + /** @var Utopia\Swoole\Request $request */ /** @var Appwrite\Utopia\Response $response */ $origin = $request->getOrigin(); @@ -300,16 +304,21 @@ App::options(function ($request, $response) { App::error(function ($error, $utopia, $request, $response, $layout, $project) { /** @var Exception $error */ /** @var Utopia\App $utopia */ - /** @var Utopia\Request $request */ + /** @var Utopia\Swoole\Request $request */ /** @var Appwrite\Utopia\Response $response */ /** @var Utopia\View $layout */ /** @var Appwrite\Database\Document $project */ - if(php_sapi_name() === 'cli') { - var_dump(get_class($error)); - var_dump($error->getMessage()); - var_dump($error->getFile()); - var_dump($error->getLine()); + $route = $utopia->match($request); + $template = ($route) ? $route->getLabel('error', null) : null; + + if (php_sapi_name() === 'cli') { + Console::error('[Error] Method: '.$route->getMethod()); + Console::error('[Error] URL: '.$route->getURL()); + Console::error('[Error] Type: '.get_class($error)); + Console::error('[Error] Message: '.$error->getMessage()); + Console::error('[Error] File: '.$error->getFile()); + Console::error('[Error] Line: '.$error->getLine()); } $version = App::getEnv('_APP_VERSION', 'UNKNOWN'); @@ -352,10 +361,7 @@ App::error(function ($error, $utopia, $request, $response, $layout, $project) { ->addHeader('Pragma', 'no-cache') ->setStatusCode($code) ; - - $route = $utopia->match($request); - $template = ($route) ? $route->getLabel('error', null) : null; - + if ($template) { $comp = new View($template); @@ -379,7 +385,6 @@ App::error(function ($error, $utopia, $request, $response, $layout, $project) { $response->dynamic(new Document($output), $utopia->isDevelopment() ? Response::MODEL_ERROR_DEV : Response::MODEL_LOCALE); - }, ['error', 'utopia', 'request', 'response', 'layout', 'project']); App::get('/manifest.json') @@ -387,7 +392,7 @@ App::get('/manifest.json') ->label('scope', 'public') ->label('docs', false) ->action(function ($response) { - /** @var Utopia\Response $response */ + /** @var Appwrite\Utopia\Response $response */ $response->json([ 'name' => APP_NAME, @@ -413,7 +418,7 @@ App::get('/robots.txt') ->label('scope', 'public') ->label('docs', false) ->action(function ($response) { - $template = new View(__DIR__.'/views/general/robots.phtml'); + $template = new View(__DIR__.'/../views/general/robots.phtml'); $response->text($template->render(false)); }, ['response']); @@ -422,7 +427,7 @@ App::get('/humans.txt') ->label('scope', 'public') ->label('docs', false) ->action(function ($response) { - $template = new View(__DIR__.'/views/general/humans.phtml'); + $template = new View(__DIR__.'/../views/general/humans.phtml'); $response->text($template->render(false)); }, ['response']); @@ -435,25 +440,25 @@ App::get('/.well-known/acme-challenge') $path = \str_replace('/.well-known/acme-challenge/', '', $request->getParam('q')); $absolute = \realpath($base.'/.well-known/acme-challenge/'.$path); - if(!$base) { + if (!$base) { throw new Exception('Storage error', 500); } - if(!$absolute) { + if (!$absolute) { throw new Exception('Unknown path', 404); } - if(!\substr($absolute, 0, \strlen($base)) === $base) { + if (!\substr($absolute, 0, \strlen($base)) === $base) { throw new Exception('Invalid path', 401); } - if(!\file_exists($absolute)) { + if (!\file_exists($absolute)) { throw new Exception('Unknown path', 404); } $content = @\file_get_contents($absolute); - if(!$content) { + if (!$content) { throw new Exception('Failed to get contents', 500); } @@ -463,6 +468,6 @@ App::get('/.well-known/acme-challenge') include_once __DIR__ . '/shared/api.php'; include_once __DIR__ . '/shared/web.php'; -foreach(Config::getParam('services', []) as $service) { +foreach (Config::getParam('services', []) as $service) { include_once $service['controller']; } \ No newline at end of file diff --git a/app/controllers/shared/api.php b/app/controllers/shared/api.php index 3fdca7cf1..d64c46a2c 100644 --- a/app/controllers/shared/api.php +++ b/app/controllers/shared/api.php @@ -7,8 +7,8 @@ use Utopia\Abuse\Adapters\TimeLimit; App::init(function ($utopia, $request, $response, $project, $user, $register) { /** @var Utopia\App $utopia */ - /** @var Utopia\Request $request */ - /** @var Utopia\Response $response */ + /** @var Utopia\Swoole\Request $request */ + /** @var Appwrite\Utopia\Response $response */ /** @var Appwrite\Database\Document $project */ /** @var Appwrite\Database\Document $user */ /** @var Utopia\Registry\Registry $register */ diff --git a/app/controllers/shared/web.php b/app/controllers/shared/web.php index 3452cd353..42d2a18c5 100644 --- a/app/controllers/shared/web.php +++ b/app/controllers/shared/web.php @@ -5,8 +5,8 @@ use Utopia\Config\Config; App::init(function ($utopia, $request, $response, $layout) { /** @var Utopia\App $utopia */ - /** @var Utopia\Request $request */ - /** @var Utopia\Response $response */ + /** @var Utopia\Swoole\Request $request */ + /** @var Appwrite\Utopia\Response $response */ /** @var Utopia\View $layout */ /* AJAX check */ diff --git a/app/controllers/web/console.php b/app/controllers/web/console.php index 6c2f7ba44..a9b50b05b 100644 --- a/app/controllers/web/console.php +++ b/app/controllers/web/console.php @@ -19,7 +19,7 @@ App::init(function ($layout) { }, ['layout'], 'console'); App::shutdown(function ($response, $layout) { - /** @var Utopia\Response $response */ + /** @var Appwrite\Utopia\Response $response */ /** @var Utopia\View $layout */ $header = new View(__DIR__.'/../../views/console/comps/header.phtml'); @@ -213,7 +213,7 @@ App::get('/console/database/collection') ->label('scope', 'console') ->param('id', '', new UID(), 'Collection unique ID.') ->action(function ($id, $response, $layout, $projectDB) { - /** @var Utopia\Response $response */ + /** @var Appwrite\Utopia\Response $response */ /** @var Utopia\View $layout */ /** @var Appwrite\Database\Database $projectDB */ @@ -385,10 +385,9 @@ App::get('/console/version') try { $version = \json_decode(@\file_get_contents(App::getEnv('_APP_HOME', 'http://localhost').'/v1/health/version'), true); - if($version && isset($version['version'])) { + if ($version && isset($version['version'])) { return $response->json(['version' => $version['version']]); - } - else { + } else { throw new Exception('Failed to check for a newer version', 500); } } catch (\Throwable $th) { diff --git a/app/controllers/web/home.php b/app/controllers/web/home.php index a6c2491c0..7f7f41970 100644 --- a/app/controllers/web/home.php +++ b/app/controllers/web/home.php @@ -28,7 +28,7 @@ App::init(function ($layout) { }, ['layout'], 'home'); App::shutdown(function ($response, $layout) { - /** @var Utopia\Response $response */ + /** @var Appwrite\Utopia\Response $response */ /** @var Utopia\View $layout */ $response->html($layout->render()); @@ -39,7 +39,7 @@ App::get('/') ->label('permission', 'public') ->label('scope', 'home') ->action(function ($response) { - /** @var Utopia\Response $response */ + /** @var Appwrite\Utopia\Response $response */ $response->redirect('/auth/signin'); }, ['response']); @@ -189,8 +189,8 @@ App::get('/open-api-2.json') ->param('tests', 0, new Range(0, 1), 'Include only test services.', true) ->action(function ($platform, $extensions, $tests, $utopia, $request, $response) { /** @var Utopia\App $utopia */ - /** @var Utopia\Request $request */ - /** @var Utopia\Response $response */ + /** @var Utopia\Swoole\Request $request */ + /** @var Appwrite\Utopia\Response $response */ $security = [ APP_PLATFORM_CLIENT => ['Project' => []], diff --git a/app/http.php b/app/http.php index 89b3d1f9e..07e0fff45 100644 --- a/app/http.php +++ b/app/http.php @@ -2,9 +2,9 @@ require_once __DIR__.'/../vendor/autoload.php'; -use Appwrite\Swoole\Files; -use Appwrite\Swoole\Request; -use Appwrite\Swoole\Response; +use Utopia\Swoole\Files; +use Utopia\Swoole\Request; +use Appwrite\Utopia\Response; use Swoole\Process; use Swoole\Http\Server; use Swoole\Http\Request as SwooleRequest; diff --git a/app/init.php b/app/init.php index d24ca9d28..281bc743c 100644 --- a/app/init.php +++ b/app/init.php @@ -36,7 +36,7 @@ const APP_EMAIL_SECURITY = 'security@localhost.test'; // Default security email const APP_USERAGENT = APP_NAME.'-Server v%s. Please report abuse at %s'; const APP_MODE_ADMIN = 'admin'; const APP_PAGING_LIMIT = 12; -const APP_CACHE_BUSTER = 127; +const APP_CACHE_BUSTER = 138; const APP_VERSION_STABLE = '0.7.0'; const APP_STORAGE_UPLOADS = '/storage/uploads'; const APP_STORAGE_FUNCTIONS = '/storage/functions'; @@ -199,6 +199,9 @@ $register->set('smtp', function () { return $mail; }); +$register->set('geodb', function () { + return new Reader(__DIR__.'/db/DBIP/dbip-country-lite-2020-01.mmdb'); +}); $register->set('queue-webhooks', function () { return new Event('v1-webhooks', 'WebhooksV1'); }); @@ -361,8 +364,8 @@ App::setResource('clients', function($console, $project) { }, ['console', 'project']); App::setResource('user', function($mode, $project, $console, $request, $response, $projectDB, $consoleDB) { - /** @var Utopia\Request $request */ - /** @var Utopia\Response $response */ + /** @var Utopia\Swoole\Request $request */ + /** @var Appwrite\Utopia\Response $response */ /** @var Appwrite\Database\Document $project */ /** @var Appwrite\Database\Database $consoleDB */ /** @var Appwrite\Database\Database $projectDB */ @@ -423,7 +426,7 @@ App::setResource('user', function($mode, $project, $console, $request, $response }, ['mode', 'project', 'console', 'request', 'response', 'projectDB', 'consoleDB']); App::setResource('project', function($consoleDB, $request) { - /** @var Appwrite\Swoole\Request $request */ + /** @var Utopia\Swoole\Request $request */ /** @var Appwrite\Database\Database $consoleDB */ Authorization::disable(); @@ -444,7 +447,6 @@ App::setResource('consoleDB', function($register) { $consoleDB = new Database(); $consoleDB->setAdapter(new RedisAdapter(new MySQLAdapter($register), $register)); $consoleDB->setNamespace('app_console'); // Should be replaced with param if we want to have parent projects - $consoleDB->setMocks(Config::getParam('collections', [])); return $consoleDB; @@ -460,11 +462,11 @@ App::setResource('projectDB', function($register, $project) { }, ['register', 'project']); App::setResource('mode', function($request) { - /** @var Utopia\Request $request */ + /** @var Utopia\Swoole\Request $request */ return $request->getParam('mode', $request->getHeader('x-appwrite-mode', 'default')); }, ['request']); -App::setResource('geodb', function($request) { - /** @var Utopia\Request $request */ - return new Reader(__DIR__.'/db/DBIP/dbip-country-lite-2020-01.mmdb'); -}, ['request']); +App::setResource('geodb', function($register) { + /** @var Utopia\Registry\Registry $register */ + return $register->get('geodb'); +}, ['register']); diff --git a/app/tasks/doctor.php b/app/tasks/doctor.php index 0ab19f290..27479bb30 100644 --- a/app/tasks/doctor.php +++ b/app/tasks/doctor.php @@ -213,7 +213,6 @@ $cli Console::error('🔴 ' . $message); } } - try { Console::log(''); @@ -232,4 +231,4 @@ $cli } catch (\Throwable $th) { Console::error('Failed to check for a newer version'."\n"); } - }); \ No newline at end of file + }); diff --git a/app/tasks/migrate.php b/app/tasks/migrate.php index e44488ce0..abfd295d8 100644 --- a/app/tasks/migrate.php +++ b/app/tasks/migrate.php @@ -7,15 +7,18 @@ use Utopia\CLI\Console; use Appwrite\Database\Database; use Appwrite\Database\Document; use Appwrite\Database\Validator\Authorization; +use Appwrite\Database\Adapter\MySQL as MySQLAdapter; +use Appwrite\Database\Adapter\Redis as RedisAdapter; $callbacks = [ '0.4.0' => function() { Console::log('I got nothing to do.'); }, - '0.5.0' => function($project) use ($register, $projectDB, $requset) { + + '0.5.0' => function($project) use ($register, $projectDB) { $db = $register->get('db'); - Console::log('Migrating project: '.$project->getId()); + Console::log('Migrating project: '.$project->getAttribute('name').' ('.$project->getId().')'); // Update all documents $uid -> $id @@ -46,6 +49,7 @@ $callbacks = [ try { $new = $projectDB->overwriteDocument($document->getArrayCopy()); } catch (\Throwable $th) { + var_dump($document); Console::error('Failed to update document: '.$th->getMessage()); continue; } @@ -107,6 +111,14 @@ function fixDocument(Document $document) { } } + if($document->getAttribute('$collection') === Database::SYSTEM_COLLECTION_WEBHOOKS){ + $document->setAttribute('security', ($document->getAttribute('security')) ? true : false); + } + + if($document->getAttribute('$collection') === Database::SYSTEM_COLLECTION_TASKS){ + $document->setAttribute('security', ($document->getAttribute('security')) ? true : false); + } + if($document->getAttribute('$collection') === Database::SYSTEM_COLLECTION_USERS) { foreach($providers as $key => $provider) { if(!empty($document->getAttribute('oauth'.\ucfirst($key)))) { @@ -165,26 +177,38 @@ function fixDocument(Document $document) { $cli ->task('migrate') - ->action(function () use ($console, $projectDB, $consoleDB, $callbacks) { + ->action(function () use ($register, $callbacks) { Console::success('Starting Data Migration'); + $consoleDB = new Database(); + $consoleDB->setAdapter(new RedisAdapter(new MySQLAdapter($register), $register)); + $consoleDB->setNamespace('app_console'); // Main DB + $consoleDB->setMocks(Config::getParam('collections', [])); + + $projectDB = new Database(); + $projectDB->setAdapter(new RedisAdapter(new MySQLAdapter($register), $register)); + $projectDB->setMocks(Config::getParam('collections', [])); + + $console = $consoleDB->getDocument('console'); + Authorization::disable(); $limit = 30; $sum = 30; $offset = 0; $projects = [$console]; + $count = 0; while ($sum >= 30) { foreach($projects as $project) { + $projectDB->setNamespace('app_'.$project->getId()); try { - $callbacks['0.5.0']($project); + $callbacks['0.5.0']($project, $projectDB); } catch (\Throwable $th) { + throw $th; Console::error('Failed to update project ("'.$project->getId().'") version with error: '.$th->getMessage()); - $projectDB->setNamespace('app_console'); - $projectDB->deleteDocument($project->getId()); } } @@ -201,8 +225,9 @@ $cli $sum = \count($projects); $offset = $offset + $limit; + $count = $count + $sum; - Console::log('Fetched '.$sum.' projects...'); + Console::log('Fetched '.$count.'/'.$consoleDB->getSum().' projects...'); } Console::success('Data Migration Completed'); diff --git a/app/views/console/comps/header.phtml b/app/views/console/comps/header.phtml index ead2423b2..5aeb0c0bd 100644 --- a/app/views/console/comps/header.phtml +++ b/app/views/console/comps/header.phtml @@ -183,24 +183,6 @@ data-name="projects" data-scope="console"> -
- -
- -
-
Appwrite Light Logo diff --git a/app/views/console/database/collection.phtml b/app/views/console/database/collection.phtml index fc9f99351..faab1fb44 100644 --- a/app/views/console/database/collection.phtml +++ b/app/views/console/database/collection.phtml @@ -501,7 +501,7 @@ $maxCells = 10;