From 7ad4af8d912dbef80349c80333be2eaa7b55ed9e Mon Sep 17 00:00:00 2001 From: Bradley Schofield Date: Sun, 25 Feb 2024 17:30:26 +0000 Subject: [PATCH 1/3] Fix misssed items in Migrations and Response filters --- src/Appwrite/Migration/Version/V20.php | 13 +++++++- src/Appwrite/Utopia/Response/Filters/V17.php | 33 ++++++++++++++++++++ 2 files changed, 45 insertions(+), 1 deletion(-) diff --git a/src/Appwrite/Migration/Version/V20.php b/src/Appwrite/Migration/Version/V20.php index 0ef899588e..67ed21a03d 100644 --- a/src/Appwrite/Migration/Version/V20.php +++ b/src/Appwrite/Migration/Version/V20.php @@ -252,6 +252,14 @@ class V20 extends Migration Console::warning("'totpBackup' from {$id}: {$th->getMessage()}"); } + // Create challenges attribute + try { + $this->createAttributeFromCollection($this->projectDB, $id, 'challenges'); + $this->projectDB->purgeCachedCollection($id); + } catch (Throwable $th) { + Console::warning("'challenges' from {$id}: {$th->getMessage()}"); + } + break; case 'projects': // Rename providers authProviders to oAuthProviders @@ -543,8 +551,11 @@ class V20 extends Migration $document->setAttribute('expire', $expire); $factors = match ($document->getAttribute('provider')) { - Auth::SESSION_PROVIDER_ANONYMOUS => ['anonymous'], + Auth::SESSION_PROVIDER_MAGIC_URL, + Auth::SESSION_PROVIDER_OAUTH2 => ['email'], Auth::SESSION_PROVIDER_PHONE => ['phone'], + Auth::SESSION_PROVIDER_ANONYMOUS => ['anonymous'], + Auth::SESSION_PROVIDER_TOKEN => ['token'], default => ['password'], }; diff --git a/src/Appwrite/Utopia/Response/Filters/V17.php b/src/Appwrite/Utopia/Response/Filters/V17.php index cf62bcf488..09cba9a720 100644 --- a/src/Appwrite/Utopia/Response/Filters/V17.php +++ b/src/Appwrite/Utopia/Response/Filters/V17.php @@ -22,6 +22,16 @@ class V17 extends Filter case Response::MODEL_TOKEN: $parsedResponse = $this->parseToken($parsedResponse); break; + case Response::MODEL_MEMBERSHIP: + $parsedResponse = $this->parseMembership($parsedResponse); + break; + case Response::MODEL_SESSION: + $parsedResponse = $this->parseSession($parsedResponse); + break; + case Response::MODEL_WEBHOOK: + $parsedResponse = $this->parseWebhook($parsedResponse); + break; + } return $parsedResponse; @@ -30,6 +40,8 @@ class V17 extends Filter protected function parseUser(array $content) { unset($content['targets']); + unset($content['mfa']); + unset($content['totp']); return $content; } @@ -45,4 +57,25 @@ class V17 extends Filter unset($content['phrase']); return $content; } + + protected function parseMembership(array $content) + { + unset($content['mfa']); + return $content; + } + + protected function parseSession(array $content) + { + unset($content['factors']); + unset($content['secret']); + return $content; + } + + protected function parseWebhook(array $content) + { + unset($content['enabled']); + unset($content['logs']); + unset($content['attempts']); + return $content; + } } From f4b8ae8b88cd58971a9523d77a77f9f95764753d Mon Sep 17 00:00:00 2001 From: Bradley Schofield Date: Mon, 26 Feb 2024 11:50:25 +0000 Subject: [PATCH 2/3] Change factors code and update Response model tests --- src/Appwrite/Migration/Version/V20.php | 5 +- .../unit/Utopia/Response/Filters/V17Test.php | 69 +++++++++++++++++++ 2 files changed, 71 insertions(+), 3 deletions(-) diff --git a/src/Appwrite/Migration/Version/V20.php b/src/Appwrite/Migration/Version/V20.php index 67ed21a03d..30592e7d6a 100644 --- a/src/Appwrite/Migration/Version/V20.php +++ b/src/Appwrite/Migration/Version/V20.php @@ -551,12 +551,11 @@ class V20 extends Migration $document->setAttribute('expire', $expire); $factors = match ($document->getAttribute('provider')) { - Auth::SESSION_PROVIDER_MAGIC_URL, - Auth::SESSION_PROVIDER_OAUTH2 => ['email'], + Auth::SESSION_PROVIDER_EMAIL => ['password'], Auth::SESSION_PROVIDER_PHONE => ['phone'], Auth::SESSION_PROVIDER_ANONYMOUS => ['anonymous'], Auth::SESSION_PROVIDER_TOKEN => ['token'], - default => ['password'], + default => ['email'], }; $document->setAttribute('factors', $factors); diff --git a/tests/unit/Utopia/Response/Filters/V17Test.php b/tests/unit/Utopia/Response/Filters/V17Test.php index 25f4fb2f2e..c9001b1d30 100644 --- a/tests/unit/Utopia/Response/Filters/V17Test.php +++ b/tests/unit/Utopia/Response/Filters/V17Test.php @@ -73,6 +73,8 @@ class V17Test extends TestCase 'remove targets' => [ [ 'targets' => 'test', + 'mfa' => 'test', + 'totp' => 'test', ], [ ], @@ -116,4 +118,71 @@ class V17Test extends TestCase $this->assertEquals($expected, $result); } + + public function membershipProvider(): array + { + return [ + 'remove mfa' => [ + [ + 'mfa' => 'test', + ], + [ + ], + ], + ]; + } + + /** + * @dataProvider membershipProvider + */ + public function testMembership(array $content, array $expected): void + { + $model = Response::MODEL_MEMBERSHIP; + + $result = $this->filter->parse($content, $model); + + $this->assertEquals($expected, $result); + } + + public function sessionProvider(): array + { + return [ + 'remove factors and secrets' => [ + [ + 'factors' => 'test', + 'secret' => 'test', + ], + [ + ], + ] + ]; + } + + /** + * @dataProvider sessionProvider + */ + public function testSession(array $content, array $expected): void + { + $model = Response::MODEL_SESSION; + + $result = $this->filter->parse($content, $model); + + $this->assertEquals($expected, $result); + } + + public function webhookProvider(): array + { + return [ + 'remove webhook additions' => [ + [ + 'enabled' => true, + 'logs' => ['test', 'test'], + 'attempts' => 1 + ], + [ + ], + ], + ]; + } + } From 4050e93b1daa82a8e141368e7407faf64a648027 Mon Sep 17 00:00:00 2001 From: Bradley Schofield Date: Tue, 27 Feb 2024 13:19:35 +0000 Subject: [PATCH 3/3] Run Linter --- src/Appwrite/Utopia/Response/Filters/V17.php | 1 - tests/unit/Utopia/Response/Filters/V17Test.php | 1 - 2 files changed, 2 deletions(-) diff --git a/src/Appwrite/Utopia/Response/Filters/V17.php b/src/Appwrite/Utopia/Response/Filters/V17.php index 09cba9a720..b2d47e9e13 100644 --- a/src/Appwrite/Utopia/Response/Filters/V17.php +++ b/src/Appwrite/Utopia/Response/Filters/V17.php @@ -31,7 +31,6 @@ class V17 extends Filter case Response::MODEL_WEBHOOK: $parsedResponse = $this->parseWebhook($parsedResponse); break; - } return $parsedResponse; diff --git a/tests/unit/Utopia/Response/Filters/V17Test.php b/tests/unit/Utopia/Response/Filters/V17Test.php index c9001b1d30..136211a422 100644 --- a/tests/unit/Utopia/Response/Filters/V17Test.php +++ b/tests/unit/Utopia/Response/Filters/V17Test.php @@ -184,5 +184,4 @@ class V17Test extends TestCase ], ]; } - }