From c868f8abcbdb629c1db171a3ec64b452e34cc727 Mon Sep 17 00:00:00 2001 From: Bradley Schofield Date: Tue, 16 Nov 2021 14:28:56 +0000 Subject: [PATCH 1/5] Fire event triggers when a account is created --- app/controllers/api/account.php | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/app/controllers/api/account.php b/app/controllers/api/account.php index c236509dd6..d25ac16d4b 100644 --- a/app/controllers/api/account.php +++ b/app/controllers/api/account.php @@ -20,6 +20,7 @@ use Appwrite\Database\Validator\UID; use Appwrite\Database\Validator\Authorization; use Appwrite\Detector\Detector; +use Appwrite\Event\Event; use Appwrite\Template\Template; use Appwrite\OpenSSL\OpenSSL; use Appwrite\URL\URL as URLParser; @@ -524,7 +525,34 @@ 'registration' => \time(), 'reset' => false, 'name' => $name, + 'prefs' => [], ], ['email' => $email]); + + $createUserEvent = clone $audits; + + $createUserEvent + ->setParam('eventData', $response->output($user, Response::MODEL_USER)) + ->setParam('event', 'account.create') + ->setParam('userId', $user->getId()) + ->setParam('resource', 'users/'.$user->getId()) + ->setParam('data', ['provider' => $provider]) + ->trigger(); + + $functionsEvent = clone $events; + + $functionsEvent + ->setQueue('v1-functions') + ->setClass('FunctionsV1') + ->setParam('eventData', $response->output($user, Response::MODEL_USER)) + ->trigger(); + + $webhookEvent = clone $events; + + $webhookEvent + ->setQueue('v1-webhooks') + ->setClass('WebhooksV1') + ->setParam('eventData', $response->output($user, Response::MODEL_USER)) + ->trigger(); } catch (Duplicate $th) { throw new Exception('Account already exists', 409); } From 12a2abd97056232873c22154658f6c9aa9f52edb Mon Sep 17 00:00:00 2001 From: Bradley Schofield Date: Wed, 17 Nov 2021 15:01:09 +0000 Subject: [PATCH 2/5] Update account.php --- app/controllers/api/account.php | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/app/controllers/api/account.php b/app/controllers/api/account.php index d25ac16d4b..9f57e410fc 100644 --- a/app/controllers/api/account.php +++ b/app/controllers/api/account.php @@ -543,7 +543,10 @@ $functionsEvent ->setQueue('v1-functions') ->setClass('FunctionsV1') + ->setParam('event', 'account.create') ->setParam('eventData', $response->output($user, Response::MODEL_USER)) + ->setParam('userId', $user->getId()) + ->setParam('resource', 'users/'.$user->getId()) ->trigger(); $webhookEvent = clone $events; @@ -551,7 +554,10 @@ $webhookEvent ->setQueue('v1-webhooks') ->setClass('WebhooksV1') + ->setParam('event', 'account.create') ->setParam('eventData', $response->output($user, Response::MODEL_USER)) + ->setParam('userId', $user->getId()) + ->setParam('resource', 'users/'.$user->getId()) ->trigger(); } catch (Duplicate $th) { throw new Exception('Account already exists', 409); From ed0606088da7bd525a106b952729a00e84e4600f Mon Sep 17 00:00:00 2001 From: Bradley Schofield Date: Thu, 18 Nov 2021 09:22:04 +0000 Subject: [PATCH 3/5] Add Tests --- .../Functions/FunctionsCustomServerTest.php | 52 +++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/tests/e2e/Services/Functions/FunctionsCustomServerTest.php b/tests/e2e/Services/Functions/FunctionsCustomServerTest.php index 4534508b9b..27abe1af39 100644 --- a/tests/e2e/Services/Functions/FunctionsCustomServerTest.php +++ b/tests/e2e/Services/Functions/FunctionsCustomServerTest.php @@ -140,6 +140,7 @@ public function testUpdate($data):array 'events' => [ 'account.update.name', 'account.update.email', + 'account.create' ], 'schedule' => '0 0 1 1 *', 'timeout' => 5, @@ -159,6 +160,7 @@ public function testUpdate($data):array $this->assertEquals([ 'account.update.name', 'account.update.email', + 'account.create' ], $response1['body']['events']); $this->assertEquals('0 0 1 1 *', $response1['body']['schedule']); $this->assertEquals(5, $response1['body']['timeout']); @@ -391,6 +393,56 @@ public function testGetExecution(array $data):array return $data; } + /** + * @depends testGetExecution + */ + public function testOAuthCreateEvent($data):array + { + // Fire Mock OAuth Creation + $provider = 'mock'; + $appId = '1'; + $secret = '123456'; + + $response = $this->client->call(Client::METHOD_PATCH, '/projects/'.$this->getProject()['$id'].'/oauth2', array_merge([ + 'origin' => 'http://localhost', + 'content-type' => 'application/json', + 'x-appwrite-project' => 'console', + 'cookie' => 'a_session_console=' . $this->getRoot()['session'], + ]), [ + 'provider' => $provider, + 'appId' => $appId, + 'secret' => $secret, + ]); + + $this->assertEquals($response['headers']['status-code'], 200); + + $response = $this->client->call(Client::METHOD_GET, '/account/sessions/oauth2/'.$provider, array_merge([ + 'origin' => 'http://localhost', + 'content-type' => 'application/json', + 'x-appwrite-project' => $this->getProject()['$id'], + ]), [ + 'success' => 'http://localhost/v1/mock/tests/general/oauth2/success', + 'failure' => 'http://localhost/v1/mock/tests/general/oauth2/failure', + ]); + + $this->assertEquals(200, $response['headers']['status-code']); + $this->assertEquals('success', $response['body']['result']); + + // Check if function got executed. + + // Get latest execution logs + $executions = $this->client->call(Client::METHOD_GET, '/functions/'.$data['functionId'].'/executions', array_merge([ + 'content-type' => 'application/json', + 'x-appwrite-project' => $this->getProject()['$id'], + ], $this->getHeaders())); + + $latestExecution = $executions['body']['executions'][1]; + + $this->assertEquals('event', $latestExecution['trigger']); + + return []; + } + /** * @depends testGetExecution */ From 21fd0657c994dec98795abdfffdec6193548d825 Mon Sep 17 00:00:00 2001 From: Bradley Schofield Date: Thu, 18 Nov 2021 10:07:48 +0000 Subject: [PATCH 4/5] Update FunctionsCustomServerTest.php --- tests/e2e/Services/Functions/FunctionsCustomServerTest.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/e2e/Services/Functions/FunctionsCustomServerTest.php b/tests/e2e/Services/Functions/FunctionsCustomServerTest.php index 27abe1af39..4465ee5ecb 100644 --- a/tests/e2e/Services/Functions/FunctionsCustomServerTest.php +++ b/tests/e2e/Services/Functions/FunctionsCustomServerTest.php @@ -428,6 +428,8 @@ public function testOAuthCreateEvent($data):array $this->assertEquals(200, $response['headers']['status-code']); $this->assertEquals('success', $response['body']['result']); + sleep(5); + // Check if function got executed. // Get latest execution logs From eea51cb0a47e4522a797bf002fdc15dd03c7a136 Mon Sep 17 00:00:00 2001 From: Bradley Schofield Date: Thu, 18 Nov 2021 10:30:26 +0000 Subject: [PATCH 5/5] Improve Tests --- app/controllers/api/account.php | 7 ++++--- tests/e2e/Services/Functions/FunctionsCustomServerTest.php | 1 + 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/app/controllers/api/account.php b/app/controllers/api/account.php index 9f57e410fc..bc024b0948 100644 --- a/app/controllers/api/account.php +++ b/app/controllers/api/account.php @@ -529,9 +529,10 @@ ], ['email' => $email]); $createUserEvent = clone $audits; + $eventData = $response->output($user, Response::MODEL_USER); $createUserEvent - ->setParam('eventData', $response->output($user, Response::MODEL_USER)) + ->setParam('eventData', $eventData) ->setParam('event', 'account.create') ->setParam('userId', $user->getId()) ->setParam('resource', 'users/'.$user->getId()) @@ -544,7 +545,7 @@ ->setQueue('v1-functions') ->setClass('FunctionsV1') ->setParam('event', 'account.create') - ->setParam('eventData', $response->output($user, Response::MODEL_USER)) + ->setParam('eventData', $eventData) ->setParam('userId', $user->getId()) ->setParam('resource', 'users/'.$user->getId()) ->trigger(); @@ -555,7 +556,7 @@ ->setQueue('v1-webhooks') ->setClass('WebhooksV1') ->setParam('event', 'account.create') - ->setParam('eventData', $response->output($user, Response::MODEL_USER)) + ->setParam('eventData', $eventData) ->setParam('userId', $user->getId()) ->setParam('resource', 'users/'.$user->getId()) ->trigger(); diff --git a/tests/e2e/Services/Functions/FunctionsCustomServerTest.php b/tests/e2e/Services/Functions/FunctionsCustomServerTest.php index 4465ee5ecb..99521cf21b 100644 --- a/tests/e2e/Services/Functions/FunctionsCustomServerTest.php +++ b/tests/e2e/Services/Functions/FunctionsCustomServerTest.php @@ -441,6 +441,7 @@ public function testOAuthCreateEvent($data):array $latestExecution = $executions['body']['executions'][1]; $this->assertEquals('event', $latestExecution['trigger']); + $this->assertStringContainsString('account.create', $latestExecution['stdout']); return []; }