diff --git a/app/controllers/api/account.php b/app/controllers/api/account.php index 51b03f31c1..0b94295e6f 100644 --- a/app/controllers/api/account.php +++ b/app/controllers/api/account.php @@ -804,8 +804,8 @@ App::get('/v1/account/sessions/oauth2/:provider/redirect') $state['success'] = URLParser::parse($state['success']); $query = URLParser::parseQuery($state['success']['query']); - if ($state['success']['path'] == $oauthDefaultSuccess) { + // TODO: Deprecate and remove this case $query['project'] = $project->getId(); $query['domain'] = Config::getParam('cookieDomain'); $query['key'] = Auth::$cookieName; @@ -923,7 +923,7 @@ App::post('/v1/account/tokens/magic-url') ->label('audits.userId', '{response.userId}') ->label('sdk.auth', []) ->label('sdk.namespace', 'account') - ->label('sdk.method', 'createMagicURLToken') + ->label('sdk.method', ['createMagicURLToken', 'createMagicURLSession']) ->label('sdk.description', '/docs/references/account/create-magic-url-token.md') ->label('sdk.response.code', Response::STATUS_CODE_CREATED) ->label('sdk.response.type', Response::CONTENT_TYPE_JSON) @@ -1141,7 +1141,7 @@ App::put('/v1/account/sessions/token') ->label('usage.metric', 'sessions.{scope}.requests.create') ->label('sdk.auth', []) ->label('sdk.namespace', 'account') - ->label('sdk.method', 'exchangeTokenForSession') + ->label('sdk.method', ['exchangeTokenForSession', 'updateMagicURLSession', 'updatePhoneSession']) ->label('sdk.description', '/docs/references/account/exchange-token-for-session.md') ->label('sdk.response.code', Response::STATUS_CODE_CREATED) ->label('sdk.response.type', Response::CONTENT_TYPE_JSON) @@ -1267,7 +1267,7 @@ App::post('/v1/account/tokens/phone') ->label('audits.userId', '{response.userId}') ->label('sdk.auth', []) ->label('sdk.namespace', 'account') - ->label('sdk.method', 'createPhoneToken') + ->label('sdk.method', ['createPhoneToken', 'createPhoneSession']) ->label('sdk.description', '/docs/references/account/create-phone-token.md') ->label('sdk.response.code', Response::STATUS_CODE_CREATED) ->label('sdk.response.type', Response::CONTENT_TYPE_JSON) diff --git a/src/Appwrite/GraphQL/Schema.php b/src/Appwrite/GraphQL/Schema.php index 11f728e571..8dda9147cc 100644 --- a/src/Appwrite/GraphQL/Schema.php +++ b/src/Appwrite/GraphQL/Schema.php @@ -99,26 +99,33 @@ class Schema /** @var Route $route */ $namespace = $route->getLabel('sdk.namespace', ''); - $method = $route->getLabel('sdk.method', ''); - $name = $namespace . \ucfirst($method); + $methods = $route->getLabel('sdk.method', ''); - if (empty($name)) { - continue; + if (!\is_array($methods)) { + $methods = [$methods]; } - foreach (Mapper::route($utopia, $route, $complexity) as $field) { - switch ($route->getMethod()) { - case 'GET': - $queries[$name] = $field; - break; - case 'POST': - case 'PUT': - case 'PATCH': - case 'DELETE': - $mutations[$name] = $field; - break; - default: - throw new \Exception("Unsupported method: {$route->getMethod()}"); + foreach ($methods as $method) { + $name = $namespace . \ucfirst($method); + + if (empty($name)) { + continue; + } + + foreach (Mapper::route($utopia, $route, $complexity) as $field) { + switch ($route->getMethod()) { + case 'GET': + $queries[$name] = $field; + break; + case 'POST': + case 'PUT': + case 'PATCH': + case 'DELETE': + $mutations[$name] = $field; + break; + default: + throw new \Exception("Unsupported method: {$route->getMethod()}"); + } } } } diff --git a/src/Appwrite/Specification/Format/OpenAPI3.php b/src/Appwrite/Specification/Format/OpenAPI3.php index 863966eedd..9487421ab1 100644 --- a/src/Appwrite/Specification/Format/OpenAPI3.php +++ b/src/Appwrite/Specification/Format/OpenAPI3.php @@ -124,7 +124,11 @@ class OpenAPI3 extends Format continue; } - $id = $route->getLabel('sdk.method', \uniqid()); + $method = $route->getLabel('sdk.method', [\uniqid()]); + if (\is_array($method)) { + $method = $method[0]; + } + $desc = (!empty($route->getLabel('sdk.description', ''))) ? \realpath(__DIR__ . '/../../../../' . $route->getLabel('sdk.description', '')) : null; $produces = $route->getLabel('sdk.response.type', null); $model = $route->getLabel('sdk.response.model', 'none'); @@ -150,20 +154,21 @@ class OpenAPI3 extends Format if (empty($routeSecurity)) { $sdkPlatforms[] = APP_PLATFORM_CLIENT; + $sdkPlatforms[] = APP_PLATFORM_SERVER; } $temp = [ 'summary' => $route->getDesc(), - 'operationId' => $route->getLabel('sdk.namespace', 'default') . ucfirst($id), + 'operationId' => $route->getLabel('sdk.namespace', 'default') . ucfirst($method), 'tags' => [$route->getLabel('sdk.namespace', 'default')], 'description' => ($desc) ? \file_get_contents($desc) : '', 'responses' => [], 'x-appwrite' => [ // Appwrite related metadata - 'method' => $route->getLabel('sdk.method', \uniqid()), + 'method' => $method, 'weight' => $route->getOrder(), 'cookies' => $route->getLabel('sdk.cookies', false), 'type' => $route->getLabel('sdk.methodType', ''), - 'demo' => Template::fromCamelCaseToDash($route->getLabel('sdk.namespace', 'default')) . '/' . Template::fromCamelCaseToDash($id) . '.md', + 'demo' => Template::fromCamelCaseToDash($route->getLabel('sdk.namespace', 'default')) . '/' . Template::fromCamelCaseToDash($method) . '.md', 'edit' => 'https://github.com/appwrite/appwrite/edit/master' . $route->getLabel('sdk.description', ''), 'rate-limit' => $route->getLabel('abuse-limit', 0), 'rate-time' => $route->getLabel('abuse-time', 3600), @@ -423,7 +428,7 @@ class OpenAPI3 extends Format foreach ($this->enumBlacklist as $blacklist) { if ( $blacklist['namespace'] == $route->getLabel('sdk.namespace', '') - && $blacklist['method'] == $route->getLabel('sdk.method', '') + && $blacklist['method'] == $method && $blacklist['parameter'] == $name ) { $allowed = false; @@ -433,8 +438,8 @@ class OpenAPI3 extends Format if ($allowed) { $node['schema']['enum'] = $validator->getList(); - $node['schema']['x-enum-name'] = $this->getEnumName($route->getLabel('sdk.namespace', ''), $route->getLabel('sdk.method', ''), $name); - $node['schema']['x-enum-keys'] = $this->getEnumKeys($route->getLabel('sdk.namespace', ''), $route->getLabel('sdk.method', ''), $name); + $node['schema']['x-enum-name'] = $this->getEnumName($route->getLabel('sdk.namespace', ''), $method, $name); + $node['schema']['x-enum-keys'] = $this->getEnumKeys($route->getLabel('sdk.namespace', ''), $method, $name); } if ($validator->getType() === 'integer') { $node['format'] = 'int32'; diff --git a/src/Appwrite/Specification/Format/Swagger2.php b/src/Appwrite/Specification/Format/Swagger2.php index c6ae7a7ff1..3a5000eeb5 100644 --- a/src/Appwrite/Specification/Format/Swagger2.php +++ b/src/Appwrite/Specification/Format/Swagger2.php @@ -123,7 +123,11 @@ class Swagger2 extends Format continue; } - $id = $route->getLabel('sdk.method', \uniqid()); + $method = $route->getLabel('sdk.method', [\uniqid()]); + if (\is_array($method)) { + $method = $method[0]; + } + $desc = (!empty($route->getLabel('sdk.description', ''))) ? \realpath(__DIR__ . '/../../../../' . $route->getLabel('sdk.description', '')) : null; $produces = $route->getLabel('sdk.response.type', null); $model = $route->getLabel('sdk.response.model', 'none'); @@ -149,6 +153,7 @@ class Swagger2 extends Format if (empty($routeSecurity)) { $sdkPlatforms[] = APP_PLATFORM_CLIENT; + $sdkPlatforms[] = APP_PLATFORM_SERVER; } $temp = [ @@ -160,7 +165,7 @@ class Swagger2 extends Format 'description' => ($desc) ? \file_get_contents($desc) : '', 'responses' => [], 'x-appwrite' => [ // Appwrite related metadata - 'method' => $route->getLabel('sdk.method', \uniqid()), + 'method' => $method, 'weight' => $route->getOrder(), 'cookies' => $route->getLabel('sdk.cookies', false), 'type' => $route->getLabel('sdk.methodType', ''), @@ -424,7 +429,7 @@ class Swagger2 extends Format // Do not add the enum $allowed = true; foreach ($this->enumBlacklist as $blacklist) { - if ($blacklist['namespace'] == $route->getLabel('sdk.namespace', '') && $blacklist['method'] == $route->getLabel('sdk.method', '') && $blacklist['parameter'] == $name) { + if ($blacklist['namespace'] == $route->getLabel('sdk.namespace', '') && $blacklist['method'] == $method && $blacklist['parameter'] == $name) { $allowed = false; break; } @@ -432,8 +437,8 @@ class Swagger2 extends Format if ($allowed) { $node['enum'] = $validator->getList(); - $node['x-enum-name'] = $this->getEnumName($route->getLabel('sdk.namespace', ''), $route->getLabel('sdk.method', ''), $name); - $node['x-enum-keys'] = $this->getEnumKeys($route->getLabel('sdk.namespace', ''), $route->getLabel('sdk.method', ''), $name); + $node['x-enum-name'] = $this->getEnumName($route->getLabel('sdk.namespace', ''), $method, $name); + $node['x-enum-keys'] = $this->getEnumKeys($route->getLabel('sdk.namespace', ''), $method, $name); } if ($validator->getType() === 'integer') { diff --git a/src/Appwrite/Utopia/Request.php b/src/Appwrite/Utopia/Request.php index cb877afad4..5418063faa 100644 --- a/src/Appwrite/Utopia/Request.php +++ b/src/Appwrite/Utopia/Request.php @@ -25,7 +25,11 @@ class Request extends UtopiaRequest $parameters = parent::getParams(); if (self::hasFilter() && self::hasRoute()) { - $endpointIdentifier = self::getRoute()->getLabel('sdk.namespace', 'unknown') . '.' . self::getRoute()->getLabel('sdk.method', 'unknown'); + $method = self::getRoute()->getLabel('sdk.method', ['unknown']); + if (\is_array($method)) { + $method = $method[0]; + } + $endpointIdentifier = self::getRoute()->getLabel('sdk.namespace', 'unknown') . '.' .$method; $parameters = self::getFilter()->parse($parameters, $endpointIdentifier); }