From c96f1e76e2296a7dabc5750484a809d57ec8ef5c Mon Sep 17 00:00:00 2001 From: Christy Jacob Date: Fri, 5 Aug 2022 15:50:48 +0530 Subject: [PATCH 01/27] feat: add new attributes for API Keys --- app/config/collections.php | 29 ++++++++++++++++++++++ app/controllers/api/projects.php | 2 ++ app/controllers/general.php | 1 + src/Appwrite/Utopia/Response/Model/Key.php | 12 +++++++++ 4 files changed, 44 insertions(+) diff --git a/app/config/collections.php b/app/config/collections.php index ecbe92c33..2f0949910 100644 --- a/app/config/collections.php +++ b/app/config/collections.php @@ -972,6 +972,28 @@ $collections = [ 'array' => false, 'filters' => [], ], + [ + '$id' => 'accessedAt', + 'type' => Database::VAR_INTEGER, + 'format' => '', + 'size' => 0, + 'signed' => false, + 'required' => false, + 'default' => 0, + 'array' => false, + 'filters' => [], + ], + [ + '$id' => 'sdks', + 'type' => Database::VAR_STRING, + 'format' => '', + 'size' => Database::LENGTH_KEY, + 'signed' => true, + 'required' => true, + 'default' => null, + 'array' => true, + 'filters' => [], + ], ], 'indexes' => [ [ @@ -981,6 +1003,13 @@ $collections = [ 'lengths' => [Database::LENGTH_KEY], 'orders' => [Database::ORDER_ASC], ], + [ + '$id' => '_key_accessedAt', + 'type' => Database::INDEX_KEY, + 'attributes' => ['accessedAt'], + 'lengths' => [], + 'orders' => [], + ], ], ], diff --git a/app/controllers/api/projects.php b/app/controllers/api/projects.php index 214af8e44..7eca6cfdc 100644 --- a/app/controllers/api/projects.php +++ b/app/controllers/api/projects.php @@ -841,6 +841,8 @@ App::post('/v1/projects/:projectId/keys') 'name' => $name, 'scopes' => $scopes, 'expire' => $expire, + 'sdks' => [], + 'accessedAt' => 0, 'secret' => \bin2hex(\random_bytes(128)), ]); diff --git a/app/controllers/general.php b/app/controllers/general.php index c87d53c29..87edbdcff 100644 --- a/app/controllers/general.php +++ b/app/controllers/general.php @@ -281,6 +281,7 @@ App::init() * Mock user to app and grant API key scopes in addition to default app scopes */ if ($key && $user->isEmpty()) { + var_dump($key); $user = new Document([ '$id' => '', 'status' => true, diff --git a/src/Appwrite/Utopia/Response/Model/Key.php b/src/Appwrite/Utopia/Response/Model/Key.php index 5c79c28b5..263725996 100644 --- a/src/Appwrite/Utopia/Response/Model/Key.php +++ b/src/Appwrite/Utopia/Response/Model/Key.php @@ -58,6 +58,18 @@ class Key extends Model 'default' => '', 'example' => '919c2d18fb5d4...a2ae413da83346ad2', ]) + ->addRule('accessedAt', [ + 'type' => self::TYPE_INTEGER, + 'description' => 'Most recent access date in Unix timestamp.', + 'default' => null, + 'example' => '1653990687', + ]) + ->addRule('sdks', [ + 'type' => self::TYPE_STRING, + 'description' => 'List of SDK user agents that used this key.', + 'default' => null, + 'example' => 'appwrite:flutter', + ]) ; } From 1dc9f5e842401de5b27554b929576c5a9d121478 Mon Sep 17 00:00:00 2001 From: Christy Jacob Date: Fri, 5 Aug 2022 17:38:04 +0530 Subject: [PATCH 02/27] feat: add new attributes for API Keys --- app/controllers/general.php | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/app/controllers/general.php b/app/controllers/general.php index 87edbdcff..265a41ee2 100644 --- a/app/controllers/general.php +++ b/app/controllers/general.php @@ -30,6 +30,7 @@ use Appwrite\Utopia\Request\Filters\V12 as RequestV12; use Appwrite\Utopia\Request\Filters\V13 as RequestV13; use Appwrite\Utopia\Request\Filters\V14 as RequestV14; use Utopia\Validator\Text; +use Utopia\Validator\WhiteList; Config::setParam('domainVerification', false); Config::setParam('cookieDomain', 'localhost'); @@ -281,7 +282,6 @@ App::init() * Mock user to app and grant API key scopes in addition to default app scopes */ if ($key && $user->isEmpty()) { - var_dump($key); $user = new Document([ '$id' => '', 'status' => true, @@ -301,6 +301,35 @@ App::init() Authorization::setRole('role:' . Auth::USER_ROLE_APP); Authorization::setDefaultStatus(false); // Cancel security segmentation for API keys. + + if (time() > ($key->getAttribute('accessedAt', 0) + (24 * 60 * 60))) { + $key->setAttribute('accessedAt', time()); + $sdkValidator = new WhiteList([ + 'appwrite:nodejs', + 'appwrite:deno', + 'appwrite:php', + 'appwrite:python', + 'appwrite:ruby', + 'appwrite:go', + 'appwrite:java', + 'appwrite:dotnet', + 'appwrite:dart', + 'appwrite:kotlin', + 'appwrite:swift' + ], true); + + $sdk = $request->getHeader('x-sdk-version', 'UNKNOWN'); + $sdk = substr($sdk, 0, strrpos($sdk, ':')); + + if ($sdkValidator->isValid($sdk)) { + $sdks = $key->getAttribute('sdks', []); + array_push($sdks, $sdk); + $key->setAttribute('sdks', $sdks); + } + + $dbForConsole->updateDocument('keys', $key->getId(), $key); + $dbForConsole->deleteCachedDocument('projects', $project->getId()); + } } } From 82e39ccf524d77b6ef293bd61da237cf47a37a5b Mon Sep 17 00:00:00 2001 From: Christy Jacob Date: Tue, 9 Aug 2022 01:12:13 +0530 Subject: [PATCH 03/27] feat: review comments --- app/controllers/general.php | 2 +- app/init.php | 1 + src/Appwrite/Utopia/Response/Model/Key.php | 1 + 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/app/controllers/general.php b/app/controllers/general.php index 265a41ee2..5cdf0f499 100644 --- a/app/controllers/general.php +++ b/app/controllers/general.php @@ -302,7 +302,7 @@ App::init() Authorization::setRole('role:' . Auth::USER_ROLE_APP); Authorization::setDefaultStatus(false); // Cancel security segmentation for API keys. - if (time() > ($key->getAttribute('accessedAt', 0) + (24 * 60 * 60))) { + if (time() > $key->getAttribute('accessedAt', 0) + APP_KEY_USAGE) { $key->setAttribute('accessedAt', time()); $sdkValidator = new WhiteList([ 'appwrite:nodejs', diff --git a/app/init.php b/app/init.php index 146a4fc2a..d09b08a1d 100644 --- a/app/init.php +++ b/app/init.php @@ -88,6 +88,7 @@ const APP_LIMIT_COMPRESSION = 20000000; //20MB const APP_LIMIT_ARRAY_PARAMS_SIZE = 100; // Default maximum of how many elements can there be in API parameter that expects array value const APP_LIMIT_ARRAY_ELEMENT_SIZE = 4096; // Default maximum length of element in array parameter represented by maximum URL length. const APP_LIMIT_SUBQUERY = 1000; +const APP_KEY_USAGE = 24 * 60 * 60; // 24 hours const APP_CACHE_BUSTER = 402; const APP_VERSION_STABLE = '0.15.3'; const APP_DATABASE_ATTRIBUTE_EMAIL = 'email'; diff --git a/src/Appwrite/Utopia/Response/Model/Key.php b/src/Appwrite/Utopia/Response/Model/Key.php index 263725996..811888a87 100644 --- a/src/Appwrite/Utopia/Response/Model/Key.php +++ b/src/Appwrite/Utopia/Response/Model/Key.php @@ -69,6 +69,7 @@ class Key extends Model 'description' => 'List of SDK user agents that used this key.', 'default' => null, 'example' => 'appwrite:flutter', + 'array' => true ]) ; } From 4bced29ec90bc2a311a05dc1cdd923f764dbc0fe Mon Sep 17 00:00:00 2001 From: Christy Jacob Date: Tue, 9 Aug 2022 01:36:36 +0530 Subject: [PATCH 04/27] feat: review comments --- app/controllers/general.php | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/app/controllers/general.php b/app/controllers/general.php index 5cdf0f499..f8ccf2617 100644 --- a/app/controllers/general.php +++ b/app/controllers/general.php @@ -305,21 +305,21 @@ App::init() if (time() > $key->getAttribute('accessedAt', 0) + APP_KEY_USAGE) { $key->setAttribute('accessedAt', time()); $sdkValidator = new WhiteList([ - 'appwrite:nodejs', - 'appwrite:deno', - 'appwrite:php', - 'appwrite:python', - 'appwrite:ruby', - 'appwrite:go', - 'appwrite:java', - 'appwrite:dotnet', - 'appwrite:dart', - 'appwrite:kotlin', - 'appwrite:swift' + 'nodejs', + 'deno', + 'php', + 'python', + 'ruby', + 'go', + 'java', + 'dotnet', + 'dart', + 'kotlin', + 'swift' ], true); $sdk = $request->getHeader('x-sdk-version', 'UNKNOWN'); - $sdk = substr($sdk, 0, strrpos($sdk, ':')); + $sdk = explode(':', $sdk)[1] ?? 'UNKNOWN'; if ($sdkValidator->isValid($sdk)) { $sdks = $key->getAttribute('sdks', []); From 7e470d2cb595db12537bc647d68c5d3c3d718e4f Mon Sep 17 00:00:00 2001 From: Christy Jacob Date: Tue, 9 Aug 2022 10:54:17 +0530 Subject: [PATCH 05/27] feat: review comments --- app/controllers/general.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/general.php b/app/controllers/general.php index f8ccf2617..5010d14d4 100644 --- a/app/controllers/general.php +++ b/app/controllers/general.php @@ -319,7 +319,7 @@ App::init() ], true); $sdk = $request->getHeader('x-sdk-version', 'UNKNOWN'); - $sdk = explode(':', $sdk)[1] ?? 'UNKNOWN'; + $sdk = explode(':', $sdk)[1] ?? ''; if ($sdkValidator->isValid($sdk)) { $sdks = $key->getAttribute('sdks', []); From 8cae6bb627bf949d7b7da321a5305ad012ed54bf Mon Sep 17 00:00:00 2001 From: Christy Jacob Date: Tue, 9 Aug 2022 11:26:53 +0530 Subject: [PATCH 06/27] feat: review comments --- app/controllers/general.php | 2 +- app/init.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/controllers/general.php b/app/controllers/general.php index 5010d14d4..57b9a6f0f 100644 --- a/app/controllers/general.php +++ b/app/controllers/general.php @@ -302,7 +302,7 @@ App::init() Authorization::setRole('role:' . Auth::USER_ROLE_APP); Authorization::setDefaultStatus(false); // Cancel security segmentation for API keys. - if (time() > $key->getAttribute('accessedAt', 0) + APP_KEY_USAGE) { + if (time() > $key->getAttribute('accessedAt', 0) + APP_KEY_ACCCESS) { $key->setAttribute('accessedAt', time()); $sdkValidator = new WhiteList([ 'nodejs', diff --git a/app/init.php b/app/init.php index d09b08a1d..773b3041e 100644 --- a/app/init.php +++ b/app/init.php @@ -88,7 +88,7 @@ const APP_LIMIT_COMPRESSION = 20000000; //20MB const APP_LIMIT_ARRAY_PARAMS_SIZE = 100; // Default maximum of how many elements can there be in API parameter that expects array value const APP_LIMIT_ARRAY_ELEMENT_SIZE = 4096; // Default maximum length of element in array parameter represented by maximum URL length. const APP_LIMIT_SUBQUERY = 1000; -const APP_KEY_USAGE = 24 * 60 * 60; // 24 hours +const APP_KEY_ACCCESS = 24 * 60 * 60; // 24 hours const APP_CACHE_BUSTER = 402; const APP_VERSION_STABLE = '0.15.3'; const APP_DATABASE_ATTRIBUTE_EMAIL = 'email'; From 410597eca7f503b75807f4f61b04d5fdf1074af1 Mon Sep 17 00:00:00 2001 From: Christy Jacob Date: Tue, 9 Aug 2022 11:35:25 +0530 Subject: [PATCH 07/27] feat: review comments --- app/controllers/general.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/controllers/general.php b/app/controllers/general.php index 57b9a6f0f..c0ab47040 100644 --- a/app/controllers/general.php +++ b/app/controllers/general.php @@ -323,7 +323,9 @@ App::init() if ($sdkValidator->isValid($sdk)) { $sdks = $key->getAttribute('sdks', []); - array_push($sdks, $sdk); + if (!in_array($sdk, $sdks)) { + array_push($sdks, $sdk); + } $key->setAttribute('sdks', $sdks); } From f26f2d9e9ba9509be29889226f83cd933fa5c0d7 Mon Sep 17 00:00:00 2001 From: Christy Jacob Date: Tue, 9 Aug 2022 11:43:34 +0530 Subject: [PATCH 08/27] feat: review comments --- app/controllers/general.php | 52 +++++++++++++++++++------------------ 1 file changed, 27 insertions(+), 25 deletions(-) diff --git a/app/controllers/general.php b/app/controllers/general.php index c0ab47040..a8d7fa545 100644 --- a/app/controllers/general.php +++ b/app/controllers/general.php @@ -304,34 +304,36 @@ App::init() if (time() > $key->getAttribute('accessedAt', 0) + APP_KEY_ACCCESS) { $key->setAttribute('accessedAt', time()); - $sdkValidator = new WhiteList([ - 'nodejs', - 'deno', - 'php', - 'python', - 'ruby', - 'go', - 'java', - 'dotnet', - 'dart', - 'kotlin', - 'swift' - ], true); - - $sdk = $request->getHeader('x-sdk-version', 'UNKNOWN'); - $sdk = explode(':', $sdk)[1] ?? ''; - - if ($sdkValidator->isValid($sdk)) { - $sdks = $key->getAttribute('sdks', []); - if (!in_array($sdk, $sdks)) { - array_push($sdks, $sdk); - } - $key->setAttribute('sdks', $sdks); - } - $dbForConsole->updateDocument('keys', $key->getId(), $key); $dbForConsole->deleteCachedDocument('projects', $project->getId()); } + + $sdkValidator = new WhiteList([ + 'nodejs', + 'deno', + 'php', + 'python', + 'ruby', + 'go', + 'java', + 'dotnet', + 'dart', + 'kotlin', + 'swift' + ], true); + + $sdk = $request->getHeader('x-sdk-version', 'UNKNOWN'); + $sdk = explode(':', $sdk)[1] ?? ''; + + if ($sdkValidator->isValid($sdk)) { + $sdks = $key->getAttribute('sdks', []); + if (!in_array($sdk, $sdks)) { + array_push($sdks, $sdk); + $key->setAttribute('sdks', $sdks); + $dbForConsole->updateDocument('keys', $key->getId(), $key); + $dbForConsole->deleteCachedDocument('projects', $project->getId()); + } + } } } From 21a3037bdf8aabf24957fe0273e0ee68c581be9c Mon Sep 17 00:00:00 2001 From: Christy Jacob Date: Tue, 9 Aug 2022 14:22:30 +0530 Subject: [PATCH 09/27] feat: review comments --- app/controllers/general.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/controllers/general.php b/app/controllers/general.php index a8d7fa545..cad63bbaf 100644 --- a/app/controllers/general.php +++ b/app/controllers/general.php @@ -330,6 +330,9 @@ App::init() if (!in_array($sdk, $sdks)) { array_push($sdks, $sdk); $key->setAttribute('sdks', $sdks); + + /** Update access time as well */ + $key->setAttribute('accessedAt', time()); $dbForConsole->updateDocument('keys', $key->getId(), $key); $dbForConsole->deleteCachedDocument('projects', $project->getId()); } From 4f218ea6d36850487485489f79b98d8e4f4494db Mon Sep 17 00:00:00 2001 From: Christy Jacob Date: Wed, 10 Aug 2022 18:22:12 +0530 Subject: [PATCH 10/27] feat: add new mock endpoint for sdk generator tests --- app/controllers/mock.php | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/app/controllers/mock.php b/app/controllers/mock.php index d3b150a55..c617e5e6f 100644 --- a/app/controllers/mock.php +++ b/app/controllers/mock.php @@ -7,6 +7,7 @@ use Utopia\Database\Document; use Appwrite\Network\Validator\Host; use Appwrite\Utopia\Request; use Appwrite\Utopia\Response; +use Appwrite\Utopia\Response\Model; use Utopia\App; use Utopia\Validator\ArrayList; use Utopia\Validator\Integer; @@ -395,6 +396,34 @@ App::get('/v1/mock/tests/general/empty') $response->noContent(); }); +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_NONE) + ->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']) From 9fe28e830ae37396831fe6bf1c2b63be484c463f Mon Sep 17 00:00:00 2001 From: Christy Jacob Date: Wed, 10 Aug 2022 18:30:57 +0530 Subject: [PATCH 11/27] feat: add platform to sdk generation script --- app/controllers/general.php | 3 +-- app/tasks/sdks.php | 1 + 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/controllers/general.php b/app/controllers/general.php index cad63bbaf..27f93c512 100644 --- a/app/controllers/general.php +++ b/app/controllers/general.php @@ -322,8 +322,7 @@ App::init() 'swift' ], true); - $sdk = $request->getHeader('x-sdk-version', 'UNKNOWN'); - $sdk = explode(':', $sdk)[1] ?? ''; + $sdk = $request->getHeader('x-sdk-name', 'UNKNOWN'); if ($sdkValidator->isValid($sdk)) { $sdks = $key->getAttribute('sdks', []); diff --git a/app/tasks/sdks.php b/app/tasks/sdks.php index d87316774..b000cc748 100644 --- a/app/tasks/sdks.php +++ b/app/tasks/sdks.php @@ -178,6 +178,7 @@ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ->setLicense($license) ->setLicenseContent($licenseContent) ->setVersion($language['version']) + ->setPlatform($key) ->setGitURL($language['url']) ->setGitRepo($language['gitUrl']) ->setGitRepoName($language['gitRepoName']) From 42d78f9a68568e5d13261597585dfe6abc762221 Mon Sep 17 00:00:00 2001 From: Christy Jacob Date: Wed, 10 Aug 2022 18:33:49 +0530 Subject: [PATCH 12/27] feat: update sdk generatoe dependency --- composer.json | 2 +- composer.lock | 38 ++++++++++++++++++++------------------ 2 files changed, 21 insertions(+), 19 deletions(-) diff --git a/composer.json b/composer.json index ca0f20949..d35cec885 100644 --- a/composer.json +++ b/composer.json @@ -76,7 +76,7 @@ } ], "require-dev": { - "appwrite/sdk-generator": "0.19.5", + "appwrite/sdk-generator": "dev-feat-new-headers", "phpunit/phpunit": "9.5.20", "squizlabs/php_codesniffer": "^3.6", "swoole/ide-helper": "4.8.9", diff --git a/composer.lock b/composer.lock index 93b8455ca..d2bdf6b70 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": "0a8ed4fa28bf33ceb7396c35b9e8a155", + "content-hash": "5c846e4b9f655c018d30cad74cb5ecca", "packages": [ { "name": "adhocore/jwt", @@ -1894,16 +1894,16 @@ }, { "name": "utopia-php/cache", - "version": "0.6.0", + "version": "0.6.1", "source": { "type": "git", "url": "https://github.com/utopia-php/cache.git", - "reference": "8ea1353a4bbab617e23c865a7c97b60d8074aee3" + "reference": "9889235a6d3da6cbb1f435201529da4d27c30e79" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/utopia-php/cache/zipball/8ea1353a4bbab617e23c865a7c97b60d8074aee3", - "reference": "8ea1353a4bbab617e23c865a7c97b60d8074aee3", + "url": "https://api.github.com/repos/utopia-php/cache/zipball/9889235a6d3da6cbb1f435201529da4d27c30e79", + "reference": "9889235a6d3da6cbb1f435201529da4d27c30e79", "shasum": "" }, "require": { @@ -1941,9 +1941,9 @@ ], "support": { "issues": "https://github.com/utopia-php/cache/issues", - "source": "https://github.com/utopia-php/cache/tree/0.6.0" + "source": "https://github.com/utopia-php/cache/tree/0.6.1" }, - "time": "2022-04-04T12:30:05+00:00" + "time": "2022-08-10T08:12:46+00:00" }, { "name": "utopia-php/cli", @@ -2828,29 +2828,29 @@ "packages-dev": [ { "name": "appwrite/sdk-generator", - "version": "0.19.5", + "version": "dev-feat-new-headers", "source": { "type": "git", "url": "https://github.com/appwrite/sdk-generator.git", - "reference": "04de540cf683e2b08b3192c137dde7f2c37003d9" + "reference": "3203428b4139e0ac2c0e46f1e5dff11c6a084f17" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/appwrite/sdk-generator/zipball/04de540cf683e2b08b3192c137dde7f2c37003d9", - "reference": "04de540cf683e2b08b3192c137dde7f2c37003d9", + "url": "https://api.github.com/repos/appwrite/sdk-generator/zipball/3203428b4139e0ac2c0e46f1e5dff11c6a084f17", + "reference": "3203428b4139e0ac2c0e46f1e5dff11c6a084f17", "shasum": "" }, "require": { "ext-curl": "*", "ext-json": "*", "ext-mbstring": "*", - "matthiasmullie/minify": "^1.3", + "matthiasmullie/minify": "^1.3.68", "php": ">=7.0.0", - "twig/twig": "^3.3" + "twig/twig": "^3.4.1" }, "require-dev": { "brianium/paratest": "^6.4", - "phpunit/phpunit": "^9.5.13" + "phpunit/phpunit": "^9.5.21" }, "type": "library", "autoload": { @@ -2872,9 +2872,9 @@ "description": "Appwrite PHP library for generating API SDKs for multiple programming languages and platforms", "support": { "issues": "https://github.com/appwrite/sdk-generator/issues", - "source": "https://github.com/appwrite/sdk-generator/tree/0.19.5" + "source": "https://github.com/appwrite/sdk-generator/tree/feat-new-headers" }, - "time": "2022-07-06T11:05:57+00:00" + "time": "2022-08-10T12:49:12+00:00" }, { "name": "doctrine/instantiator", @@ -5348,7 +5348,9 @@ ], "aliases": [], "minimum-stability": "stable", - "stability-flags": [], + "stability-flags": { + "appwrite/sdk-generator": 20 + }, "prefer-stable": false, "prefer-lowest": false, "platform": { @@ -5370,5 +5372,5 @@ "platform-overrides": { "php": "8.0" }, - "plugin-api-version": "2.2.0" + "plugin-api-version": "2.3.0" } From 741824ef87f8485f9259344ec6b69b76123270dd Mon Sep 17 00:00:00 2001 From: Christy Jacob Date: Wed, 10 Aug 2022 19:15:04 +0530 Subject: [PATCH 13/27] feat: move server list to app resource --- app/controllers/general.php | 19 +++---------------- app/init.php | 11 +++++++++++ 2 files changed, 14 insertions(+), 16 deletions(-) diff --git a/app/controllers/general.php b/app/controllers/general.php index 27f93c512..1446d210b 100644 --- a/app/controllers/general.php +++ b/app/controllers/general.php @@ -46,7 +46,8 @@ App::init() ->inject('user') ->inject('locale') ->inject('clients') - ->action(function (App $utopia, Request $request, Response $response, Document $console, Document $project, Database $dbForConsole, Document $user, Locale $locale, array $clients) { + ->inject('servers') + ->action(function (App $utopia, Request $request, Response $response, Document $console, Document $project, Database $dbForConsole, Document $user, Locale $locale, array $clients, array $servers) { /* * Request format */ @@ -308,22 +309,8 @@ App::init() $dbForConsole->deleteCachedDocument('projects', $project->getId()); } - $sdkValidator = new WhiteList([ - 'nodejs', - 'deno', - 'php', - 'python', - 'ruby', - 'go', - 'java', - 'dotnet', - 'dart', - 'kotlin', - 'swift' - ], true); - + $sdkValidator = new WhiteList($servers, true); $sdk = $request->getHeader('x-sdk-name', 'UNKNOWN'); - if ($sdkValidator->isValid($sdk)) { $sdks = $key->getAttribute('sdks', []); if (!in_array($sdk, $sdks)) { diff --git a/app/init.php b/app/init.php index 773b3041e..8d49d89ab 100644 --- a/app/init.php +++ b/app/init.php @@ -998,3 +998,14 @@ App::setResource('phone', function () { default => null }; }); + +App::setResource('servers', function () { + $platforms = Config::getParam('platforms'); + $server = $platforms[APP_PLATFORM_SERVER]; + + $languages = array_map(function ($language) { + return strtolower($language['name']); + }, $server['languages']); + + return $languages; +}); \ No newline at end of file From b4e944e9ba97a172eb3ad2e4810823cf4d0c1343 Mon Sep 17 00:00:00 2001 From: Christy Jacob Date: Wed, 10 Aug 2022 19:19:56 +0530 Subject: [PATCH 14/27] feat: run linter --- app/controllers/general.php | 4 ++-- app/controllers/mock.php | 2 +- app/init.php | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/controllers/general.php b/app/controllers/general.php index 1446d210b..f9db2584a 100644 --- a/app/controllers/general.php +++ b/app/controllers/general.php @@ -314,9 +314,9 @@ App::init() if ($sdkValidator->isValid($sdk)) { $sdks = $key->getAttribute('sdks', []); if (!in_array($sdk, $sdks)) { - array_push($sdks, $sdk); + array_push($sdks, $sdk); $key->setAttribute('sdks', $sdks); - + /** Update access time as well */ $key->setAttribute('accessedAt', time()); $dbForConsole->updateDocument('keys', $key->getId(), $key); diff --git a/app/controllers/mock.php b/app/controllers/mock.php index c617e5e6f..f2b7de979 100644 --- a/app/controllers/mock.php +++ b/app/controllers/mock.php @@ -420,7 +420,7 @@ App::get('/v1/mock/tests/general/headers') return $key . ': ' . $value; }, array_keys($res), $res); $res = implode("; ", $res); - + $response->dynamic(new Document(['result' => $res]), Response::MODEL_MOCK); }); diff --git a/app/init.php b/app/init.php index 8d49d89ab..d0747e5bc 100644 --- a/app/init.php +++ b/app/init.php @@ -1008,4 +1008,4 @@ App::setResource('servers', function () { }, $server['languages']); return $languages; -}); \ No newline at end of file +}); From cd5f3f2f2bb54cf5e49252de57d95cfcfe93880d Mon Sep 17 00:00:00 2001 From: Christy Jacob Date: Thu, 11 Aug 2022 00:00:59 +0530 Subject: [PATCH 15/27] feat: update mock endpoint spec --- app/controllers/mock.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/mock.php b/app/controllers/mock.php index f2b7de979..8aed4bc95 100644 --- a/app/controllers/mock.php +++ b/app/controllers/mock.php @@ -405,7 +405,7 @@ App::get('/v1/mock/tests/general/headers') ->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_NONE) + ->label('sdk.response.model', Response::MODEL_MOCK) ->label('sdk.mock', true) ->inject('request') ->inject('response') From f09cce93ee6f6e2dc0c748b774e6f18f403118ca Mon Sep 17 00:00:00 2001 From: Christy Jacob Date: Fri, 19 Aug 2022 09:37:35 +0000 Subject: [PATCH 16/27] feat: use datetime filters for acessedAt --- app/config/collections.php | 6 +++--- composer.lock | 22 +++++++--------------- 2 files changed, 10 insertions(+), 18 deletions(-) diff --git a/app/config/collections.php b/app/config/collections.php index 2d3788416..a6024bd0a 100644 --- a/app/config/collections.php +++ b/app/config/collections.php @@ -977,7 +977,7 @@ $collections = [ ], [ '$id' => 'accessedAt', - 'type' => Database::VAR_INTEGER, + 'type' => Database::, 'format' => '', 'size' => 0, 'signed' => false, @@ -2847,14 +2847,14 @@ $collections = [ ], [ '$id' => 'accessedAt', - 'type' => Database::VAR_INTEGER, + 'type' => Database::VAR_DATETIME, 'format' => '', 'size' => 0, 'signed' => false, 'required' => true, 'default' => null, 'array' => false, - 'filters' => [], + 'filters' => ['datetime'], ], [ '$id' => 'signature', diff --git a/composer.lock b/composer.lock index df54b90a3..831d28ec1 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": "5c846e4b9f655c018d30cad74cb5ecca", + "content-hash": "d404d30f1318f2b9a9171acdef966900", "packages": [ { "name": "adhocore/jwt", @@ -2833,12 +2833,12 @@ "source": { "type": "git", "url": "https://github.com/appwrite/sdk-generator.git", - "reference": "3203428b4139e0ac2c0e46f1e5dff11c6a084f17" + "reference": "034ee359ba97c0d5a4727639463b645802332bf6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/appwrite/sdk-generator/zipball/3203428b4139e0ac2c0e46f1e5dff11c6a084f17", - "reference": "3203428b4139e0ac2c0e46f1e5dff11c6a084f17", + "url": "https://api.github.com/repos/appwrite/sdk-generator/zipball/034ee359ba97c0d5a4727639463b645802332bf6", + "reference": "034ee359ba97c0d5a4727639463b645802332bf6", "shasum": "" }, "require": { @@ -2853,7 +2853,6 @@ "brianium/paratest": "^6.4", "phpunit/phpunit": "^9.5.21" }, - "default-branch": true, "type": "library", "autoload": { "psr-4": { @@ -2876,7 +2875,7 @@ "issues": "https://github.com/appwrite/sdk-generator/issues", "source": "https://github.com/appwrite/sdk-generator/tree/feat-new-headers" }, - "time": "2022-08-10T12:49:12+00:00" + "time": "2022-08-19T09:16:17+00:00" }, { "name": "doctrine/instantiator", @@ -5348,14 +5347,7 @@ "time": "2022-08-12T06:47:24+00:00" } ], - "aliases": [ - { - "package": "appwrite/sdk-generator", - "version": "9999999-dev", - "alias": "0.19.5", - "alias_normalized": "0.19.5.0" - } - ], + "aliases": [], "minimum-stability": "stable", "stability-flags": { "appwrite/sdk-generator": 20 @@ -5383,5 +5375,5 @@ "platform-overrides": { "php": "8.0" }, - "plugin-api-version": "2.3.0" + "plugin-api-version": "2.2.0" } From e104f553cbd84a9de2137afd368e716b7db9de81 Mon Sep 17 00:00:00 2001 From: Christy Jacob Date: Fri, 19 Aug 2022 09:41:22 +0000 Subject: [PATCH 17/27] feat: use datetime filters for acessedAt --- app/config/collections.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/config/collections.php b/app/config/collections.php index a6024bd0a..9b030f6f6 100644 --- a/app/config/collections.php +++ b/app/config/collections.php @@ -977,14 +977,14 @@ $collections = [ ], [ '$id' => 'accessedAt', - 'type' => Database::, + 'type' => Database::VAR_DATETIME, 'format' => '', 'size' => 0, 'signed' => false, 'required' => false, 'default' => 0, 'array' => false, - 'filters' => [], + 'filters' => ['datetime'], ], [ '$id' => 'sdks', @@ -2847,14 +2847,14 @@ $collections = [ ], [ '$id' => 'accessedAt', - 'type' => Database::VAR_DATETIME, + 'type' => Database::VAR_INTEGER, 'format' => '', 'size' => 0, 'signed' => false, 'required' => true, 'default' => null, 'array' => false, - 'filters' => ['datetime'], + 'filters' => [], ], [ '$id' => 'signature', From 28d9e159808c5aed4ba05defe931c166c188ef98 Mon Sep 17 00:00:00 2001 From: Christy Jacob Date: Fri, 19 Aug 2022 09:45:36 +0000 Subject: [PATCH 18/27] feat: update response model --- src/Appwrite/Utopia/Response/Model/Key.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/Appwrite/Utopia/Response/Model/Key.php b/src/Appwrite/Utopia/Response/Model/Key.php index 5a5fefa8f..501510c45 100644 --- a/src/Appwrite/Utopia/Response/Model/Key.php +++ b/src/Appwrite/Utopia/Response/Model/Key.php @@ -59,10 +59,11 @@ class Key extends Model 'example' => '919c2d18fb5d4...a2ae413da83346ad2', ]) ->addRule('accessedAt', [ - 'type' => self::TYPE_INTEGER, + 'type' => self::TYPE_DATETIME_EXAMPLE, 'description' => 'Most recent access date in Unix timestamp.', 'default' => null, - 'example' => '1653990687', + 'default' => '', + 'example' => self::TYPE_DATETIME_EXAMPLE ]) ->addRule('sdks', [ 'type' => self::TYPE_STRING, From 74a5bd25564125a2571456d1a8fd4e543e87246f Mon Sep 17 00:00:00 2001 From: Christy Jacob Date: Fri, 19 Aug 2022 09:54:26 +0000 Subject: [PATCH 19/27] feat: update default values --- app/config/collections.php | 4 ++-- app/controllers/api/projects.php | 2 +- app/controllers/mock.php | 1 + 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/app/config/collections.php b/app/config/collections.php index 9b030f6f6..428609365 100644 --- a/app/config/collections.php +++ b/app/config/collections.php @@ -976,13 +976,13 @@ $collections = [ 'filters' => ['datetime'], ], [ - '$id' => 'accessedAt', + '$id' => ID::custom('accessedAt'), 'type' => Database::VAR_DATETIME, 'format' => '', 'size' => 0, 'signed' => false, 'required' => false, - 'default' => 0, + 'default' => null, 'array' => false, 'filters' => ['datetime'], ], diff --git a/app/controllers/api/projects.php b/app/controllers/api/projects.php index d220964a5..d23349c10 100644 --- a/app/controllers/api/projects.php +++ b/app/controllers/api/projects.php @@ -866,7 +866,7 @@ App::post('/v1/projects/:projectId/keys') 'scopes' => $scopes, 'expire' => $expire, 'sdks' => [], - 'accessedAt' => 0, + 'accessedAt' => null, 'secret' => \bin2hex(\random_bytes(128)), ]); diff --git a/app/controllers/mock.php b/app/controllers/mock.php index 5473af649..80b9a4f0a 100644 --- a/app/controllers/mock.php +++ b/app/controllers/mock.php @@ -396,6 +396,7 @@ App::get('/v1/mock/tests/general/empty') $response->noContent(); }); +/** Endpoint to test if required headers are sent from the SDK */ App::get('/v1/mock/tests/general/headers') ->desc('Get headers') ->groups(['mock']) From dbd7afeda0b09801fdfce312de265559fcf65cf7 Mon Sep 17 00:00:00 2001 From: Christy Jacob Date: Fri, 19 Aug 2022 09:58:11 +0000 Subject: [PATCH 20/27] feat: update default values --- app/config/collections.php | 2 +- src/Appwrite/Utopia/Response/Model/Key.php | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/app/config/collections.php b/app/config/collections.php index 428609365..36f676167 100644 --- a/app/config/collections.php +++ b/app/config/collections.php @@ -987,7 +987,7 @@ $collections = [ 'filters' => ['datetime'], ], [ - '$id' => 'sdks', + '$id' => ID::custom('sdks'), 'type' => Database::VAR_STRING, 'format' => '', 'size' => Database::LENGTH_KEY, diff --git a/src/Appwrite/Utopia/Response/Model/Key.php b/src/Appwrite/Utopia/Response/Model/Key.php index 501510c45..e5879d293 100644 --- a/src/Appwrite/Utopia/Response/Model/Key.php +++ b/src/Appwrite/Utopia/Response/Model/Key.php @@ -62,7 +62,6 @@ class Key extends Model 'type' => self::TYPE_DATETIME_EXAMPLE, 'description' => 'Most recent access date in Unix timestamp.', 'default' => null, - 'default' => '', 'example' => self::TYPE_DATETIME_EXAMPLE ]) ->addRule('sdks', [ From 7673fb44e576c07c6c62b9f600b1d8e4413985e6 Mon Sep 17 00:00:00 2001 From: Christy Jacob Date: Fri, 19 Aug 2022 10:03:54 +0000 Subject: [PATCH 21/27] feat: update default values --- src/Appwrite/Utopia/Response/Model/Key.php | 4 ++-- src/Appwrite/Utopia/Response/Model/User.php | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Appwrite/Utopia/Response/Model/Key.php b/src/Appwrite/Utopia/Response/Model/Key.php index e5879d293..d404db72d 100644 --- a/src/Appwrite/Utopia/Response/Model/Key.php +++ b/src/Appwrite/Utopia/Response/Model/Key.php @@ -59,9 +59,9 @@ class Key extends Model 'example' => '919c2d18fb5d4...a2ae413da83346ad2', ]) ->addRule('accessedAt', [ - 'type' => self::TYPE_DATETIME_EXAMPLE, + 'type' => self::TYPE_DATETIME, 'description' => 'Most recent access date in Unix timestamp.', - 'default' => null, + 'default' => '', 'example' => self::TYPE_DATETIME_EXAMPLE ]) ->addRule('sdks', [ diff --git a/src/Appwrite/Utopia/Response/Model/User.php b/src/Appwrite/Utopia/Response/Model/User.php index 2c6cccbdd..4462fe63f 100644 --- a/src/Appwrite/Utopia/Response/Model/User.php +++ b/src/Appwrite/Utopia/Response/Model/User.php @@ -65,7 +65,7 @@ class User extends Model ->addRule('registration', [ 'type' => self::TYPE_DATETIME, 'description' => 'User registration date in Datetime.', - 'default' => null, + 'default' => '', 'example' => self::TYPE_DATETIME_EXAMPLE, ]) ->addRule('status', [ From ca25d329aeb5bcba3715c483facb4c09aa8c5183 Mon Sep 17 00:00:00 2001 From: Christy Jacob Date: Fri, 19 Aug 2022 20:22:38 +0530 Subject: [PATCH 22/27] feat: update date time calculation --- app/controllers/general.php | 7 ++++--- composer.lock | 2 +- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/app/controllers/general.php b/app/controllers/general.php index a1f9450a1..0a046185d 100644 --- a/app/controllers/general.php +++ b/app/controllers/general.php @@ -306,8 +306,9 @@ App::init() Authorization::setRole(Auth::USER_ROLE_APPS); Authorization::setDefaultStatus(false); // Cancel security segmentation for API keys. - if (time() > $key->getAttribute('accessedAt', 0) + APP_KEY_ACCCESS) { - $key->setAttribute('accessedAt', time()); + $accessedAt = $key->getAttribute('accessedAt', ''); + if (DateTime::formatTz(DateTime::addSeconds(new \DateTime(), -APP_KEY_ACCCESS)) > $accessedAt) { + $key->setAttribute('accessedAt', DateTime::now()); $dbForConsole->updateDocument('keys', $key->getId(), $key); $dbForConsole->deleteCachedDocument('projects', $project->getId()); } @@ -321,7 +322,7 @@ App::init() $key->setAttribute('sdks', $sdks); /** Update access time as well */ - $key->setAttribute('accessedAt', time()); + $key->setAttribute('accessedAt', Datetime::now()); $dbForConsole->updateDocument('keys', $key->getId(), $key); $dbForConsole->deleteCachedDocument('projects', $project->getId()); } diff --git a/composer.lock b/composer.lock index 831d28ec1..8864cd1c6 100644 --- a/composer.lock +++ b/composer.lock @@ -5375,5 +5375,5 @@ "platform-overrides": { "php": "8.0" }, - "plugin-api-version": "2.2.0" + "plugin-api-version": "2.3.0" } From 7952dac85e4cac5904c1eced2076fd217a88136a Mon Sep 17 00:00:00 2001 From: Christy Jacob Date: Sat, 20 Aug 2022 07:41:07 +0000 Subject: [PATCH 23/27] feat: linter fixes --- app/controllers/general.php | 2 +- composer.lock | 14 +++++++------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/app/controllers/general.php b/app/controllers/general.php index 0a046185d..221e69678 100644 --- a/app/controllers/general.php +++ b/app/controllers/general.php @@ -306,7 +306,7 @@ App::init() Authorization::setRole(Auth::USER_ROLE_APPS); Authorization::setDefaultStatus(false); // Cancel security segmentation for API keys. - $accessedAt = $key->getAttribute('accessedAt', ''); + $accessedAt = $key->getAttribute('accessedAt', ''); if (DateTime::formatTz(DateTime::addSeconds(new \DateTime(), -APP_KEY_ACCCESS)) > $accessedAt) { $key->setAttribute('accessedAt', DateTime::now()); $dbForConsole->updateDocument('keys', $key->getId(), $key); diff --git a/composer.lock b/composer.lock index 8864cd1c6..f9221fb8a 100644 --- a/composer.lock +++ b/composer.lock @@ -3525,23 +3525,23 @@ }, { "name": "phpunit/php-code-coverage", - "version": "9.2.15", + "version": "9.2.16", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "2e9da11878c4202f97915c1cb4bb1ca318a63f5f" + "reference": "2593003befdcc10db5e213f9f28814f5aa8ac073" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/2e9da11878c4202f97915c1cb4bb1ca318a63f5f", - "reference": "2e9da11878c4202f97915c1cb4bb1ca318a63f5f", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/2593003befdcc10db5e213f9f28814f5aa8ac073", + "reference": "2593003befdcc10db5e213f9f28814f5aa8ac073", "shasum": "" }, "require": { "ext-dom": "*", "ext-libxml": "*", "ext-xmlwriter": "*", - "nikic/php-parser": "^4.13.0", + "nikic/php-parser": "^4.14", "php": ">=7.3", "phpunit/php-file-iterator": "^3.0.3", "phpunit/php-text-template": "^2.0.2", @@ -3590,7 +3590,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.15" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.16" }, "funding": [ { @@ -3598,7 +3598,7 @@ "type": "github" } ], - "time": "2022-03-07T09:28:20+00:00" + "time": "2022-08-20T05:26:47+00:00" }, { "name": "phpunit/php-file-iterator", From 8cacf91e0995ea7c8f357fa07310cf97da6c07f4 Mon Sep 17 00:00:00 2001 From: Christy Jacob Date: Sat, 27 Aug 2022 20:07:55 +0000 Subject: [PATCH 24/27] feat: fix stats test namespace --- composer.lock | 12 ++++++------ tests/unit/Usage/StatsTest.php | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/composer.lock b/composer.lock index 2d769c72e..16da46213 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": "1145ff29befcc4aa21b5002da0b8319c", + "content-hash": "039de21eff3a27955696a9f6f645c548", "packages": [ { "name": "adhocore/jwt", @@ -2833,12 +2833,12 @@ "source": { "type": "git", "url": "https://github.com/appwrite/sdk-generator.git", - "reference": "1a67d9dcd2884a6a708176955f83e319ac53059e" + "reference": "532d4d15ec8f11539972f2848c2e230c49b24f65" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/appwrite/sdk-generator/zipball/1a67d9dcd2884a6a708176955f83e319ac53059e", - "reference": "1a67d9dcd2884a6a708176955f83e319ac53059e", + "url": "https://api.github.com/repos/appwrite/sdk-generator/zipball/532d4d15ec8f11539972f2848c2e230c49b24f65", + "reference": "532d4d15ec8f11539972f2848c2e230c49b24f65", "shasum": "" }, "require": { @@ -2875,7 +2875,7 @@ "issues": "https://github.com/appwrite/sdk-generator/issues", "source": "https://github.com/appwrite/sdk-generator/tree/feat-new-headers" }, - "time": "2022-08-19T10:03:22+00:00" + "time": "2022-08-20T07:42:55+00:00" }, { "name": "doctrine/instantiator", @@ -5375,5 +5375,5 @@ "platform-overrides": { "php": "8.0" }, - "plugin-api-version": "2.3.0" + "plugin-api-version": "2.2.0" } diff --git a/tests/unit/Usage/StatsTest.php b/tests/unit/Usage/StatsTest.php index 29db96754..0b39dfdaa 100644 --- a/tests/unit/Usage/StatsTest.php +++ b/tests/unit/Usage/StatsTest.php @@ -1,6 +1,6 @@ Date: Tue, 30 Aug 2022 14:04:42 +0000 Subject: [PATCH 25/27] feat: added tests --- composer.lock | 70 +++++++++++-------- .../Projects/ProjectsConsoleClientTest.php | 33 +++++++++ 2 files changed, 72 insertions(+), 31 deletions(-) diff --git a/composer.lock b/composer.lock index 16da46213..1b0252a9c 100644 --- a/composer.lock +++ b/composer.lock @@ -481,16 +481,16 @@ }, { "name": "guzzlehttp/guzzle", - "version": "7.4.5", + "version": "7.5.0", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "1dd98b0564cb3f6bd16ce683cb755f94c10fbd82" + "reference": "b50a2a1251152e43f6a37f0fa053e730a67d25ba" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/1dd98b0564cb3f6bd16ce683cb755f94c10fbd82", - "reference": "1dd98b0564cb3f6bd16ce683cb755f94c10fbd82", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/b50a2a1251152e43f6a37f0fa053e730a67d25ba", + "reference": "b50a2a1251152e43f6a37f0fa053e730a67d25ba", "shasum": "" }, "require": { @@ -505,10 +505,10 @@ "psr/http-client-implementation": "1.0" }, "require-dev": { - "bamarni/composer-bin-plugin": "^1.4.1", + "bamarni/composer-bin-plugin": "^1.8.1", "ext-curl": "*", "php-http/client-integration-tests": "^3.0", - "phpunit/phpunit": "^8.5.5 || ^9.3.5", + "phpunit/phpunit": "^8.5.29 || ^9.5.23", "psr/log": "^1.1 || ^2.0 || ^3.0" }, "suggest": { @@ -518,8 +518,12 @@ }, "type": "library", "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + }, "branch-alias": { - "dev-master": "7.4-dev" + "dev-master": "7.5-dev" } }, "autoload": { @@ -585,7 +589,7 @@ ], "support": { "issues": "https://github.com/guzzle/guzzle/issues", - "source": "https://github.com/guzzle/guzzle/tree/7.4.5" + "source": "https://github.com/guzzle/guzzle/tree/7.5.0" }, "funding": [ { @@ -601,20 +605,20 @@ "type": "tidelift" } ], - "time": "2022-06-20T22:16:13+00:00" + "time": "2022-08-28T15:39:27+00:00" }, { "name": "guzzlehttp/promises", - "version": "1.5.1", + "version": "1.5.2", "source": { "type": "git", "url": "https://github.com/guzzle/promises.git", - "reference": "fe752aedc9fd8fcca3fe7ad05d419d32998a06da" + "reference": "b94b2807d85443f9719887892882d0329d1e2598" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/fe752aedc9fd8fcca3fe7ad05d419d32998a06da", - "reference": "fe752aedc9fd8fcca3fe7ad05d419d32998a06da", + "url": "https://api.github.com/repos/guzzle/promises/zipball/b94b2807d85443f9719887892882d0329d1e2598", + "reference": "b94b2807d85443f9719887892882d0329d1e2598", "shasum": "" }, "require": { @@ -669,7 +673,7 @@ ], "support": { "issues": "https://github.com/guzzle/promises/issues", - "source": "https://github.com/guzzle/promises/tree/1.5.1" + "source": "https://github.com/guzzle/promises/tree/1.5.2" }, "funding": [ { @@ -685,20 +689,20 @@ "type": "tidelift" } ], - "time": "2021-10-22T20:56:57+00:00" + "time": "2022-08-28T14:55:35+00:00" }, { "name": "guzzlehttp/psr7", - "version": "2.4.0", + "version": "2.4.1", "source": { "type": "git", "url": "https://github.com/guzzle/psr7.git", - "reference": "13388f00956b1503577598873fffb5ae994b5737" + "reference": "69568e4293f4fa993f3b0e51c9723e1e17c41379" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/13388f00956b1503577598873fffb5ae994b5737", - "reference": "13388f00956b1503577598873fffb5ae994b5737", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/69568e4293f4fa993f3b0e51c9723e1e17c41379", + "reference": "69568e4293f4fa993f3b0e51c9723e1e17c41379", "shasum": "" }, "require": { @@ -712,15 +716,19 @@ "psr/http-message-implementation": "1.0" }, "require-dev": { - "bamarni/composer-bin-plugin": "^1.4.1", + "bamarni/composer-bin-plugin": "^1.8.1", "http-interop/http-factory-tests": "^0.9", - "phpunit/phpunit": "^8.5.8 || ^9.3.10" + "phpunit/phpunit": "^8.5.29 || ^9.5.23" }, "suggest": { "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" }, "type": "library", "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + }, "branch-alias": { "dev-master": "2.4-dev" } @@ -784,7 +792,7 @@ ], "support": { "issues": "https://github.com/guzzle/psr7/issues", - "source": "https://github.com/guzzle/psr7/tree/2.4.0" + "source": "https://github.com/guzzle/psr7/tree/2.4.1" }, "funding": [ { @@ -800,7 +808,7 @@ "type": "tidelift" } ], - "time": "2022-06-20T21:43:11+00:00" + "time": "2022-08-28T14:45:39+00:00" }, { "name": "influxdb/influxdb-php", @@ -4801,16 +4809,16 @@ }, { "name": "sebastian/type", - "version": "3.0.0", + "version": "3.1.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/type.git", - "reference": "b233b84bc4465aff7b57cf1c4bc75c86d00d6dad" + "reference": "fb44e1cc6e557418387ad815780360057e40753e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/b233b84bc4465aff7b57cf1c4bc75c86d00d6dad", - "reference": "b233b84bc4465aff7b57cf1c4bc75c86d00d6dad", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/fb44e1cc6e557418387ad815780360057e40753e", + "reference": "fb44e1cc6e557418387ad815780360057e40753e", "shasum": "" }, "require": { @@ -4822,7 +4830,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-master": "3.1-dev" } }, "autoload": { @@ -4845,7 +4853,7 @@ "homepage": "https://github.com/sebastianbergmann/type", "support": { "issues": "https://github.com/sebastianbergmann/type/issues", - "source": "https://github.com/sebastianbergmann/type/tree/3.0.0" + "source": "https://github.com/sebastianbergmann/type/tree/3.1.0" }, "funding": [ { @@ -4853,7 +4861,7 @@ "type": "github" } ], - "time": "2022-03-15T09:54:48+00:00" + "time": "2022-08-29T06:55:37+00:00" }, { "name": "sebastian/version", @@ -5375,5 +5383,5 @@ "platform-overrides": { "php": "8.0" }, - "plugin-api-version": "2.2.0" + "plugin-api-version": "2.3.0" } diff --git a/tests/e2e/Services/Projects/ProjectsConsoleClientTest.php b/tests/e2e/Services/Projects/ProjectsConsoleClientTest.php index 9b270c559..858845b82 100644 --- a/tests/e2e/Services/Projects/ProjectsConsoleClientTest.php +++ b/tests/e2e/Services/Projects/ProjectsConsoleClientTest.php @@ -851,6 +851,7 @@ class ProjectsConsoleClientTest extends Scope 'content-type' => 'application/json', 'x-appwrite-project' => $id, 'x-appwrite-key' => $keySecret, + 'x-sdk-name' => 'python' ])); $this->assertEquals(200, $response['headers']['status-code']); @@ -859,6 +860,7 @@ class ProjectsConsoleClientTest extends Scope 'content-type' => 'application/json', 'x-appwrite-project' => $id, 'x-appwrite-key' => $keySecret, + 'x-sdk-name' => 'php' ]), [ 'teamId' => ID::unique(), 'name' => 'Arsenal' @@ -866,6 +868,21 @@ class ProjectsConsoleClientTest extends Scope $this->assertEquals(201, $response['headers']['status-code']); + /** Check that the API key has been updated */ + $response = $this->client->call(Client::METHOD_GET, '/projects/' . $id . '/keys/' . $keyId, array_merge([ + 'content-type' => 'application/json', + 'x-appwrite-project' => $this->getProject()['$id'], + 'cookie' => 'a_session_console=' . $this->getRoot()['session'], + ]), []); + + $this->assertEquals(200, $response['headers']['status-code']); + $this->assertArrayHasKey('sdks', $response['body']); + $this->assertCount(2, $response['body']['sdks']); + $this->assertArrayHasKey('python', $response['body']['sdks']); + $this->assertArrayHasKey('php', $response['body']['sdks']); + $this->assertArrayHasKey('accessedAt', $response['body']); + $this->assertNotEmpty($response['body']['accessedAt']); + // Cleanup $response = $this->client->call(Client::METHOD_DELETE, '/projects/' . $id . '/keys/' . $keyId, array_merge([ @@ -1183,6 +1200,10 @@ class ProjectsConsoleClientTest extends Scope $this->assertContains('teams.read', $response['body']['scopes']); $this->assertContains('teams.write', $response['body']['scopes']); $this->assertNotEmpty($response['body']['secret']); + $this->assertArrayHasKey('sdks', $response['body']); + $this->assertEmpty($response['body']['sdks']); + $this->assertArrayHasKey('accessedAt', $response['body']); + $this->assertEmpty($response['body']['accessedAt']); $data = array_merge($data, [ 'keyId' => $response['body']['$id'], @@ -1252,6 +1273,10 @@ class ProjectsConsoleClientTest extends Scope $this->assertContains('teams.write', $response['body']['scopes']); $this->assertCount(2, $response['body']['scopes']); $this->assertNotEmpty($response['body']['secret']); + $this->assertArrayHasKey('sdks', $response['body']); + $this->assertEmpty($response['body']['sdks']); + $this->assertArrayHasKey('accessedAt', $response['body']); + $this->assertEmpty($response['body']['accessedAt']); /** * Test for FAILURE @@ -1360,6 +1385,10 @@ class ProjectsConsoleClientTest extends Scope $this->assertContains('users.write', $response['body']['scopes']); $this->assertContains('collections.read', $response['body']['scopes']); $this->assertCount(3, $response['body']['scopes']); + $this->assertArrayHasKey('sdks', $response['body']); + $this->assertEmpty($response['body']['sdks']); + $this->assertArrayHasKey('accessedAt', $response['body']); + $this->assertEmpty($response['body']['accessedAt']); $response = $this->client->call(Client::METHOD_GET, '/projects/' . $id . '/keys/' . $keyId, array_merge([ 'content-type' => 'application/json', @@ -1374,6 +1403,10 @@ class ProjectsConsoleClientTest extends Scope $this->assertContains('users.write', $response['body']['scopes']); $this->assertContains('collections.read', $response['body']['scopes']); $this->assertCount(3, $response['body']['scopes']); + $this->assertArrayHasKey('sdks', $response['body']); + $this->assertEmpty($response['body']['sdks']); + $this->assertArrayHasKey('accessedAt', $response['body']); + $this->assertEmpty($response['body']['accessedAt']); /** * Test for FAILURE From 422cedf7180170b2db1775ca7730b337db9599bd Mon Sep 17 00:00:00 2001 From: Christy Jacob Date: Tue, 30 Aug 2022 17:33:54 +0000 Subject: [PATCH 26/27] feat: fix tests --- composer.lock | 12 ++++++------ .../Services/Projects/ProjectsConsoleClientTest.php | 4 ++-- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/composer.lock b/composer.lock index 1b0252a9c..da031d3cb 100644 --- a/composer.lock +++ b/composer.lock @@ -3533,16 +3533,16 @@ }, { "name": "phpunit/php-code-coverage", - "version": "9.2.16", + "version": "9.2.17", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "2593003befdcc10db5e213f9f28814f5aa8ac073" + "reference": "aa94dc41e8661fe90c7316849907cba3007b10d8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/2593003befdcc10db5e213f9f28814f5aa8ac073", - "reference": "2593003befdcc10db5e213f9f28814f5aa8ac073", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/aa94dc41e8661fe90c7316849907cba3007b10d8", + "reference": "aa94dc41e8661fe90c7316849907cba3007b10d8", "shasum": "" }, "require": { @@ -3598,7 +3598,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.16" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.17" }, "funding": [ { @@ -3606,7 +3606,7 @@ "type": "github" } ], - "time": "2022-08-20T05:26:47+00:00" + "time": "2022-08-30T12:24:04+00:00" }, { "name": "phpunit/php-file-iterator", diff --git a/tests/e2e/Services/Projects/ProjectsConsoleClientTest.php b/tests/e2e/Services/Projects/ProjectsConsoleClientTest.php index 858845b82..fb8af9975 100644 --- a/tests/e2e/Services/Projects/ProjectsConsoleClientTest.php +++ b/tests/e2e/Services/Projects/ProjectsConsoleClientTest.php @@ -878,8 +878,8 @@ class ProjectsConsoleClientTest extends Scope $this->assertEquals(200, $response['headers']['status-code']); $this->assertArrayHasKey('sdks', $response['body']); $this->assertCount(2, $response['body']['sdks']); - $this->assertArrayHasKey('python', $response['body']['sdks']); - $this->assertArrayHasKey('php', $response['body']['sdks']); + $this->assertContains('python', $response['body']['sdks']); + $this->assertContains('php', $response['body']['sdks']); $this->assertArrayHasKey('accessedAt', $response['body']); $this->assertNotEmpty($response['body']['accessedAt']); From 3ee39540436642daa6cfb47ef6ef6ea78c6e41df Mon Sep 17 00:00:00 2001 From: Christy Jacob Date: Tue, 30 Aug 2022 18:26:02 +0000 Subject: [PATCH 27/27] feat: linter --- tests/e2e/Services/Projects/ProjectsConsoleClientTest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/e2e/Services/Projects/ProjectsConsoleClientTest.php b/tests/e2e/Services/Projects/ProjectsConsoleClientTest.php index fb8af9975..96979461f 100644 --- a/tests/e2e/Services/Projects/ProjectsConsoleClientTest.php +++ b/tests/e2e/Services/Projects/ProjectsConsoleClientTest.php @@ -882,7 +882,7 @@ class ProjectsConsoleClientTest extends Scope $this->assertContains('php', $response['body']['sdks']); $this->assertArrayHasKey('accessedAt', $response['body']); $this->assertNotEmpty($response['body']['accessedAt']); - + // Cleanup $response = $this->client->call(Client::METHOD_DELETE, '/projects/' . $id . '/keys/' . $keyId, array_merge([