From 19c17e56ecf978dc8da75668cd512a5d4e5d9a12 Mon Sep 17 00:00:00 2001 From: Torsten Dittmann Date: Thu, 13 Apr 2023 13:50:25 +0200 Subject: [PATCH] draft: new router --- app/controllers/api/account.php | 1 - app/controllers/api/databases.php | 30 ---------- app/controllers/api/graphql.php | 2 +- app/controllers/api/storage.php | 8 --- app/controllers/api/users.php | 36 ------------ app/controllers/general.php | 28 ++++------ app/controllers/mock.php | 29 ---------- composer.json | 2 +- composer.lock | 33 +++++++---- tests/e2e/General/HTTPTest.php | 19 +++++-- tests/e2e/Services/Account/AccountBase.php | 2 +- .../e2e/Services/Databases/DatabasesBase.php | 56 ------------------- .../Services/GraphQL/StorageServerTest.php | 2 +- .../Projects/ProjectsConsoleClientTest.php | 2 +- 14 files changed, 50 insertions(+), 200 deletions(-) diff --git a/app/controllers/api/account.php b/app/controllers/api/account.php index dd5ac4a2da..8f20c32d82 100644 --- a/app/controllers/api/account.php +++ b/app/controllers/api/account.php @@ -142,7 +142,6 @@ App::post('/v1/account') }); App::post('/v1/account/sessions/email') - ->alias('/v1/account/sessions') ->desc('Create Email Session') ->groups(['api', 'account', 'auth', 'session']) ->label('event', 'users.[userId].sessions.[sessionId].create') diff --git a/app/controllers/api/databases.php b/app/controllers/api/databases.php index b309b74894..0282bac4f7 100644 --- a/app/controllers/api/databases.php +++ b/app/controllers/api/databases.php @@ -693,7 +693,6 @@ App::delete('/v1/databases/:databaseId') }); App::post('/v1/databases/:databaseId/collections') - ->alias('/v1/database/collections', ['databaseId' => 'default']) ->desc('Create Collection') ->groups(['api', 'database']) ->label('event', 'databases.[databaseId].collections.[collectionId].create') @@ -761,7 +760,6 @@ App::post('/v1/databases/:databaseId/collections') }); App::get('/v1/databases/:databaseId/collections') - ->alias('/v1/database/collections', ['databaseId' => 'default']) ->desc('List Collections') ->groups(['api', 'database']) ->label('scope', 'collections.read') @@ -817,7 +815,6 @@ App::get('/v1/databases/:databaseId/collections') }); App::get('/v1/databases/:databaseId/collections/:collectionId') - ->alias('/v1/database/collections/:collectionId', ['databaseId' => 'default']) ->desc('Get Collection') ->groups(['api', 'database']) ->label('scope', 'collections.read') @@ -852,7 +849,6 @@ App::get('/v1/databases/:databaseId/collections/:collectionId') }); App::get('/v1/databases/:databaseId/collections/:collectionId/logs') - ->alias('/v1/database/collections/:collectionId/logs', ['databaseId' => 'default']) ->desc('List Collection Logs') ->groups(['api', 'database']) ->label('scope', 'collections.read') @@ -948,7 +944,6 @@ App::get('/v1/databases/:databaseId/collections/:collectionId/logs') App::put('/v1/databases/:databaseId/collections/:collectionId') - ->alias('/v1/database/collections/:collectionId', ['databaseId' => 'default']) ->desc('Update Collection') ->groups(['api', 'database', 'schema']) ->label('scope', 'collections.write') @@ -1016,7 +1011,6 @@ App::put('/v1/databases/:databaseId/collections/:collectionId') }); App::delete('/v1/databases/:databaseId/collections/:collectionId') - ->alias('/v1/database/collections/:collectionId', ['databaseId' => 'default']) ->desc('Delete Collection') ->groups(['api', 'database', 'schema']) ->label('scope', 'collections.write') @@ -1073,7 +1067,6 @@ App::delete('/v1/databases/:databaseId/collections/:collectionId') }); App::post('/v1/databases/:databaseId/collections/:collectionId/attributes/string') - ->alias('/v1/database/collections/:collectionId/attributes/string', ['databaseId' => 'default']) ->desc('Create String Attribute') ->groups(['api', 'database', 'schema']) ->label('event', 'databases.[databaseId].collections.[collectionId].attributes.[attributeId].create') @@ -1123,7 +1116,6 @@ App::post('/v1/databases/:databaseId/collections/:collectionId/attributes/string }); App::post('/v1/databases/:databaseId/collections/:collectionId/attributes/email') - ->alias('/v1/database/collections/:collectionId/attributes/email', ['databaseId' => 'default']) ->desc('Create Email Attribute') ->groups(['api', 'database', 'schema']) ->label('event', 'databases.[databaseId].collections.[collectionId].attributes.[attributeId].create') @@ -1167,7 +1159,6 @@ App::post('/v1/databases/:databaseId/collections/:collectionId/attributes/email' }); App::post('/v1/databases/:databaseId/collections/:collectionId/attributes/enum') - ->alias('/v1/database/collections/:collectionId/attributes/enum', ['databaseId' => 'default']) ->desc('Create Enum Attribute') ->groups(['api', 'database', 'schema']) ->label('event', 'databases.[databaseId].collections.[collectionId].attributes.[attributeId].create') @@ -1227,7 +1218,6 @@ App::post('/v1/databases/:databaseId/collections/:collectionId/attributes/enum') }); App::post('/v1/databases/:databaseId/collections/:collectionId/attributes/ip') - ->alias('/v1/database/collections/:collectionId/attributes/ip', ['databaseId' => 'default']) ->desc('Create IP Address Attribute') ->groups(['api', 'database', 'schema']) ->label('event', 'databases.[databaseId].collections.[collectionId].attributes.[attributeId].create') @@ -1271,7 +1261,6 @@ App::post('/v1/databases/:databaseId/collections/:collectionId/attributes/ip') }); App::post('/v1/databases/:databaseId/collections/:collectionId/attributes/url') - ->alias('/v1/database/collections/:collectionId/attributes/url', ['databaseId' => 'default']) ->desc('Create URL Attribute') ->groups(['api', 'database', 'schema']) ->label('event', 'databases.[databaseId].collections.[collectionId].attributes.[attributeId].create') @@ -1315,7 +1304,6 @@ App::post('/v1/databases/:databaseId/collections/:collectionId/attributes/url') }); App::post('/v1/databases/:databaseId/collections/:collectionId/attributes/integer') - ->alias('/v1/database/collections/:collectionId/attributes/integer', ['databaseId' => 'default']) ->desc('Create Integer Attribute') ->groups(['api', 'database', 'schema']) ->label('event', 'databases.[databaseId].collections.[collectionId].attributes.[attributeId].create') @@ -1388,7 +1376,6 @@ App::post('/v1/databases/:databaseId/collections/:collectionId/attributes/intege }); App::post('/v1/databases/:databaseId/collections/:collectionId/attributes/float') - ->alias('/v1/database/collections/:collectionId/attributes/float', ['databaseId' => 'default']) ->desc('Create Float Attribute') ->groups(['api', 'database', 'schema']) ->label('event', 'databases.[databaseId].collections.[collectionId].attributes.[attributeId].create') @@ -1464,7 +1451,6 @@ App::post('/v1/databases/:databaseId/collections/:collectionId/attributes/float' }); App::post('/v1/databases/:databaseId/collections/:collectionId/attributes/boolean') - ->alias('/v1/database/collections/:collectionId/attributes/boolean', ['databaseId' => 'default']) ->desc('Create Boolean Attribute') ->groups(['api', 'database', 'schema']) ->label('event', 'databases.[databaseId].collections.[collectionId].attributes.[attributeId].create') @@ -1507,7 +1493,6 @@ App::post('/v1/databases/:databaseId/collections/:collectionId/attributes/boolea }); App::post('/v1/databases/:databaseId/collections/:collectionId/attributes/datetime') - ->alias('/v1/database/collections/:collectionId/attributes/datetime', ['databaseId' => 'default']) ->desc('Create DateTime Attribute') ->groups(['api', 'database']) ->label('event', 'databases.[databaseId].collections.[collectionId].attributes.[attributeId].create') @@ -1551,7 +1536,6 @@ App::post('/v1/databases/:databaseId/collections/:collectionId/attributes/dateti }); App::post('/v1/databases/:databaseId/collections/:collectionId/attributes/relationship') - ->alias('/v1/database/collections/:collectionId/attributes/relationship', ['databaseId' => 'default']) ->desc('Create Relationship Attribute') ->groups(['api', 'database']) ->label('event', 'databases.[databaseId].collections.[collectionId].attributes.[attributeId].create') @@ -1633,7 +1617,6 @@ App::post('/v1/databases/:databaseId/collections/:collectionId/attributes/relati }); App::get('/v1/databases/:databaseId/collections/:collectionId/attributes') - ->alias('/v1/database/collections/:collectionId/attributes', ['databaseId' => 'default']) ->desc('List Attributes') ->groups(['api', 'database']) ->label('scope', 'collections.read') @@ -1673,7 +1656,6 @@ App::get('/v1/databases/:databaseId/collections/:collectionId/attributes') }); App::get('/v1/databases/:databaseId/collections/:collectionId/attributes/:key') - ->alias('/v1/database/collections/:collectionId/attributes/:key', ['databaseId' => 'default']) ->desc('Get Attribute') ->groups(['api', 'database']) ->label('scope', 'collections.read') @@ -2193,7 +2175,6 @@ App::patch('/v1/databases/:databaseId/collections/:collectionId/attributes/:key/ }); App::delete('/v1/databases/:databaseId/collections/:collectionId/attributes/:key') - ->alias('/v1/database/collections/:collectionId/attributes/:key', ['databaseId' => 'default']) ->desc('Delete Attribute') ->groups(['api', 'database', 'schema']) ->label('scope', 'collections.write') @@ -2306,7 +2287,6 @@ App::delete('/v1/databases/:databaseId/collections/:collectionId/attributes/:key }); App::post('/v1/databases/:databaseId/collections/:collectionId/indexes') - ->alias('/v1/database/collections/:collectionId/indexes', ['databaseId' => 'default']) ->desc('Create Index') ->groups(['api', 'database']) ->label('event', 'databases.[databaseId].collections.[collectionId].indexes.[indexId].create') @@ -2460,7 +2440,6 @@ App::post('/v1/databases/:databaseId/collections/:collectionId/indexes') }); App::get('/v1/databases/:databaseId/collections/:collectionId/indexes') - ->alias('/v1/database/collections/:collectionId/indexes', ['databaseId' => 'default']) ->desc('List Indexes') ->groups(['api', 'database']) ->label('scope', 'collections.read') @@ -2499,7 +2478,6 @@ App::get('/v1/databases/:databaseId/collections/:collectionId/indexes') }); App::get('/v1/databases/:databaseId/collections/:collectionId/indexes/:key') - ->alias('/v1/database/collections/:collectionId/indexes/:key', ['databaseId' => 'default']) ->desc('Get Index') ->groups(['api', 'database']) ->label('scope', 'collections.read') @@ -2546,7 +2524,6 @@ App::get('/v1/databases/:databaseId/collections/:collectionId/indexes/:key') }); App::delete('/v1/databases/:databaseId/collections/:collectionId/indexes/:key') - ->alias('/v1/database/collections/:collectionId/indexes/:key', ['databaseId' => 'default']) ->desc('Delete Index') ->groups(['api', 'database']) ->label('scope', 'collections.write') @@ -2614,7 +2591,6 @@ App::delete('/v1/databases/:databaseId/collections/:collectionId/indexes/:key') }); App::post('/v1/databases/:databaseId/collections/:collectionId/documents') - ->alias('/v1/database/collections/:collectionId/documents', ['databaseId' => 'default']) ->desc('Create Document') ->groups(['api', 'database']) ->label('event', 'databases.[databaseId].collections.[collectionId].documents.[documentId].create') @@ -2836,7 +2812,6 @@ App::post('/v1/databases/:databaseId/collections/:collectionId/documents') }); App::get('/v1/databases/:databaseId/collections/:collectionId/documents') - ->alias('/v1/database/collections/:collectionId/documents', ['databaseId' => 'default']) ->desc('List Documents') ->groups(['api', 'database']) ->label('scope', 'documents.read') @@ -2988,7 +2963,6 @@ App::get('/v1/databases/:databaseId/collections/:collectionId/documents') }); App::get('/v1/databases/:databaseId/collections/:collectionId/documents/:documentId') - ->alias('/v1/database/collections/:collectionId/documents/:documentId', ['databaseId' => 'default']) ->desc('Get Document') ->groups(['api', 'database']) ->label('scope', 'documents.read') @@ -3093,7 +3067,6 @@ App::get('/v1/databases/:databaseId/collections/:collectionId/documents/:documen }); App::get('/v1/databases/:databaseId/collections/:collectionId/documents/:documentId/logs') - ->alias('/v1/database/collections/:collectionId/documents/:documentId/logs', ['databaseId' => 'default']) ->desc('List Document Logs') ->groups(['api', 'database']) ->label('scope', 'documents.read') @@ -3194,7 +3167,6 @@ App::get('/v1/databases/:databaseId/collections/:collectionId/documents/:documen }); App::patch('/v1/databases/:databaseId/collections/:collectionId/documents/:documentId') - ->alias('/v1/database/collections/:collectionId/documents/:documentId', ['databaseId' => 'default']) ->desc('Update Document') ->groups(['api', 'database']) ->label('event', 'databases.[databaseId].collections.[collectionId].documents.[documentId].update') @@ -3422,7 +3394,6 @@ App::patch('/v1/databases/:databaseId/collections/:collectionId/documents/:docum }); App::delete('/v1/databases/:databaseId/collections/:collectionId/documents/:documentId') - ->alias('/v1/database/collections/:collectionId/documents/:documentId', ['databaseId' => 'default']) ->desc('Delete Document') ->groups(['api', 'database']) ->label('scope', 'documents.write') @@ -3817,7 +3788,6 @@ App::get('/v1/databases/:databaseId/usage') }); App::get('/v1/databases/:databaseId/collections/:collectionId/usage') - ->alias('/v1/database/:collectionId/usage', ['databaseId' => 'default']) ->desc('Get usage stats for a collection') ->groups(['api', 'database']) ->label('scope', 'collections.read') diff --git a/app/controllers/api/graphql.php b/app/controllers/api/graphql.php index 8ee3b5ac47..03771cea23 100644 --- a/app/controllers/api/graphql.php +++ b/app/controllers/api/graphql.php @@ -81,7 +81,7 @@ App::post('/v1/graphql/mutation') ->action(function (Request $request, Response $response, GQLSchema $schema, Adapter $promiseAdapter) { $query = $request->getParams(); - if ($request->getHeader('x-sdk-graphql') == 'true') { + if ($request->getHeader('x-sdk-graphql') === 'true') { $query = $query['query']; } diff --git a/app/controllers/api/storage.php b/app/controllers/api/storage.php index b936fc6b2f..5d5e5f67f7 100644 --- a/app/controllers/api/storage.php +++ b/app/controllers/api/storage.php @@ -325,7 +325,6 @@ App::delete('/v1/storage/buckets/:bucketId') }); App::post('/v1/storage/buckets/:bucketId/files') - ->alias('/v1/storage/files', ['bucketId' => 'default']) ->desc('Create File') ->groups(['api', 'storage']) ->label('scope', 'files.write') @@ -666,7 +665,6 @@ App::post('/v1/storage/buckets/:bucketId/files') }); App::get('/v1/storage/buckets/:bucketId/files') - ->alias('/v1/storage/files', ['bucketId' => 'default']) ->desc('List Files') ->groups(['api', 'storage']) ->label('scope', 'files.read') @@ -743,7 +741,6 @@ App::get('/v1/storage/buckets/:bucketId/files') }); App::get('/v1/storage/buckets/:bucketId/files/:fileId') - ->alias('/v1/storage/files/:fileId', ['bucketId' => 'default']) ->desc('Get File') ->groups(['api', 'storage']) ->label('scope', 'files.read') @@ -790,7 +787,6 @@ App::get('/v1/storage/buckets/:bucketId/files/:fileId') }); App::get('/v1/storage/buckets/:bucketId/files/:fileId/preview') - ->alias('/v1/storage/files/:fileId/preview', ['bucketId' => 'default']) ->desc('Get File Preview') ->groups(['api', 'storage']) ->label('scope', 'files.read') @@ -956,7 +952,6 @@ App::get('/v1/storage/buckets/:bucketId/files/:fileId/preview') }); App::get('/v1/storage/buckets/:bucketId/files/:fileId/download') - ->alias('/v1/storage/files/:fileId/download', ['bucketId' => 'default']) ->desc('Get File for Download') ->groups(['api', 'storage']) ->label('scope', 'files.read') @@ -1096,7 +1091,6 @@ App::get('/v1/storage/buckets/:bucketId/files/:fileId/download') }); App::get('/v1/storage/buckets/:bucketId/files/:fileId/view') - ->alias('/v1/storage/files/:fileId/view', ['bucketId' => 'default']) ->desc('Get File for View') ->groups(['api', 'storage']) ->label('scope', 'files.read') @@ -1247,7 +1241,6 @@ App::get('/v1/storage/buckets/:bucketId/files/:fileId/view') }); App::put('/v1/storage/buckets/:bucketId/files/:fileId') - ->alias('/v1/storage/files/:fileId', ['bucketId' => 'default']) ->desc('Update File') ->groups(['api', 'storage']) ->label('scope', 'files.write') @@ -1350,7 +1343,6 @@ App::put('/v1/storage/buckets/:bucketId/files/:fileId') }); App::delete('/v1/storage/buckets/:bucketId/files/:fileId') - ->alias('/v1/storage/files/:fileId', ['bucketId' => 'default']) ->desc('Delete File') ->groups(['api', 'storage']) ->label('scope', 'files.write') diff --git a/app/controllers/api/users.php b/app/controllers/api/users.php index ceed901a32..c6d7334a29 100644 --- a/app/controllers/api/users.php +++ b/app/controllers/api/users.php @@ -663,42 +663,6 @@ App::patch('/v1/users/:userId/status') $response->dynamic($user, Response::MODEL_USER); }); -App::patch('/v1/users/:userId/verification') - ->desc('Update Email Verification') - ->groups(['api', 'users']) - ->label('event', 'users.[userId].update.verification') - ->label('scope', 'users.write') - ->label('audits.event', 'verification.update') - ->label('audits.resource', 'user/{response.$id}') - ->label('usage.metric', 'users.{scope}.requests.update') - ->label('sdk.auth', [APP_AUTH_TYPE_KEY]) - ->label('sdk.namespace', 'users') - ->label('sdk.method', 'updateEmailVerification') - ->label('sdk.description', '/docs/references/users/update-user-email-verification.md') - ->label('sdk.response.code', Response::STATUS_CODE_OK) - ->label('sdk.response.type', Response::CONTENT_TYPE_JSON) - ->label('sdk.response.model', Response::MODEL_USER) - ->param('userId', '', new UID(), 'User ID.') - ->param('emailVerification', false, new Boolean(), 'User email verification status.') - ->inject('response') - ->inject('dbForProject') - ->inject('events') - ->action(function (string $userId, bool $emailVerification, Response $response, Database $dbForProject, Event $events) { - - $user = $dbForProject->getDocument('users', $userId); - - if ($user->isEmpty()) { - throw new Exception(Exception::USER_NOT_FOUND); - } - - $user = $dbForProject->updateDocument('users', $user->getId(), $user->setAttribute('emailVerification', $emailVerification)); - - $events - ->setParam('userId', $user->getId()); - - $response->dynamic($user, Response::MODEL_USER); - }); - App::patch('/v1/users/:userId/verification/phone') ->desc('Update Phone Verification') ->groups(['api', 'users']) diff --git a/app/controllers/general.php b/app/controllers/general.php index fe25f5c273..772951531f 100644 --- a/app/controllers/general.php +++ b/app/controllers/general.php @@ -437,7 +437,7 @@ App::error() $log->addExtra('line', $error->getLine()); $log->addExtra('trace', $error->getTraceAsString()); $log->addExtra('detailedTrace', $error->getTrace()); - $log->addExtra('roles', Authorization::$roles); + $log->addExtra('roles', Authorization::getRoles()); $action = $route->getLabel("sdk.namespace", "UNKNOWN_NAMESPACE") . '.' . $route->getLabel("sdk.method", "UNKNOWN_METHOD"); $log->setAction($action); @@ -584,27 +584,19 @@ App::get('/humans.txt') $response->text($template->render(false)); }); -App::get('/.well-known/acme-challenge') +App::get('/.well-known/acme-challenge/:token') ->desc('SSL Verification') ->label('scope', 'public') ->label('docs', false) - ->inject('request') + ->param('token', '', new Text(100, allowList: [ + ...Text::NUMBERS, + ...Text::ALPHABET_LOWER, + ...Text::ALPHABET_UPPER, + '-', + '_' + ]), 'SSL verification token.') ->inject('response') - ->action(function (Request $request, Response $response) { - $uriChunks = \explode('/', $request->getURI()); - $token = $uriChunks[\count($uriChunks) - 1]; - - $validator = new Text(100, allowList: [ - ...Text::NUMBERS, - ...Text::ALPHABET_LOWER, - ...Text::ALPHABET_UPPER, - '-', - '_' - ]); - - if (!$validator->isValid($token) || \count($uriChunks) !== 4) { - throw new AppwriteException(AppwriteException::GENERAL_ARGUMENT_INVALID, 'Invalid challenge token.'); - } + ->action(function (string $token, Response $response) { $base = \realpath(APP_STORAGE_CERTIFICATES); $absolute = \realpath($base . '/.well-known/acme-challenge/' . $token); diff --git a/app/controllers/mock.php b/app/controllers/mock.php index 33e92f289a..adc45718cd 100644 --- a/app/controllers/mock.php +++ b/app/controllers/mock.php @@ -444,35 +444,6 @@ App::post('/v1/mock/tests/general/nullable') ->action(function (string $required, string $nullable, ?string $optional) { }); -/** Endpoint to test if required headers are sent from the SDK */ -App::get('/v1/mock/tests/general/headers') - ->desc('Get headers') - ->groups(['mock']) - ->label('scope', 'public') - ->label('sdk.auth', [APP_AUTH_TYPE_SESSION, APP_AUTH_TYPE_KEY, APP_AUTH_TYPE_JWT]) - ->label('sdk.namespace', 'general') - ->label('sdk.method', 'headers') - ->label('sdk.description', 'Return headers from the request') - ->label('sdk.response.code', Response::STATUS_CODE_OK) - ->label('sdk.response.model', Response::MODEL_MOCK) - ->label('sdk.mock', true) - ->inject('request') - ->inject('response') - ->action(function (Request $request, Response $response) { - $res = [ - 'x-sdk-name' => $request->getHeader('x-sdk-name'), - 'x-sdk-platform' => $request->getHeader('x-sdk-platform'), - 'x-sdk-language' => $request->getHeader('x-sdk-language'), - 'x-sdk-version' => $request->getHeader('x-sdk-version'), - ]; - $res = array_map(function ($key, $value) { - return $key . ': ' . $value; - }, array_keys($res), $res); - $res = implode("; ", $res); - - $response->dynamic(new Document(['result' => $res]), Response::MODEL_MOCK); - }); - App::get('/v1/mock/tests/general/400-error') ->desc('400 Error') ->groups(['mock']) diff --git a/composer.json b/composer.json index fdd5df4535..703dc9c397 100644 --- a/composer.json +++ b/composer.json @@ -51,7 +51,7 @@ "utopia-php/config": "0.2.*", "utopia-php/database": "0.35.*", "utopia-php/domains": "1.1.*", - "utopia-php/framework": "0.28.*", + "utopia-php/framework": "dev-feat-routing-v2 as 0.28.9", "utopia-php/image": "0.5.*", "utopia-php/locale": "0.4.*", "utopia-php/logger": "0.3.*", diff --git a/composer.lock b/composer.lock index 2d402ddb31..d51bbfba88 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "87de4ea3130e576470a63b21628e30fb", + "content-hash": "0a5009fd8aef51c8bdfcd37842d16d50", "packages": [ { "name": "adhocore/jwt", @@ -2224,25 +2224,25 @@ }, { "name": "utopia-php/framework", - "version": "0.28.1", + "version": "dev-feat-routing-v2", "source": { "type": "git", "url": "https://github.com/utopia-php/framework.git", - "reference": "7f22c556fc5991e54e5811a68fb39809b21bda55" + "reference": "0d67d992ed6043cdc8b28ab0540ed66b2d1f06e3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/utopia-php/framework/zipball/7f22c556fc5991e54e5811a68fb39809b21bda55", - "reference": "7f22c556fc5991e54e5811a68fb39809b21bda55", + "url": "https://api.github.com/repos/utopia-php/framework/zipball/0d67d992ed6043cdc8b28ab0540ed66b2d1f06e3", + "reference": "0d67d992ed6043cdc8b28ab0540ed66b2d1f06e3", "shasum": "" }, "require": { - "php": ">=8.0.0" + "php": ">=8.0" }, "require-dev": { "laravel/pint": "^1.2", - "phpunit/phpunit": "^9.5.25", - "vimeo/psalm": "4.27.0" + "phpstan/phpstan": "1.9.x-dev", + "phpunit/phpunit": "^9.5.25" }, "type": "library", "autoload": { @@ -2262,9 +2262,9 @@ ], "support": { "issues": "https://github.com/utopia-php/framework/issues", - "source": "https://github.com/utopia-php/framework/tree/0.28.1" + "source": "https://github.com/utopia-php/framework/tree/feat-routing-v2" }, - "time": "2023-03-02T08:16:01+00:00" + "time": "2023-04-12T13:25:49+00:00" }, { "name": "utopia-php/image", @@ -5655,9 +5655,18 @@ "time": "2023-02-08T07:49:20+00:00" } ], - "aliases": [], + "aliases": [ + { + "package": "utopia-php/framework", + "version": "dev-feat-routing-v2", + "alias": "0.28.9", + "alias_normalized": "0.28.9.0" + } + ], "minimum-stability": "stable", - "stability-flags": [], + "stability-flags": { + "utopia-php/framework": 20 + }, "prefer-stable": false, "prefer-lowest": false, "platform": { diff --git a/tests/e2e/General/HTTPTest.php b/tests/e2e/General/HTTPTest.php index f033cd6d42..4239172398 100644 --- a/tests/e2e/General/HTTPTest.php +++ b/tests/e2e/General/HTTPTest.php @@ -52,19 +52,22 @@ class HTTPTest extends Scope public function testHumans() { + $previousEndpoint = $this->client->getEndpoint(); + $this->client->setEndpoint("http://localhost"); /** * Test for SUCCESS */ - $response = $this->client->call(Client::METHOD_GET, '/humans.txt', \array_merge([ - 'origin' => 'http://localhost', - ]), []); + $response = $this->client->call(Client::METHOD_GET, '/humans.txt'); $this->assertEquals(200, $response['headers']['status-code']); $this->assertStringContainsString('# humanstxt.org/', $response['body']); + $this->client->setEndpoint($previousEndpoint); } public function testRobots() { + $previousEndpoint = $this->client->getEndpoint(); + $this->client->setEndpoint("http://localhost"); /** * Test for SUCCESS */ @@ -74,6 +77,7 @@ class HTTPTest extends Scope $this->assertEquals(200, $response['headers']['status-code']); $this->assertStringContainsString('# robotstxt.org/', $response['body']); + $this->client->setEndpoint($previousEndpoint); } public function testAcmeChallenge() @@ -99,7 +103,7 @@ class HTTPTest extends Scope 'origin' => 'http://localhost', ]), []); - $this->assertEquals(400, $response['headers']['status-code']); + $this->assertEquals(404, $response['headers']['status-code']); // Cleanup $this->client->setEndpoint($previousEndpoint); @@ -151,7 +155,10 @@ class HTTPTest extends Scope public function testVersions() { - /** + $previousEndpoint = $this->client->getEndpoint(); + $this->client->setEndpoint("http://localhost"); + + /** * Test without header */ $response = $this->client->call(Client::METHOD_GET, '/versions', \array_merge([ @@ -170,5 +177,7 @@ class HTTPTest extends Scope $this->assertIsString($body['server-python']); $this->assertIsString($body['server-ruby']); $this->assertIsString($body['console-cli']); + + $this->client->setEndpoint($previousEndpoint); } } diff --git a/tests/e2e/Services/Account/AccountBase.php b/tests/e2e/Services/Account/AccountBase.php index ba751516d3..f2764fdd16 100644 --- a/tests/e2e/Services/Account/AccountBase.php +++ b/tests/e2e/Services/Account/AccountBase.php @@ -126,7 +126,7 @@ trait AccountBase $sessionId = $response['body']['$id']; $session = $this->client->parseCookie((string)$response['headers']['set-cookie'])['a_session_' . $this->getProject()['$id']]; - $response = $this->client->call(Client::METHOD_POST, '/account/sessions', array_merge([ + $response = $this->client->call(Client::METHOD_POST, '/account/sessions/email', array_merge([ 'origin' => 'http://localhost', 'content-type' => 'application/json', 'x-appwrite-project' => $this->getProject()['$id'], diff --git a/tests/e2e/Services/Databases/DatabasesBase.php b/tests/e2e/Services/Databases/DatabasesBase.php index 42f83ea046..55c9e65ede 100644 --- a/tests/e2e/Services/Databases/DatabasesBase.php +++ b/tests/e2e/Services/Databases/DatabasesBase.php @@ -1133,62 +1133,6 @@ trait DatabasesBase return ['documents' => $documents['body']['documents'], 'databaseId' => $databaseId]; } - public function testCreateCollectionAlias(): array - { - // Create default database - $database = $this->client->call(Client::METHOD_POST, '/databases', [ - 'content-type' => 'application/json', - 'x-appwrite-project' => $this->getProject()['$id'], - 'x-appwrite-key' => $this->getProject()['apiKey'] - ], [ - 'databaseId' => ID::custom('default'), - 'name' => 'Default' - ]); - - $this->assertNotEmpty($database['body']['$id']); - $this->assertEquals(201, $database['headers']['status-code']); - - /** - * Test for SUCCESS - */ - - $movies = $this->client->call(Client::METHOD_POST, '/database/collections', array_merge([ - 'content-type' => 'application/json', - 'x-appwrite-project' => $this->getProject()['$id'], - 'x-appwrite-key' => $this->getProject()['apiKey'] - ]), [ - 'collectionId' => ID::unique(), - 'name' => 'Movies', - 'permissions' => [], - 'documentSecurity' => true, - ]); - - $this->assertEquals(201, $movies['headers']['status-code']); - $this->assertEquals('Movies', $movies['body']['name']); - - return ['moviesId' => $movies['body']['$id']]; - } - - /** - * @depends testCreateCollectionAlias - */ - public function testListDocumentsAlias(array $data): array - { - /** - * Test for SUCCESS - */ - - $documents = $this->client->call(Client::METHOD_GET, '/database/collections/' . $data['moviesId'] . '/documents', array_merge([ - 'content-type' => 'application/json', - 'x-appwrite-project' => $this->getProject()['$id'], - ], $this->getHeaders())); - - $this->assertEquals(200, $documents['headers']['status-code']); - $this->assertEquals(0, $documents['body']['total']); - - return []; - } - /** * @depends testListDocuments */ diff --git a/tests/e2e/Services/GraphQL/StorageServerTest.php b/tests/e2e/Services/GraphQL/StorageServerTest.php index afaef08321..7fea895b1c 100644 --- a/tests/e2e/Services/GraphQL/StorageServerTest.php +++ b/tests/e2e/Services/GraphQL/StorageServerTest.php @@ -77,7 +77,7 @@ class StorageServerTest extends Scope 'file' => new CURLFile(realpath(__DIR__ . '/../../../resources/logo.png'), 'image/png', 'logo.png'), ]; - $file = $this->client->call(Client::METHOD_POST, '/graphql/upload', \array_merge([ + $file = $this->client->call(Client::METHOD_POST, '/graphql', \array_merge([ 'content-type' => 'multipart/form-data', 'x-appwrite-project' => $projectId, ], $this->getHeaders()), $gqlPayload); diff --git a/tests/e2e/Services/Projects/ProjectsConsoleClientTest.php b/tests/e2e/Services/Projects/ProjectsConsoleClientTest.php index 91699f2dba..b39dec37d8 100644 --- a/tests/e2e/Services/Projects/ProjectsConsoleClientTest.php +++ b/tests/e2e/Services/Projects/ProjectsConsoleClientTest.php @@ -783,7 +783,7 @@ class ProjectsConsoleClientTest extends Scope $this->assertEquals($response['headers']['status-code'], 501); - $response = $this->client->call(Client::METHOD_POST, '/account/anonymous', array_merge([ + $response = $this->client->call(Client::METHOD_POST, '/account/sessions/anonymous', array_merge([ 'origin' => 'http://localhost', 'content-type' => 'application/json', 'x-appwrite-project' => $id,