diff --git a/app/config/locale/translations/ml.json b/app/config/locale/translations/ml.json index dce555c1cb..4997d0dfcd 100644 --- a/app/config/locale/translations/ml.json +++ b/app/config/locale/translations/ml.json @@ -18,12 +18,12 @@ "emails.recovery.subject": "രഹസ്യവാക്ക് പുനക്രമീകരണം", "emails.recovery.hello": "നമസ്കാരം {{name}}", "emails.recovery.body": "നിങ്ങളുടെ {{Project}} രഹസ്യവാക്ക് പുനക്രമീകരിക്കുന്നതിന് ഈ ലിങ്ക് പിന്തുടരുക.", - "emails.recovery.footer": "നിങ്ങളുടെ പാസ്‌വേഡ് പുനക്രമീകരിക്കാന്‍ നിങ്ങൾ ആവശ്യപ്പെട്ടില്ലെങ്കിൽ, ഈ സന്ദേശം അവഗണിക്കാവുന്നതാണ്.", + "emails.recovery.footer": "നിങ്ങളുടെ രഹസ്യവാക്ക് പുനക്രമീകരിക്കാന്‍ നിങ്ങൾ ആവശ്യപ്പെട്ടില്ലെങ്കിൽ, ഈ സന്ദേശം അവഗണിക്കാവുന്നതാണ്.", "emails.recovery.thanks": "നന്ദി", "emails.recovery.signature": "{{project}} ടീം", "emails.invitation.subject": "%s -ലെ %s ടീമിലേക്കുള്ള ക്ഷണം", "emails.invitation.hello": "നമസ്കാരം", - "emails.invitation.body": "നിങ്ങളെ {{project}} -ലെ {{team}} ടീമിലെ അംഗമാകുവാന്‍ ക്ഷണിക്കാൻ {{owner}} ആഗ്രഹിക്കുതിനാലാണ് ഈ മെയിൽ നിങ്ങൾക്ക് അയക്കുന്നത്.", + "emails.invitation.body": "നിങ്ങളെ {{project}} -ലെ {{team}} ടീമിലെ അംഗമാകുവാന്‍ ക്ഷണിക്കാൻ {{owner}} ആഗ്രഹിക്കുന്നതിനാലാണ് ഈ മെയിൽ നിങ്ങൾക്ക് അയക്കുന്നത്.", "emails.invitation.footer": "നിങ്ങൾക്ക് താൽപ്പര്യമില്ലെങ്കിൽ, ഈ സന്ദേശം അവഗണിക്കാവുന്നതാണ്.", "emails.invitation.thanks": "നന്ദി", "emails.invitation.signature": "{{project}} ടീം", @@ -229,4 +229,4 @@ "continents.na": "വടക്കേ അമേരിക്ക", "continents.oc": "ഓഷ്യാനിയ", "continents.sa": "തെക്കേ അമേരിക്ക" -} \ No newline at end of file +} diff --git a/app/controllers/api/users.php b/app/controllers/api/users.php index 2b20947fd9..dda19c5738 100644 --- a/app/controllers/api/users.php +++ b/app/controllers/api/users.php @@ -3,12 +3,17 @@ use Appwrite\Auth\Auth; use Appwrite\Auth\Validator\Password; use Appwrite\Detector\Detector; +use Appwrite\Event\Delete; +use Appwrite\Event\Event; +use Appwrite\Event\Audit as EventAudit; use Appwrite\Network\Validator\Email; +use Appwrite\Stats\Stats; use Appwrite\Utopia\Database\Validator\CustomId; use Appwrite\Utopia\Response; use Utopia\App; use Utopia\Audit\Audit; use Utopia\Config\Config; +use Utopia\Locale\Locale; use Appwrite\Extend\Exception; use Utopia\Database\Document; use Utopia\Database\Exception\Duplicate; @@ -21,6 +26,7 @@ use Utopia\Validator\WhiteList; use Utopia\Validator\Text; use Utopia\Validator\Range; use Utopia\Validator\Boolean; +use MaxMind\Db\Reader; App::post('/v1/users') ->desc('Create User') @@ -42,11 +48,7 @@ App::post('/v1/users') ->inject('dbForProject') ->inject('usage') ->inject('events') - ->action(function ($userId, $email, $password, $name, $response, $dbForProject, $usage, $events) { - /** @var Appwrite\Utopia\Response $response */ - /** @var Utopia\Database\Database $dbForProject */ - /** @var Appwrite\Stats\Stats $usage */ - /** @var Appwrite\Event\Event $events */ + ->action(function (string $userId, string $email, string $password, string $name, Response $response, Database $dbForProject, Stats $usage, Event $events) { $email = \strtolower($email); @@ -106,10 +108,7 @@ App::get('/v1/users') ->inject('response') ->inject('dbForProject') ->inject('usage') - ->action(function ($search, $limit, $offset, $cursor, $cursorDirection, $orderType, $response, $dbForProject, $usage) { - /** @var Appwrite\Utopia\Response $response */ - /** @var Utopia\Database\Database $dbForProject */ - /** @var Appwrite\Stats\Stats $usage */ + ->action(function (string $search, int $limit, int $offset, string $cursor, string $cursorDirection, string $orderType, Response $response, Database $dbForProject, Stats $usage) { if (!empty($cursor)) { $cursorUser = $dbForProject->getDocument('users', $cursor); @@ -150,10 +149,7 @@ App::get('/v1/users/:userId') ->inject('response') ->inject('dbForProject') ->inject('usage') - ->action(function ($userId, $response, $dbForProject, $usage) { - /** @var Appwrite\Utopia\Response $response */ - /** @var Utopia\Database\Database $dbForProject */ - /** @var Appwrite\Stats\Stats $usage */ + ->action(function (string $userId, Response $response, Database $dbForProject, Stats $usage) { $user = $dbForProject->getDocument('users', $userId); @@ -182,10 +178,7 @@ App::get('/v1/users/:userId/prefs') ->inject('response') ->inject('dbForProject') ->inject('usage') - ->action(function ($userId, $response, $dbForProject, $usage) { - /** @var Appwrite\Utopia\Response $response */ - /** @var Utopia\Database\Database $dbForProject */ - /** @var Appwrite\Stats\Stats $usage */ + ->action(function (string $userId, Response $response, Database $dbForProject, Stats $usage) { $user = $dbForProject->getDocument('users', $userId); @@ -217,11 +210,7 @@ App::get('/v1/users/:userId/sessions') ->inject('dbForProject') ->inject('locale') ->inject('usage') - ->action(function ($userId, $response, $dbForProject, $locale, $usage) { - /** @var Appwrite\Utopia\Response $response */ - /** @var Utopia\Database\Database $dbForProject */ - /** @var Utopia\Locale\Locale $locale */ - /** @var Appwrite\Stats\Stats $usage */ + ->action(function (string $userId, Response $response, Database $dbForProject, Locale $locale, Stats $usage) { $user = $dbForProject->getDocument('users', $userId); @@ -264,10 +253,7 @@ App::get('/v1/users/:userId/memberships') ->param('userId', '', new UID(), 'User ID.') ->inject('response') ->inject('dbForProject') - ->action(function ($userId, $response, $dbForProject) { - /** @var string $userId */ - /** @var Appwrite\Utopia\Response $response */ - /** @var Utopia\Database\Database $dbForProject */ + ->action(function (string $userId, Response $response, Database $dbForProject) { $user = $dbForProject->getDocument('users', $userId); @@ -311,13 +297,7 @@ App::get('/v1/users/:userId/logs') ->inject('locale') ->inject('geodb') ->inject('usage') - ->action(function ($userId, $limit, $offset, $response, $dbForProject, $locale, $geodb, $usage) { - /** @var Appwrite\Utopia\Response $response */ - /** @var Utopia\Database\Document $project */ - /** @var Utopia\Database\Database $dbForProject */ - /** @var Utopia\Locale\Locale $locale */ - /** @var MaxMind\Db\Reader $geodb */ - /** @var Appwrite\Stats\Stats $usage */ + ->action(function (string $userId, int $limit, int $offset, Response $response, Database $dbForProject, Locale $locale, Reader $geodb, Stats $usage) { $user = $dbForProject->getDocument('users', $userId); @@ -398,11 +378,7 @@ App::patch('/v1/users/:userId/status') ->inject('dbForProject') ->inject('usage') ->inject('events') - ->action(function ($userId, $status, $response, $dbForProject, $usage, $events) { - /** @var Appwrite\Utopia\Response $response */ - /** @var Utopia\Database\Database $dbForProject */ - /** @var Appwrite\Stats\Stats $usage */ - /** @var Appwrite\Event\Event $events */ + ->action(function (string $userId, bool $status, Response $response, Database $dbForProject, Stats $usage, Event $events) { $user = $dbForProject->getDocument('users', $userId); @@ -441,11 +417,7 @@ App::patch('/v1/users/:userId/verification') ->inject('dbForProject') ->inject('usage') ->inject('events') - ->action(function ($userId, $emailVerification, $response, $dbForProject, $usage, $events) { - /** @var Appwrite\Utopia\Response $response */ - /** @var Utopia\Database\Database $dbForProject */ - /** @var Appwrite\Stats\Stats $usage */ - /** @var Appwrite\Event\Event $events */ + ->action(function (string $userId, bool $emailVerification, Response $response, Database $dbForProject, Stats $usage, Event $events) { $user = $dbForProject->getDocument('users', $userId); @@ -484,11 +456,7 @@ App::patch('/v1/users/:userId/name') ->inject('dbForProject') ->inject('audits') ->inject('events') - ->action(function ($userId, $name, $response, $dbForProject, $audits, $events) { - /** @var Appwrite\Utopia\Response $response */ - /** @var Utopia\Database\Database $dbForProject */ - /** @var Appwrite\Event\Audit $audits */ - /** @var Appwrite\Event\Event $events */ + ->action(function (string $userId, string $name, Response $response, Database $dbForProject, EventAudit $audits, Event $events) { $user = $dbForProject->getDocument('users', $userId); @@ -532,11 +500,7 @@ App::patch('/v1/users/:userId/password') ->inject('dbForProject') ->inject('audits') ->inject('events') - ->action(function ($userId, $password, $response, $dbForProject, $audits, $events) { - /** @var Appwrite\Utopia\Response $response */ - /** @var Utopia\Database\Database $dbForProject */ - /** @var Appwrite\Event\Audit $audits */ - /** @var Appwrite\Event\Event $events */ + ->action(function (string $userId, string $password, Response $response, Database $dbForProject, EventAudit $audits, Event $events) { $user = $dbForProject->getDocument('users', $userId); @@ -579,11 +543,7 @@ App::patch('/v1/users/:userId/email') ->inject('dbForProject') ->inject('audits') ->inject('events') - ->action(function ($userId, $email, $response, $dbForProject, $audits, $events) { - /** @var Appwrite\Utopia\Response $response */ - /** @var Utopia\Database\Database $dbForProject */ - /** @var Appwrite\Event\Audit $audits */ - /** @var Appwrite\Event\Event $events */ + ->action(function (string $userId, string $email, Response $response, Database $dbForProject, EventAudit $audits, Event $events) { $user = $dbForProject->getDocument('users', $userId); @@ -639,11 +599,7 @@ App::patch('/v1/users/:userId/prefs') ->inject('dbForProject') ->inject('usage') ->inject('events') - ->action(function ($userId, $prefs, $response, $dbForProject, $usage, $events) { - /** @var Appwrite\Utopia\Response $response */ - /** @var Utopia\Database\Database $dbForProject */ - /** @var Appwrite\Stats\Stats $usage */ - /** @var Appwrite\Event\Event $events */ + ->action(function (string $userId, array $prefs, Response $response, Database $dbForProject, Stats $usage, Event $events) { $user = $dbForProject->getDocument('users', $userId); @@ -681,11 +637,7 @@ App::delete('/v1/users/:userId/sessions/:sessionId') ->inject('dbForProject') ->inject('events') ->inject('usage') - ->action(function ($userId, $sessionId, $response, $dbForProject, $events, $usage) { - /** @var Appwrite\Utopia\Response $response */ - /** @var Utopia\Database\Database $dbForProject */ - /** @var Appwrite\Event\Event $events */ - /** @var Appwrite\Stats\Stats $usage */ + ->action(function (string $userId, string $sessionId, Response $response, Database $dbForProject, Event $events, Stats $usage) { $user = $dbForProject->getDocument('users', $userId); @@ -732,11 +684,7 @@ App::delete('/v1/users/:userId/sessions') ->inject('dbForProject') ->inject('events') ->inject('usage') - ->action(function ($userId, $response, $dbForProject, $events, $usage) { - /** @var Appwrite\Utopia\Response $response */ - /** @var Utopia\Database\Database $dbForProject */ - /** @var Appwrite\Event\Event $events */ - /** @var Appwrite\Stats\Stats $usage */ + ->action(function (string $userId, Response $response, Database $dbForProject, Event $events, Stats $usage) { $user = $dbForProject->getDocument('users', $userId); @@ -783,12 +731,7 @@ App::delete('/v1/users/:userId') ->inject('events') ->inject('deletes') ->inject('usage') - ->action(function ($userId, $response, $dbForProject, $events, $deletes, $usage) { - /** @var Appwrite\Utopia\Response $response */ - /** @var Utopia\Database\Database $dbForProject */ - /** @var Appwrite\Event\Event $events */ - /** @var Appwrite\Event\Delete $deletes */ - /** @var Appwrite\Stats\Stats $usage */ + ->action(function (string $userId, Response $response, Database $dbForProject, Event $events, Delete $deletes, Stats $usage) { $user = $dbForProject->getDocument('users', $userId); @@ -833,9 +776,7 @@ App::get('/v1/users/usage') ->inject('response') ->inject('dbForProject') ->inject('register') - ->action(function ($range, $provider, $response, $dbForProject) { - /** @var Appwrite\Utopia\Response $response */ - /** @var Utopia\Database\Database $dbForProject */ + ->action(function (string $range, string $provider, Response $response, Database $dbForProject) { $usage = []; if (App::getEnv('_APP_USAGE_STATS', 'enabled') == 'enabled') { diff --git a/app/controllers/general.php b/app/controllers/general.php index 6076490465..1e95072443 100644 --- a/app/controllers/general.php +++ b/app/controllers/general.php @@ -3,13 +3,16 @@ require_once __DIR__ . '/../init.php'; use Utopia\App; +use Utopia\Locale\Locale; +use Utopia\Logger\Logger; use Utopia\Logger\Log; use Utopia\Logger\Log\User; use Appwrite\Utopia\Request; use Appwrite\Utopia\Response; use Appwrite\Utopia\View; -use Appwrite\Extend\Exception; +use Appwrite\Extend\Exception as AppwriteException; use Utopia\Config\Config; +use Utopia\Exception as UtopiaException; use Utopia\Domains\Domain; use Appwrite\Auth\Auth; use Appwrite\Event\Certificate; @@ -18,6 +21,7 @@ use Appwrite\Utopia\Response\Filters\V11 as ResponseV11; use Appwrite\Utopia\Response\Filters\V12 as ResponseV12; use Appwrite\Utopia\Response\Filters\V13 as ResponseV13; use Utopia\CLI\Console; +use Utopia\Database\Database; use Utopia\Database\Document; use Utopia\Database\Query; use Utopia\Database\Validator\Authorization; @@ -31,16 +35,7 @@ Config::setParam('domainVerification', false); Config::setParam('cookieDomain', 'localhost'); Config::setParam('cookieSamesite', Response::COOKIE_SAMESITE_NONE); -App::init(function ($utopia, $request, $response, $console, $project, $dbForConsole, $user, $locale, $clients) { - /** @var Utopia\App $utopia */ - /** @var Appwrite\Utopia\Request $request */ - /** @var Appwrite\Utopia\Response $response */ - /** @var Utopia\Database\Document $console */ - /** @var Utopia\Database\Document $project */ - /** @var Utopia\Database\Database $dbForConsole */ - /** @var Utopia\Database\Document $user */ - /** @var Utopia\Locale\Locale $locale */ - /** @var array $clients */ +App::init(function (App $utopia, Request $request, Response $response, Document $console, Document $project, Database $dbForConsole, Document $user, Locale $locale, array $clients) { /* * Request format @@ -127,11 +122,11 @@ App::init(function ($utopia, $request, $response, $console, $project, $dbForCons } if ($project->isEmpty()) { - throw new Exception('Project not found', 404, Exception::PROJECT_NOT_FOUND); + throw new AppwriteException('Project not found', 404, AppwriteException::PROJECT_NOT_FOUND); } if (!empty($route->getLabel('sdk.auth', [])) && $project->isEmpty() && ($route->getLabel('scope', '') !== 'public')) { - throw new Exception('Missing or unknown project ID', 400, Exception::PROJECT_UNKNOWN); + throw new AppwriteException('Missing or unknown project ID', 400, AppwriteException::PROJECT_UNKNOWN); } $referrer = $request->getReferer(); @@ -198,8 +193,8 @@ App::init(function ($utopia, $request, $response, $console, $project, $dbForCons */ if (App::getEnv('_APP_OPTIONS_FORCE_HTTPS', 'disabled') === 'enabled') { // Force HTTPS if ($request->getProtocol() !== 'https') { - if ($request->getMethod() !== Request::METHOD_GET) { - throw new Exception('Method unsupported over HTTP.', 500, Exception::GENERAL_PROTOCOL_UNSUPPORTED); + if($request->getMethod() !== Request::METHOD_GET) { + throw new AppwriteException('Method unsupported over HTTP.', 500, AppwriteException::GENERAL_PROTOCOL_UNSUPPORTED); } return $response->redirect('https://' . $request->getHostname() . $request->getURI()); @@ -230,9 +225,8 @@ App::init(function ($utopia, $request, $response, $console, $project, $dbForCons !$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, Exception::GENERAL_UNKNOWN_ORIGIN); + && empty($request->getHeader('x-appwrite-key', ''))) { + throw new AppwriteException($originValidator->getDescription(), 403, AppwriteException::GENERAL_UNKNOWN_ORIGIN); } /* @@ -296,37 +290,33 @@ App::init(function ($utopia, $request, $response, $console, $project, $dbForCons Authorization::setRole($authRole); } - $service = $route->getLabel('sdk.namespace', ''); - if (!empty($service)) { - if ( - array_key_exists($service, $project->getAttribute('services', [])) - && !$project->getAttribute('services', [])[$service] - && !Auth::isPrivilegedUser(Authorization::getRoles()) - ) { - throw new Exception('Service is disabled', 503, Exception::GENERAL_SERVICE_DISABLED); + $service = $route->getLabel('sdk.namespace',''); + if(!empty($service)) { + if(array_key_exists($service, $project->getAttribute('services',[])) + && !$project->getAttribute('services',[])[$service] + && !Auth::isPrivilegedUser(Authorization::getRoles())) { + throw new AppwriteException('Service is disabled', 503, AppwriteException::GENERAL_SERVICE_DISABLED); } } if (!\in_array($scope, $scopes)) { if ($project->isEmpty()) { // Check if permission is denied because project is missing - throw new Exception('Project not found', 404, Exception::PROJECT_NOT_FOUND); + throw new AppwriteException('Project not found', 404, AppwriteException::PROJECT_NOT_FOUND); } - throw new Exception($user->getAttribute('email', 'User') . ' (role: ' . \strtolower($roles[$role]['label']) . ') missing scope (' . $scope . ')', 401, Exception::GENERAL_UNAUTHORIZED_SCOPE); + throw new AppwriteException($user->getAttribute('email', 'User').' (role: '.\strtolower($roles[$role]['label']).') missing scope ('.$scope.')', 401, AppwriteException::GENERAL_UNAUTHORIZED_SCOPE); } if (false === $user->getAttribute('status')) { // Account is blocked - throw new Exception('Invalid credentials. User is blocked', 401, Exception::USER_BLOCKED); + throw new AppwriteException('Invalid credentials. User is blocked', 401, AppwriteException::USER_BLOCKED); } if ($user->getAttribute('reset')) { - throw new Exception('Password reset is required', 412, Exception::USER_PASSWORD_RESET_REQUIRED); + throw new AppwriteException('Password reset is required', 412, AppwriteException::USER_PASSWORD_RESET_REQUIRED); } }, ['utopia', 'request', 'response', 'console', 'project', 'dbForConsole', 'user', 'locale', 'clients']); -App::options(function ($request, $response) { - /** @var Appwrite\Utopia\Request $request */ - /** @var Appwrite\Utopia\Response $response */ +App::options(function (Request $request, Response $response) { $origin = $request->getOrigin(); @@ -340,15 +330,7 @@ App::options(function ($request, $response) { ->noContent(); }, ['request', 'response']); -App::error(function ($error, $utopia, $request, $response, $layout, $project, $logger, $loggerBreadcrumbs) { - /** @var Exception $error */ - /** @var Utopia\App $utopia */ - /** @var Appwrite\Utopia\Request $request */ - /** @var Appwrite\Utopia\Response $response */ - /** @var Appwrite\Utopia\View $layout */ - /** @var Utopia\Database\Document $project */ - /** @var Utopia\Logger\Logger $logger */ - /** @var Utopia\Logger\Log\Breadcrumb[] $loggerBreadcrumbs */ +App::error(function (AppwriteException|UtopiaException $error, App $utopia, Request $request, Response $response, View $layout, Document $project, ?Logger $logger, array $loggerBreadcrumbs) { $version = App::getEnv('_APP_VERSION', 'UNKNOWN'); $route = $utopia->match($request); @@ -430,20 +412,20 @@ App::error(function ($error, $utopia, $request, $response, $layout, $project, $l /** Handle Utopia Errors */ if ($error instanceof Utopia\Exception) { - $error = new Exception($message, $code, Exception::GENERAL_UNKNOWN, $error); - switch ($code) { + $error = new AppwriteException($message, $code, AppwriteException::GENERAL_UNKNOWN, $error); + switch($code) { case 400: - $error->setType(Exception::GENERAL_ARGUMENT_INVALID); + $error->setType(AppwriteException::GENERAL_ARGUMENT_INVALID); break; case 404: - $error->setType(Exception::GENERAL_ROUTE_NOT_FOUND); + $error->setType(AppwriteException::GENERAL_ROUTE_NOT_FOUND); break; } } /** Wrap all exceptions inside Appwrite\Extend\Exception */ - if (!($error instanceof Exception)) { - $error = new Exception($message, $code, Exception::GENERAL_UNKNOWN, $error); + if (!($error instanceof AppwriteException)) { + $error = new AppwriteException($message, $code, AppwriteException::GENERAL_UNKNOWN, $error); } switch ($code) { // Don't show 500 errors! @@ -526,8 +508,7 @@ App::get('/manifest.json') ->label('scope', 'public') ->label('docs', false) ->inject('response') - ->action(function ($response) { - /** @var Appwrite\Utopia\Response $response */ + ->action(function (Response $response) { $response->json([ 'name' => APP_NAME, @@ -553,8 +534,8 @@ App::get('/robots.txt') ->label('scope', 'public') ->label('docs', false) ->inject('response') - ->action(function ($response) { - $template = new View(__DIR__ . '/../views/general/robots.phtml'); + ->action(function (Response $response) { + $template = new View(__DIR__.'/../views/general/robots.phtml'); $response->text($template->render(false)); }); @@ -563,8 +544,8 @@ App::get('/humans.txt') ->label('scope', 'public') ->label('docs', false) ->inject('response') - ->action(function ($response) { - $template = new View(__DIR__ . '/../views/general/humans.phtml'); + ->action(function (Response $response) { + $template = new View(__DIR__.'/../views/general/humans.phtml'); $response->text($template->render(false)); }); @@ -574,7 +555,7 @@ App::get('/.well-known/acme-challenge') ->label('docs', false) ->inject('request') ->inject('response') - ->action(function ($request, $response) { + ->action(function (Request $request, Response $response) { $uriChunks = \explode('/', $request->getURI()); $token = $uriChunks[\count($uriChunks) - 1]; @@ -587,32 +568,32 @@ App::get('/.well-known/acme-challenge') ]); if (!$validator->isValid($token) || \count($uriChunks) !== 4) { - throw new Exception('Invalid challenge token.', 400); + throw new AppwriteException('Invalid challenge token.', 400); } $base = \realpath(APP_STORAGE_CERTIFICATES); $absolute = \realpath($base . '/.well-known/acme-challenge/' . $token); if (!$base) { - throw new Exception('Storage error', 500, Exception::GENERAL_SERVER_ERROR); + throw new AppwriteException('Storage error', 500, AppwriteException::GENERAL_SERVER_ERROR); } if (!$absolute) { - throw new Exception('Unknown path', 404); + throw new AppwriteException('Unknown path', 404); } if (!\substr($absolute, 0, \strlen($base)) === $base) { - throw new Exception('Invalid path', 401); + throw new AppwriteException('Invalid path', 401); } if (!\file_exists($absolute)) { - throw new Exception('Unknown path', 404); + throw new AppwriteException('Unknown path', 404); } $content = @\file_get_contents($absolute); if (!$content) { - throw new Exception('Failed to get contents', 500, Exception::GENERAL_SERVER_ERROR); + throw new AppwriteException('Failed to get contents', 500, AppwriteException::GENERAL_SERVER_ERROR); } $response->text($content); diff --git a/app/controllers/mock.php b/app/controllers/mock.php index d29c7b3c72..bc646f1241 100644 --- a/app/controllers/mock.php +++ b/app/controllers/mock.php @@ -5,6 +5,7 @@ global $utopia, $request, $response; use Appwrite\Extend\Exception; use Utopia\Database\Document; use Appwrite\Network\Validator\Host; +use Appwrite\Utopia\Request; use Appwrite\Utopia\Response; use Utopia\App; use Utopia\Validator\ArrayList; @@ -206,9 +207,8 @@ App::get('/v1/mock/tests/general/download') ->label('sdk.response.code', Response::STATUS_CODE_OK) ->label('sdk.mock', true) ->inject('response') - ->action(function ($response) { - /** @var Appwrite\Utopia\Request $request */ - + ->action(function (Response $response) { + $response ->setContentType('text/plain') ->addHeader('Content-Disposition', 'attachment; filename="test.txt"') @@ -237,10 +237,8 @@ App::post('/v1/mock/tests/general/upload') ->param('file', [], new File(), 'Sample file param', false) ->inject('request') ->inject('response') - ->action(function ($x, $y, $z, $file, $request, $response) { - /** @var Appwrite\Utopia\Request $request */ - /** @var Utopia\Swoole\Response $response */ - + ->action(function (string $x, int $y, array $z, array $file, Request $request, Response $response) { + $file = $request->getFiles('file'); $contentRange = $request->getHeader('content-range'); @@ -321,8 +319,7 @@ App::get('/v1/mock/tests/general/redirect') ->label('sdk.response.model', Response::MODEL_MOCK) ->label('sdk.mock', true) ->inject('response') - ->action(function ($response) { - /** @var Appwrite\Utopia\Response $response */ + ->action(function (Response $response) { $response->redirect('/v1/mock/tests/general/redirect/done'); }); @@ -356,9 +353,7 @@ App::get('/v1/mock/tests/general/set-cookie') ->label('sdk.mock', true) ->inject('response') ->inject('request') - ->action(function ($response, $request) { - /** @var Appwrite\Utopia\Response $response */ - /** @var Appwrite\Utopia\Request $request */ + ->action(function (Response $response, Request $request) { $response->addCookie('cookieName', 'cookieValue', \time() + 31536000, '/', $request->getHostname(), true, true); }); @@ -376,8 +371,7 @@ App::get('/v1/mock/tests/general/get-cookie') ->label('sdk.response.model', Response::MODEL_MOCK) ->label('sdk.mock', true) ->inject('request') - ->action(function ($request) { - /** @var Appwrite\Utopia\Request $request */ + ->action(function (Request $request) { if ($request->getCookie('cookieName', '') !== 'cookieValue') { throw new Exception('Missing cookie value', 400, Exception::GENERAL_MOCK); @@ -396,8 +390,7 @@ App::get('/v1/mock/tests/general/empty') ->label('sdk.response.model', Response::MODEL_NONE) ->label('sdk.mock', true) ->inject('response') - ->action(function ($response) { - /** @var Appwrite\Utopia\Response $response */ + ->action(function (Response $response) { $response->noContent(); }); @@ -447,8 +440,7 @@ App::get('/v1/mock/tests/general/502-error') ->label('sdk.response.model', Response::MODEL_ANY) ->label('sdk.mock', true) ->inject('response') - ->action(function ($response) { - /** @var Appwrite\Utopia\Response $response */ + ->action(function (Response $response) { $response ->setStatusCode(502) @@ -467,8 +459,7 @@ App::get('/v1/mock/tests/general/oauth2') ->param('scope', '', new Text(100), 'OAuth2 scope list.') ->param('state', '', new Text(1024), 'OAuth2 state.') ->inject('response') - ->action(function ($client_id, $redirectURI, $scope, $state, $response) { - /** @var Appwrite\Utopia\Response $response */ + ->action(function (string $client_id, string $redirectURI, string $scope, string $state, Response $response) { $response->redirect($redirectURI . '?' . \http_build_query(['code' => 'abcdef', 'state' => $state])); }); @@ -486,8 +477,7 @@ App::get('/v1/mock/tests/general/oauth2/token') ->param('code', '', new Text(100), 'OAuth2 state.', true) ->param('refresh_token', '', new Text(100), 'OAuth2 refresh token.', true) ->inject('response') - ->action(function ($client_id, $client_secret, $grantType, $redirectURI, $code, $refreshToken, $response) { - /** @var Appwrite\Utopia\Response $response */ + ->action(function (string $client_id, string $client_secret, string $grantType, string $redirectURI, string $code, string $refreshToken, Response $response) { if ($client_id != '1') { throw new Exception('Invalid client ID', 400, Exception::GENERAL_MOCK); @@ -527,8 +517,7 @@ App::get('/v1/mock/tests/general/oauth2/user') ->label('docs', false) ->param('token', '', new Text(100), 'OAuth2 Access Token.') ->inject('response') - ->action(function ($token, $response) { - /** @var Appwrite\Utopia\Response $response */ + ->action(function (string $token, Response $response) { if ($token != '123456') { throw new Exception('Invalid token', 400, Exception::GENERAL_MOCK); @@ -547,8 +536,7 @@ App::get('/v1/mock/tests/general/oauth2/success') ->label('scope', 'public') ->label('docs', false) ->inject('response') - ->action(function ($response) { - /** @var Appwrite\Utopia\Response $response */ + ->action(function (Response $response) { $response->json([ 'result' => 'success', @@ -561,8 +549,7 @@ App::get('/v1/mock/tests/general/oauth2/failure') ->label('scope', 'public') ->label('docs', false) ->inject('response') - ->action(function ($response) { - /** @var Appwrite\Utopia\Response $response */ + ->action(function (Response $response) { $response ->setStatusCode(Response::STATUS_CODE_BAD_REQUEST) @@ -571,10 +558,7 @@ App::get('/v1/mock/tests/general/oauth2/failure') ]); }); -App::shutdown(function ($utopia, $response, $request) { - /** @var Utopia\App $utopia */ - /** @var Appwrite\Utopia\Request $request */ - /** @var Appwrite\Utopia\Response $response */ +App::shutdown(function(App $utopia, Response $response, Request $request) { $result = []; $route = $utopia->match($request); diff --git a/app/controllers/shared/api.php b/app/controllers/shared/api.php index f9509aba43..8ed7d2659b 100644 --- a/app/controllers/shared/api.php +++ b/app/controllers/shared/api.php @@ -1,30 +1,24 @@ match($request); @@ -121,10 +115,7 @@ App::init(function ($utopia, $request, $response, $project, $user, $events, $aud $database->setProject($project); }, ['utopia', 'request', 'response', 'project', 'user', 'events', 'audits', 'mails', 'usage', 'deletes', 'database', 'dbForProject', 'mode'], 'api'); -App::init(function ($utopia, $request, $project) { - /** @var Utopia\App $utopia */ - /** @var Appwrite\Utopia\Request $request */ - /** @var Utopia\Database\Document $project */ +App::init(function (App $utopia, Request $request, Document $project) { $route = $utopia->match($request); @@ -173,18 +164,7 @@ App::init(function ($utopia, $request, $project) { } }, ['utopia', 'request', 'project'], 'auth'); -App::shutdown(function ($utopia, $request, $response, $project, $events, $audits, $usage, $deletes, $database, $mode, $dbForProject) { - /** @var Utopia\App $utopia */ - /** @var Appwrite\Utopia\Request $request */ - /** @var Appwrite\Utopia\Response $response */ - /** @var Utopia\Database\Document $project */ - /** @var Appwrite\Event\Event $events */ - /** @var Appwrite\Event\Audit $audits */ - /** @var Appwrite\Stats\Stats $usage */ - /** @var Appwrite\Event\Delete $deletes */ - /** @var Appwrite\Event\Database $database */ - /** @var bool $mode */ - /** @var Utopia\Database\Database $dbForProject */ +App::shutdown(function (App $utopia, Request $request, Response $response, Document $project, Event $events, Audit $audits, Stats $usage, Delete $deletes, Event $database, string $mode, Database $dbForProject) { if (!empty($events->getEvent())) { if (empty($events->getPayload())) { diff --git a/app/controllers/shared/web.php b/app/controllers/shared/web.php index 2748c33ee1..a3f2df012c 100644 --- a/app/controllers/shared/web.php +++ b/app/controllers/shared/web.php @@ -2,12 +2,11 @@ use Utopia\App; use Utopia\Config\Config; +use Appwrite\Utopia\Response; +use Appwrite\Utopia\Request; +use Appwrite\Utopia\View; -App::init(function ($utopia, $request, $response, $layout) { - /** @var Utopia\App $utopia */ - /** @var Appwrite\Utopia\Request $request */ - /** @var Appwrite\Utopia\Response $response */ - /** @var Appwrite\Utopia\View $layout */ +App::init(function (App $utopia, Request $request, Response $response, View $layout) { /* AJAX check */ if (!empty($request->getQuery('version', ''))) { diff --git a/app/controllers/web/console.php b/app/controllers/web/console.php index 1dbd906ce7..bbea3ba5d4 100644 --- a/app/controllers/web/console.php +++ b/app/controllers/web/console.php @@ -1,6 +1,7 @@ setParam('description', 'Appwrite Console allows you to easily manage, monitor, and control your entire backend API and tools.') @@ -17,9 +17,7 @@ App::init(function ($layout) { ; }, ['layout'], 'console'); -App::shutdown(function ($response, $layout) { - /** @var Appwrite\Utopia\Response $response */ - /** @var Appwrite\Utopia\View $layout */ +App::shutdown(function (Response $response, View $layout) { $header = new View(__DIR__ . '/../../views/console/comps/header.phtml'); $footer = new View(__DIR__ . '/../../views/console/comps/footer.phtml'); @@ -43,8 +41,7 @@ App::get('/error/:code') ->label('scope', 'home') ->param('code', null, new \Utopia\Validator\Numeric(), 'Valid status code number', false) ->inject('layout') - ->action(function ($code, $layout) { - /** @var Appwrite\Utopia\View $layout */ + ->action(function (int $code, View $layout) { $page = new View(__DIR__ . '/../../views/error.phtml'); @@ -62,8 +59,7 @@ App::get('/console') ->label('permission', 'public') ->label('scope', 'console') ->inject('layout') - ->action(function ($layout) { - /** @var Appwrite\Utopia\View $layout */ + ->action(function (View $layout) { $page = new View(__DIR__ . '/../../views/console/index.phtml'); @@ -81,8 +77,7 @@ App::get('/console/account') ->label('permission', 'public') ->label('scope', 'console') ->inject('layout') - ->action(function ($layout) { - /** @var Appwrite\Utopia\View $layout */ + ->action(function (View $layout) { $page = new View(__DIR__ . '/../../views/console/account/index.phtml'); @@ -102,8 +97,7 @@ App::get('/console/notifications') ->label('permission', 'public') ->label('scope', 'console') ->inject('layout') - ->action(function ($layout) { - /** @var Appwrite\Utopia\View $layout */ + ->action(function (View $layout) { $page = new View(__DIR__ . '/../../views/v1/console/notifications/index.phtml'); @@ -117,8 +111,7 @@ App::get('/console/home') ->label('permission', 'public') ->label('scope', 'console') ->inject('layout') - ->action(function ($layout) { - /** @var Appwrite\Utopia\View $layout */ + ->action(function (View $layout) { $page = new View(__DIR__ . '/../../views/console/home/index.phtml'); $page @@ -133,8 +126,7 @@ App::get('/console/settings') ->label('permission', 'public') ->label('scope', 'console') ->inject('layout') - ->action(function ($layout) { - /** @var Appwrite\Utopia\View $layout */ + ->action(function (View $layout) { $target = new Domain(App::getEnv('_APP_DOMAIN_TARGET', '')); @@ -156,8 +148,7 @@ App::get('/console/webhooks') ->label('permission', 'public') ->label('scope', 'console') ->inject('layout') - ->action(function ($layout) { - /** @var Appwrite\Utopia\View $layout */ + ->action(function (View $layout) { $page = new View(__DIR__ . '/../../views/console/webhooks/index.phtml'); @@ -174,8 +165,7 @@ App::get('/console/webhooks/webhook') ->label('scope', 'console') ->param('id', '', new UID(), 'Webhook unique ID.') ->inject('layout') - ->action(function ($id, $layout) { - /** @var Appwrite\Utopia\View $layout */ + ->action(function (string $id, View $layout) { $page = new View(__DIR__ . '/../../views/console/webhooks/webhook.phtml'); @@ -194,8 +184,7 @@ App::get('/console/webhooks/webhook/new') ->label('permission', 'public') ->label('scope', 'console') ->inject('layout') - ->action(function ($layout) { - /** @var Appwrite\Utopia\View $layout */ + ->action(function (View $layout) { $page = new View(__DIR__ . '/../../views/console/webhooks/webhook.phtml'); @@ -214,8 +203,7 @@ App::get('/console/keys') ->label('permission', 'public') ->label('scope', 'console') ->inject('layout') - ->action(function ($layout) { - /** @var Appwrite\Utopia\View $layout */ + ->action(function (View $layout) { $scopes = array_keys(Config::getParam('scopes')); $page = new View(__DIR__ . '/../../views/console/keys/index.phtml'); @@ -232,8 +220,7 @@ App::get('/console/database') ->label('permission', 'public') ->label('scope', 'console') ->inject('layout') - ->action(function ($layout) { - /** @var Appwrite\Utopia\View $layout */ + ->action(function (View $layout) { $page = new View(__DIR__ . '/../../views/console/database/index.phtml'); @@ -249,9 +236,7 @@ App::get('/console/database/collection') ->param('id', '', new UID(), 'Collection unique ID.') ->inject('response') ->inject('layout') - ->action(function ($id, $response, $layout) { - /** @var Appwrite\Utopia\Response $response */ - /** @var Appwrite\Utopia\View $layout */ + ->action(function (string $id, Response $response, View $layout) { $logs = new View(__DIR__ . '/../../views/console/comps/logs.phtml'); @@ -285,8 +270,7 @@ App::get('/console/database/document') ->label('scope', 'console') ->param('collection', '', new UID(), 'Collection unique ID.') ->inject('layout') - ->action(function ($collection, $layout) { - /** @var Appwrite\Utopia\View $layout */ + ->action(function (string $collection, View $layout) { $logs = new View(__DIR__ . '/../../views/console/comps/logs.phtml'); @@ -318,8 +302,7 @@ App::get('/console/database/document/new') ->label('scope', 'console') ->param('collection', '', new UID(), 'Collection unique ID.') ->inject('layout') - ->action(function ($collection, $layout) { - /** @var Appwrite\Utopia\View $layout */ + ->action(function (string $collection, View $layout) { $page = new View(__DIR__ . '/../../views/console/database/document.phtml'); @@ -339,10 +322,10 @@ App::get('/console/storage') ->label('permission', 'public') ->label('scope', 'console') ->inject('layout') - ->action(function ($layout) { - /** @var Appwrite\Utopia\View $layout */ - $page = new View(__DIR__ . '/../../views/console/storage/index.phtml'); + ->action(function (View $layout) { + $page = new View(__DIR__.'/../../views/console/storage/index.phtml'); + $page ->setParam('home', App::getEnv('_APP_HOME', 0)) ->setParam('fileLimit', App::getEnv('_APP_STORAGE_LIMIT', 0)) @@ -361,9 +344,7 @@ App::get('/console/storage/bucket') ->param('id', '', new UID(), 'Bucket unique ID.') ->inject('response') ->inject('layout') - ->action(function ($id, $response, $layout) { - /** @var Appwrite\Utopia\Response $response */ - /** @var Utopia\View $layout */ + ->action(function (string $id, Response $response, View $layout) { $page = new View(__DIR__ . '/../../views/console/storage/bucket.phtml'); $page @@ -389,8 +370,7 @@ App::get('/console/users') ->label('permission', 'public') ->label('scope', 'console') ->inject('layout') - ->action(function ($layout) { - /** @var Appwrite\Utopia\View $layout */ + ->action(function (View $layout) { $page = new View(__DIR__ . '/../../views/console/users/index.phtml'); @@ -410,8 +390,7 @@ App::get('/console/users/user') ->label('permission', 'public') ->label('scope', 'console') ->inject('layout') - ->action(function ($layout) { - /** @var Appwrite\Utopia\View $layout */ + ->action(function (View $layout) { $page = new View(__DIR__ . '/../../views/console/users/user.phtml'); @@ -425,8 +404,7 @@ App::get('/console/users/teams/team') ->label('permission', 'public') ->label('scope', 'console') ->inject('layout') - ->action(function ($layout) { - /** @var Appwrite\Utopia\View $layout */ + ->action(function (View $layout) { $page = new View(__DIR__ . '/../../views/console/users/team.phtml'); @@ -441,8 +419,8 @@ App::get('/console/functions') ->label('permission', 'public') ->label('scope', 'console') ->inject('layout') - ->action(function ($layout) { - $page = new View(__DIR__ . '/../../views/console/functions/index.phtml'); + ->action(function (View $layout) { + $page = new View(__DIR__.'/../../views/console/functions/index.phtml'); $page ->setParam('runtimes', Config::getParam('runtimes')) @@ -459,8 +437,8 @@ App::get('/console/functions/function') ->label('permission', 'public') ->label('scope', 'console') ->inject('layout') - ->action(function ($layout) { - $page = new View(__DIR__ . '/../../views/console/functions/function.phtml'); + ->action(function (View $layout) { + $page = new View(__DIR__.'/../../views/console/functions/function.phtml'); $page ->setParam('events', Config::getParam('events', [])) diff --git a/app/controllers/web/home.php b/app/controllers/web/home.php index 86873e8ada..0db1f7339f 100644 --- a/app/controllers/web/home.php +++ b/app/controllers/web/home.php @@ -1,11 +1,13 @@ html($layout->render()); }, ['response', 'layout'], 'home'); @@ -38,10 +38,7 @@ App::get('/') ->inject('response') ->inject('dbForConsole') ->inject('project') - ->action(function ($response, $dbForConsole, $project) { - /** @var Appwrite\Utopia\Response $response */ - /** @var Utopia\Database\Database $dbForConsole */ - /** @var Utopia\Database\Document $project */ + ->action(function (Response $response, Database $dbForConsole, Document $project) { $response ->addHeader('Cache-Control', 'no-store, no-cache, must-revalidate, max-age=0') @@ -69,8 +66,7 @@ App::get('/auth/signin') ->label('permission', 'public') ->label('scope', 'home') ->inject('layout') - ->action(function ($layout) { - /** @var Appwrite\Utopia\View $layout */ + ->action(function (View $layout) { $page = new View(__DIR__ . '/../../views/home/auth/signin.phtml'); @@ -88,9 +84,9 @@ App::get('/auth/signup') ->label('permission', 'public') ->label('scope', 'home') ->inject('layout') - ->action(function ($layout) { - /** @var Appwrite\Utopia\View $layout */ - $page = new View(__DIR__ . '/../../views/home/auth/signup.phtml'); + ->action(function (View $layout) { + + $page = new View(__DIR__.'/../../views/home/auth/signup.phtml'); $page ->setParam('root', App::getEnv('_APP_CONSOLE_WHITELIST_ROOT', 'enabled')) @@ -106,8 +102,7 @@ App::get('/auth/recovery') ->label('permission', 'public') ->label('scope', 'home') ->inject('layout') - ->action(function ($layout) { - /** @var Appwrite\Utopia\View $layout */ + ->action(function (View $layout) { $page = new View(__DIR__ . '/../../views/home/auth/recovery.phtml'); @@ -125,8 +120,7 @@ App::get('/auth/confirm') ->label('permission', 'public') ->label('scope', 'home') ->inject('layout') - ->action(function ($layout) { - /** @var Appwrite\Utopia\View $layout */ + ->action(function (View $layout) { $page = new View(__DIR__ . '/../../views/home/auth/confirm.phtml'); @@ -140,8 +134,7 @@ App::get('/auth/join') ->label('permission', 'public') ->label('scope', 'home') ->inject('layout') - ->action(function ($layout) { - /** @var Appwrite\Utopia\View $layout */ + ->action(function (View $layout) { $page = new View(__DIR__ . '/../../views/home/auth/join.phtml'); @@ -155,8 +148,7 @@ App::get('/auth/recovery/reset') ->label('permission', 'public') ->label('scope', 'home') ->inject('layout') - ->action(function ($layout) { - /** @var Appwrite\Utopia\View $layout */ + ->action(function (View $layout) { $page = new View(__DIR__ . '/../../views/home/auth/recovery/reset.phtml'); @@ -170,8 +162,7 @@ App::get('/auth/oauth2/success') ->label('permission', 'public') ->label('scope', 'home') ->inject('layout') - ->action(function ($layout) { - /** @var Appwrite\Utopia\View $layout */ + ->action(function (View $layout) { $page = new View(__DIR__ . '/../../views/home/auth/oauth2.phtml'); @@ -188,8 +179,7 @@ App::get('/auth/magic-url') ->label('permission', 'public') ->label('scope', 'home') ->inject('layout') - ->action(function ($layout) { - /** @var Appwrite\Utopia\View $layout */ + ->action(function (View $layout) { $page = new View(__DIR__ . '/../../views/home/auth/magicURL.phtml'); @@ -206,8 +196,7 @@ App::get('/auth/oauth2/failure') ->label('permission', 'public') ->label('scope', 'home') ->inject('layout') - ->action(function ($layout) { - /** @var Appwrite\Utopia\View $layout */ + ->action(function (View $layout) { $page = new View(__DIR__ . '/../../views/home/auth/oauth2.phtml'); @@ -225,8 +214,7 @@ App::get('/error/:code') ->label('scope', 'home') ->param('code', null, new \Utopia\Validator\Numeric(), 'Valid status code number', false) ->inject('layout') - ->action(function ($code, $layout) { - /** @var Appwrite\Utopia\View $layout */ + ->action(function (int $code, View $layout) { $page = new View(__DIR__ . '/../../views/error.phtml'); @@ -244,8 +232,7 @@ App::get('/versions') ->groups(['web', 'home']) ->label('scope', 'public') ->inject('response') - ->action(function ($response) { - /** @var Appwrite\Utopia\Response $response */ + ->action(function (Response $response) { $platforms = Config::getParam('platforms'); diff --git a/app/workers/audits.php b/app/workers/audits.php index c422dbac1f..696eb6df50 100644 --- a/app/workers/audits.php +++ b/app/workers/audits.php @@ -1,7 +1,5 @@ setAttribute('status', $response['status']); $build->setAttribute('outputPath', $response['outputPath']); $build->setAttribute('stderr', $response['stderr']); - $build->setAttribute('stdout', $response['stdout']); + $build->setAttribute('stdout', $response['response']); Console::success("Build id: $buildId created"); diff --git a/docs/sdks/dart/GETTING_STARTED.md b/docs/sdks/dart/GETTING_STARTED.md index dd1dd3918c..b1f059c0bb 100644 --- a/docs/sdks/dart/GETTING_STARTED.md +++ b/docs/sdks/dart/GETTING_STARTED.md @@ -7,7 +7,7 @@ Once you add the dependencies, its extremely easy to get started with the SDK; A import 'package:dart_appwrite/dart_appwrite.dart'; void main() async { - Client client = Client(); + Client client = Client() .setEndpoint('http://[HOSTNAME_OR_IP]/v1') // Make sure your endpoint is accessible .setProject('5ff3379a01d25') // Your project ID .setKey('cd868c7af8bdc893b4...93b7535db89') diff --git a/phpunit.xml b/phpunit.xml index 11436083ce..e3d583022f 100644 --- a/phpunit.xml +++ b/phpunit.xml @@ -6,7 +6,7 @@ convertNoticesToExceptions="true" convertWarningsToExceptions="true" processIsolation="false" - stopOnFailure="true" + stopOnFailure="false" > @@ -35,4 +35,4 @@ ./tests/e2e/Services/Functions/FunctionsCustomClientTest.php - \ No newline at end of file + diff --git a/src/Appwrite/Auth/OAuth2/Zoom.php b/src/Appwrite/Auth/OAuth2/Zoom.php index e1307317de..9dad22212a 100644 --- a/src/Appwrite/Auth/OAuth2/Zoom.php +++ b/src/Appwrite/Auth/OAuth2/Zoom.php @@ -30,7 +30,7 @@ class Zoom extends OAuth2 * @var array */ protected array $scopes = [ - 'user_profile' + 'user_info:read' ]; /**