From cf3ffcdf32bdf4909d53e0de290bd3b9324fb1a4 Mon Sep 17 00:00:00 2001 From: Damodar Lohani Date: Sun, 18 Jul 2021 16:19:50 +0545 Subject: [PATCH 1/8] update create membership doc --- docs/references/teams/create-team-membership.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/references/teams/create-team-membership.md b/docs/references/teams/create-team-membership.md index a920c260be..c6d81de484 100644 --- a/docs/references/teams/create-team-membership.md +++ b/docs/references/teams/create-team-membership.md @@ -1,5 +1,5 @@ -Use this endpoint to invite a new member to join your team. An email with a link to join the team will be sent to the new member email address if the member doesn't exist in the project it will be created automatically. +Use this endpoint to invite a new member to join your team. If initiated from Client SDK, an email with a link to join the team will be sent to the new member's email address if the member doesn't exist in the project it will be created automatically. If initiated from server side SDKs, new member will automatically be added to the team. -Use the 'URL' parameter to redirect the user from the invitation email back to your app. When the user is redirected, use the [Update Team Membership Status](/docs/client/teams#teamsUpdateMembershipStatus) endpoint to allow the user to accept the invitation to the team. +Use the 'URL' parameter to redirect the user from the invitation email back to your app. When the user is redirected, use the [Update Team Membership Status](/docs/client/teams#teamsUpdateMembershipStatus) endpoint to allow the user to accept the invitation to the team. While calling from side SDKs the redirect url can be empty string. Please note that in order to avoid a [Redirect Attacks](https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URL's are the once from domains you have set when added your platforms in the console interface. \ No newline at end of file From c2f1389a568653fffdc385bbfce956ecea613421 Mon Sep 17 00:00:00 2001 From: Torsten Dittmann Date: Mon, 19 Jul 2021 17:09:39 +0200 Subject: [PATCH 2/8] fix(jwt): correct session validation --- app/init.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/init.php b/app/init.php index a139a4f841..6461f50acb 100644 --- a/app/init.php +++ b/app/init.php @@ -467,7 +467,7 @@ App::setResource('user', function($mode, $project, $console, $request, $response $user = $projectDB->getDocument($jwtUserId); } - if (empty($user->search('$id', $jwtSessionId, $user->getAttribute('tokens')))) { // Match JWT to active token + if (empty($user->search('$id', $jwtSessionId, $user->getAttribute('sessions')))) { // Match JWT to active token $user = new Document(['$id' => '', '$collection' => Database::SYSTEM_COLLECTION_USERS]); } } From 4e1bc7aa1d0c24cf4af43c08a88d082ece58cc0d Mon Sep 17 00:00:00 2001 From: Torsten Dittmann Date: Thu, 22 Jul 2021 11:02:07 +0200 Subject: [PATCH 3/8] feat(0.9.2): release --- app/init.php | 4 ++-- src/Appwrite/Migration/Migration.php | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/app/init.php b/app/init.php index a139a4f841..3ad673249c 100644 --- a/app/init.php +++ b/app/init.php @@ -47,8 +47,8 @@ const APP_USERAGENT = APP_NAME.'-Server v%s. Please report abuse at %s'; const APP_MODE_DEFAULT = 'default'; const APP_MODE_ADMIN = 'admin'; const APP_PAGING_LIMIT = 12; -const APP_CACHE_BUSTER = 149; -const APP_VERSION_STABLE = '0.9.1'; +const APP_CACHE_BUSTER = 150; +const APP_VERSION_STABLE = '0.9.2'; const APP_STORAGE_UPLOADS = '/storage/uploads'; const APP_STORAGE_FUNCTIONS = '/storage/functions'; const APP_STORAGE_CACHE = '/storage/cache'; diff --git a/src/Appwrite/Migration/Migration.php b/src/Appwrite/Migration/Migration.php index bd03e7d339..8eae515b9b 100644 --- a/src/Appwrite/Migration/Migration.php +++ b/src/Appwrite/Migration/Migration.php @@ -40,6 +40,7 @@ abstract class Migration '0.8.0' => 'V07', '0.9.0' => 'V08', '0.9.1' => 'V08', + '0.9.2' => 'V08', ]; /** From d235ed71908c9bdcf5c1ba1bfe66a8aa92e06dec Mon Sep 17 00:00:00 2001 From: Torsten Dittmann Date: Thu, 22 Jul 2021 11:04:17 +0200 Subject: [PATCH 4/8] chore(changelog): add 0.9.2 --- CHANGES.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGES.md b/CHANGES.md index 94b56bc7a0..54b353bd91 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,3 +1,9 @@ +# Version 0.9.2 + +## Bugs + +- Fixed JWT session validation (#1408) + # Version 0.9.1 ## Bugs From ca3d677596d952eeb992f3bb73787771fc672c8a Mon Sep 17 00:00:00 2001 From: Bradley Schofield Date: Thu, 22 Jul 2021 11:08:08 +0100 Subject: [PATCH 5/8] Make untarring the code file a blocking task --- app/workers/functions.php | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/app/workers/functions.php b/app/workers/functions.php index a85843b38d..bbb20b823e 100644 --- a/app/workers/functions.php +++ b/app/workers/functions.php @@ -425,15 +425,24 @@ class FunctionsV1 extends Worker " --workdir /usr/local/src". " ".\implode(" ", $vars). " {$runtime['image']}". - " sh -c 'mv /tmp/code.tar.gz /usr/local/src/code.tar.gz && tar -zxf /usr/local/src/code.tar.gz --strip 1 && rm /usr/local/src/code.tar.gz && tail -f /dev/null'" + " tail -f /dev/null" , '', $stdout, $stderr, 30); - $executionEnd = \microtime(true); - if($exitCode !== 0) { throw new Exception('Failed to create function environment: '.$stderr); } + $exitCodeUntar = Console::execute("docker exec ". + $container. + " sh -c 'mv /tmp/code.tar.gz /usr/local/src/code.tar.gz && tar -zxf /usr/local/src/code.tar.gz --strip 1 && rm /usr/local/src/code.tar.gz'" + , '', $stdout, $stderr, 60); + + if($exitCodeUntar !== 0) { + throw new Exception('Failed to extract tar: '.$stderr); + } + + $executionEnd = \microtime(true); + $list[$container] = [ 'name' => $container, 'online' => true, From 70d4c4d7beb7d51ba33501b7e3cb785347f211d4 Mon Sep 17 00:00:00 2001 From: Bradley Schofield Date: Thu, 22 Jul 2021 11:46:05 +0100 Subject: [PATCH 6/8] Update functions.php --- app/workers/functions.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/workers/functions.php b/app/workers/functions.php index bbb20b823e..2ab1f1f309 100644 --- a/app/workers/functions.php +++ b/app/workers/functions.php @@ -433,9 +433,9 @@ class FunctionsV1 extends Worker } $exitCodeUntar = Console::execute("docker exec ". - $container. - " sh -c 'mv /tmp/code.tar.gz /usr/local/src/code.tar.gz && tar -zxf /usr/local/src/code.tar.gz --strip 1 && rm /usr/local/src/code.tar.gz'" - , '', $stdout, $stderr, 60); + $container. + " sh -c 'mv /tmp/code.tar.gz /usr/local/src/code.tar.gz && tar -zxf /usr/local/src/code.tar.gz --strip 1 && rm /usr/local/src/code.tar.gz'" + , '', $stdout, $stderr, 60); if($exitCodeUntar !== 0) { throw new Exception('Failed to extract tar: '.$stderr); From d0e4e5cb29e73f45adbb9fb28b15d6e8bdc6113a Mon Sep 17 00:00:00 2001 From: Eldad Fux Date: Thu, 22 Jul 2021 17:49:52 +0300 Subject: [PATCH 7/8] Fixed bug --- app/controllers/api/functions.php | 14 ++++----- .../Functions/FunctionsCustomClientTest.php | 25 ++++++++++++++++ .../Functions/FunctionsCustomServerTest.php | 23 +++++++++++++++ tests/resources/functions/php-fn.tar.gz | Bin 24549 -> 24954 bytes tests/resources/functions/php-fn/index.php | 27 ++++++++++-------- 5 files changed, 70 insertions(+), 19 deletions(-) diff --git a/app/controllers/api/functions.php b/app/controllers/api/functions.php index dd58108893..1560355aa0 100644 --- a/app/controllers/api/functions.php +++ b/app/controllers/api/functions.php @@ -748,20 +748,20 @@ App::post('/v1/functions/:functionId/executions') $jwt = ''; // initialize if (!empty($user->getId())) { // If userId exists, generate a JWT for function - $tokens = $user->getAttribute('tokens', []); - $session = new Document(); + $sessions = $user->getAttribute('sessions', []); + $current = new Document(); - foreach ($tokens as $token) { /** @var Appwrite\Database\Document $token */ - if ($token->getAttribute('secret') == Auth::hash(Auth::$secret)) { // If current session delete the cookies too - $session = $token; + foreach ($sessions as $session) { /** @var Appwrite\Database\Document $session */ + if ($session->getAttribute('secret') == Auth::hash(Auth::$secret)) { // If current session delete the cookies too + $current = $session; } } - if(!$session->isEmpty()) { + if(!$current->isEmpty()) { $jwtObj = new JWT(App::getEnv('_APP_OPENSSL_KEY_V1'), 'HS256', 900, 10); // Instantiate with key, algo, maxAge and leeway. $jwt = $jwtObj->encode([ 'userId' => $user->getId(), - 'sessionId' => $session->getId(), + 'sessionId' => $current->getId(), ]); } } diff --git a/tests/e2e/Services/Functions/FunctionsCustomClientTest.php b/tests/e2e/Services/Functions/FunctionsCustomClientTest.php index 8ba16f8145..454a149c3c 100644 --- a/tests/e2e/Services/Functions/FunctionsCustomClientTest.php +++ b/tests/e2e/Services/Functions/FunctionsCustomClientTest.php @@ -185,7 +185,32 @@ class FunctionsCustomClientTest extends Scope $this->assertEquals(201, $execution['headers']['status-code']); + $executionId = $execution['body']['$id'] ?? ''; + sleep(10); + + $executions = $this->client->call(Client::METHOD_GET, '/functions/'.$functionId.'/executions/'.$executionId, [ + 'content-type' => 'application/json', + 'x-appwrite-project' => $projectId, + 'x-appwrite-key' => $apikey, + ]); + + $output = json_decode($executions['body']['stdout'], true); + + $this->assertEquals(200, $executions['headers']['status-code']); + $this->assertEquals('completed', $executions['body']['status']); + $this->assertEquals($functionId, $output['APPWRITE_FUNCTION_ID']); + $this->assertEquals('Test', $output['APPWRITE_FUNCTION_NAME']); + $this->assertEquals($tagId, $output['APPWRITE_FUNCTION_TAG']); + $this->assertEquals('http', $output['APPWRITE_FUNCTION_TRIGGER']); + $this->assertEquals('PHP', $output['APPWRITE_FUNCTION_RUNTIME_NAME']); + $this->assertEquals('8.0', $output['APPWRITE_FUNCTION_RUNTIME_VERSION']); + $this->assertEquals('', $output['APPWRITE_FUNCTION_EVENT']); + $this->assertEquals('', $output['APPWRITE_FUNCTION_EVENT_DATA']); + $this->assertEquals('foobar', $output['APPWRITE_FUNCTION_DATA']); + $this->assertEquals($this->getUser()['$id'], $output['APPWRITE_FUNCTION_USER_ID']); + $this->assertNotEmpty($output['APPWRITE_FUNCTION_JWT']); + $executions = $this->client->call(Client::METHOD_GET, '/functions/'.$functionId.'/executions', [ 'content-type' => 'application/json', 'x-appwrite-project' => $projectId, diff --git a/tests/e2e/Services/Functions/FunctionsCustomServerTest.php b/tests/e2e/Services/Functions/FunctionsCustomServerTest.php index cf0a1cafc4..775eca06e2 100644 --- a/tests/e2e/Services/Functions/FunctionsCustomServerTest.php +++ b/tests/e2e/Services/Functions/FunctionsCustomServerTest.php @@ -582,8 +582,31 @@ class FunctionsCustomServerTest extends Scope $this->assertEquals(201, $execution['headers']['status-code']); + $executionId = $execution['body']['$id'] ?? ''; + sleep(10); + $executions = $this->client->call(Client::METHOD_GET, '/functions/'.$functionId.'/executions/'.$executionId, array_merge([ + 'content-type' => 'application/json', + 'x-appwrite-project' => $this->getProject()['$id'], + ], $this->getHeaders())); + + $output = json_decode($executions['body']['stdout'], true); + + $this->assertEquals(200, $executions['headers']['status-code']); + $this->assertEquals('completed', $executions['body']['status']); + $this->assertEquals($functionId, $output['APPWRITE_FUNCTION_ID']); + $this->assertEquals('Test '.$name, $output['APPWRITE_FUNCTION_NAME']); + $this->assertEquals($tagId, $output['APPWRITE_FUNCTION_TAG']); + $this->assertEquals('http', $output['APPWRITE_FUNCTION_TRIGGER']); + $this->assertEquals('PHP', $output['APPWRITE_FUNCTION_RUNTIME_NAME']); + $this->assertEquals('8.0', $output['APPWRITE_FUNCTION_RUNTIME_VERSION']); + $this->assertEquals('', $output['APPWRITE_FUNCTION_EVENT']); + $this->assertEquals('', $output['APPWRITE_FUNCTION_EVENT_DATA']); + $this->assertEquals('foobar', $output['APPWRITE_FUNCTION_DATA']); + $this->assertEquals('', $output['APPWRITE_FUNCTION_USER_ID']); + $this->assertEmpty($output['APPWRITE_FUNCTION_JWT']); + $executions = $this->client->call(Client::METHOD_GET, '/functions/'.$functionId.'/executions', array_merge([ 'content-type' => 'application/json', 'x-appwrite-project' => $this->getProject()['$id'], diff --git a/tests/resources/functions/php-fn.tar.gz b/tests/resources/functions/php-fn.tar.gz index a97a2e23528ce5fd28269fd6d8e8e0798b994fb5..5e359122fa62f29d9de63305b82d9bb0b5680417 100644 GIT binary patch literal 24954 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 bDpQ%tRHibOsZ3>h?CJjlk4HwS0B{2Ub;Z~Q literal 24549 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['APPWRITE_FILEID']); -echo $_ENV['APPWRITE_FUNCTION_ID']."\n"; -echo $_ENV['APPWRITE_FUNCTION_NAME']."\n"; -echo $_ENV['APPWRITE_FUNCTION_TAG']."\n"; -echo $_ENV['APPWRITE_FUNCTION_TRIGGER']."\n"; -echo $_ENV['APPWRITE_FUNCTION_RUNTIME_NAME']."\n"; -echo $_ENV['APPWRITE_FUNCTION_RUNTIME_VERSION']."\n"; -// echo $result['$id']; -echo $_ENV['APPWRITE_FUNCTION_EVENT']."\n"; -echo $_ENV['APPWRITE_FUNCTION_EVENT_DATA']."\n"; -echo 'data:'.$_ENV['APPWRITE_FUNCTION_DATA']."\n"; -echo 'userId:'.$_ENV['APPWRITE_FUNCTION_USER_ID']."\n"; -echo 'jwt:'.$_ENV['APPWRITE_FUNCTION_JWT']."\n"; +$output = [ + 'APPWRITE_FUNCTION_ID' => $_ENV['APPWRITE_FUNCTION_ID'], + 'APPWRITE_FUNCTION_NAME' => $_ENV['APPWRITE_FUNCTION_NAME'], + 'APPWRITE_FUNCTION_TAG' => $_ENV['APPWRITE_FUNCTION_TAG'], + 'APPWRITE_FUNCTION_TRIGGER' => $_ENV['APPWRITE_FUNCTION_TRIGGER'], + 'APPWRITE_FUNCTION_RUNTIME_NAME' => $_ENV['APPWRITE_FUNCTION_RUNTIME_NAME'], + 'APPWRITE_FUNCTION_RUNTIME_VERSION' => $_ENV['APPWRITE_FUNCTION_RUNTIME_VERSION'], + 'APPWRITE_FUNCTION_EVENT' => $_ENV['APPWRITE_FUNCTION_EVENT'], + 'APPWRITE_FUNCTION_EVENT_DATA' => $_ENV['APPWRITE_FUNCTION_EVENT_DATA'], + 'APPWRITE_FUNCTION_DATA' => $_ENV['APPWRITE_FUNCTION_DATA'], + 'APPWRITE_FUNCTION_USER_ID' => $_ENV['APPWRITE_FUNCTION_USER_ID'], + 'APPWRITE_FUNCTION_JWT' => $_ENV['APPWRITE_FUNCTION_JWT'], +]; + +echo json_encode($output); From 5815caf01e72f3f7073a4a276a606a323192404a Mon Sep 17 00:00:00 2001 From: Torsten Dittmann Date: Thu, 22 Jul 2021 17:45:15 +0200 Subject: [PATCH 8/8] chore(changelog): update changelog --- CHANGES.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGES.md b/CHANGES.md index 54b353bd91..ca647e7489 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -3,6 +3,8 @@ ## Bugs - Fixed JWT session validation (#1408) +- Fixed passing valid JWT session to Cloud Functions (#1421) +- Fixed race condition when uploading and extracting bigger Cloud Functions (#1419) # Version 0.9.1