From 2d8abac0e3ba802b6343e1eda4d7d6b4a4ef0225 Mon Sep 17 00:00:00 2001 From: shimon Date: Thu, 11 Aug 2022 11:47:18 +0300 Subject: [PATCH 1/6] clean --- app/controllers/shared/api.php | 39 ++++++++++++---------------------- 1 file changed, 14 insertions(+), 25 deletions(-) diff --git a/app/controllers/shared/api.php b/app/controllers/shared/api.php index 4c9a49d2d4..15b7d83e55 100644 --- a/app/controllers/shared/api.php +++ b/app/controllers/shared/api.php @@ -204,7 +204,7 @@ App::shutdown() $responsePayload = $response->getPayload(); if (!empty($events->getEvent())) { - if (empty($events->getPayload())){ + if (empty($events->getPayload())) { $events->setPayload($responsePayload); } /** @@ -229,11 +229,9 @@ App::shutdown() if ($project->getId() !== 'console') { $allEvents = Event::generateEvents($events->getEvent(), $events->getParams()); $payload = new Document($events->getPayload()); - $db = $events->getContext('database'); $collection = $events->getContext('collection'); $bucket = $events->getContext('bucket'); - $target = Realtime::fromPayload( // Pass first, most verbose event pattern event: $allEvents[0], @@ -251,7 +249,6 @@ App::shutdown() channels: $target['channels'], roles: $target['roles'], options: [ - 'permissionsChanged' => $target['permissionsChanged'], 'userId' => $events->getParam('userId') ] ); @@ -260,22 +257,21 @@ App::shutdown() $route = $utopia->match($request); - $getRequestParams = function() use ($route, $request): array { - $url = \parse_url($request->getURI(), PHP_URL_PATH); + $getRequestParams = function() use ($route, $request) { + $url = \parse_url($request->getURI(),PHP_URL_PATH); $regex = '@' . \preg_replace('@:[^/]+@', '([^/]+)', $route->getPath()) . '@'; - \preg_match($regex, $url, $matches); + \preg_match($regex, $url,$matches); \array_shift($matches); $url = $route->getIsAlias() ? $route->getAliasPath() : $route->getPath(); - $keyRegex = '@^' . \preg_replace('@:[^/]+@', ':([^/]+)', $url) . '$@'; - \preg_match($keyRegex, $url, $keys); + $keyRegex = '@^' . \preg_replace('@:[^/]+@',':([^/]+)', $url) . '$@'; + \preg_match($keyRegex, $url,$keys); \array_shift($keys); return \array_combine($keys, $matches) ?? []; }; - - $parseLabel = function ($label) use ($responsePayload, $getRequestParams) :string { - preg_match_all('/{(.*?)}/', $label, $matches); + $parseLabel = function ($label) use ($responsePayload, $getRequestParams) { + preg_match_all('/{(.*?)}/', $label,$matches); foreach ($matches[1] ?? [] as $pos => $match) { $find = $matches[0][$pos]; $parts = explode('.', $match); @@ -287,16 +283,10 @@ App::shutdown() $namespace = $parts[0]; $replace = $parts[1]; - switch ($namespace) { - case 'response': - $params = $responsePayload; - break; - case 'request': - $params = $getRequestParams(); - break; - default: - $params = $responsePayload; - } + $params = match ($namespace) { + 'request' => $getRequestParams(), + default => $responsePayload, + }; if(array_key_exists($replace, $params)){ $label = \str_replace($find, $params[$replace], $label); @@ -319,8 +309,8 @@ App::shutdown() * audits.payload is switched to default true * in order to auto audit payload for all endpoints */ - $auditsPayload = $route->getLabel('audits.payload',true); - if(!empty($auditsPayload)) { + $auditsPayload = $route->getLabel('audits.payload', true); + if (!empty($auditsPayload)) { $audits->setPayload($responsePayload); } @@ -339,7 +329,6 @@ App::shutdown() $database->trigger(); } - if ( App::getEnv('_APP_USAGE_STATS', 'enabled') == 'enabled' && $project->getId() From 6a4fee641d405b5a3e800f293110cf65b492b623 Mon Sep 17 00:00:00 2001 From: shimon Date: Thu, 11 Aug 2022 12:04:05 +0300 Subject: [PATCH 2/6] clean --- app/controllers/shared/api.php | 8 ++++---- composer.lock | 12 ++++++------ 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/app/controllers/shared/api.php b/app/controllers/shared/api.php index 15b7d83e55..42f9866fc2 100644 --- a/app/controllers/shared/api.php +++ b/app/controllers/shared/api.php @@ -277,7 +277,7 @@ App::shutdown() $parts = explode('.', $match); if(count($parts) !== 2){ - return ''; + throw new Exception('Too less or more parts', 400, Exception::GENERAL_ARGUMENT_INVALID); } $namespace = $parts[0]; @@ -296,10 +296,10 @@ App::shutdown() return $label; }; - $auditsResource = $route->getLabel('audits.resource',null); - if(!empty($auditsResource)) { + $auditsResource = $route->getLabel('audits.resource', null); + if (!empty($auditsResource)) { $resource = $parseLabel($auditsResource); - if(!empty($resource) && $resource !== $auditsResource) { + if (!empty($resource) && $resource !== $auditsResource) { $audits->setResource($resource); } } diff --git a/composer.lock b/composer.lock index 93b8455cac..6ae877fd15 100644 --- a/composer.lock +++ b/composer.lock @@ -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", From b5f977e46da3837eec19ccec3c5bed88b651841e Mon Sep 17 00:00:00 2001 From: shimon Date: Thu, 11 Aug 2022 16:19:05 +0300 Subject: [PATCH 3/6] adding user to audits labels --- app/controllers/api/account.php | 38 ++++++++++++------- app/controllers/api/teams.php | 16 +++----- app/controllers/api/users.php | 67 ++++++++++----------------------- app/controllers/shared/api.php | 27 ++++++++----- 4 files changed, 67 insertions(+), 81 deletions(-) diff --git a/app/controllers/api/account.php b/app/controllers/api/account.php index 2ce8e30e6e..95f6a41e8d 100644 --- a/app/controllers/api/account.php +++ b/app/controllers/api/account.php @@ -48,6 +48,7 @@ App::post('/v1/account') ->label('scope', 'public') ->label('auth.type', 'emailPassword') ->label('audits.resource', 'user/{response.$id}') + ->label('audits.userId', '{response.$id}') ->label('sdk.auth', []) ->label('sdk.namespace', 'account') ->label('sdk.method', 'create') @@ -354,7 +355,6 @@ App::get('/v1/account/sessions/oauth2/:provider/redirect') ->label('abuse-limit', 50) ->label('abuse-key', 'ip:{ip}') ->label('docs', false) - ->label('audits.resource', 'user/{response.$id}') ->param('provider', '', new WhiteList(\array_keys(Config::getParam('providers')), true), 'OAuth2 provider.') ->param('code', '', new Text(2048), 'OAuth2 code.') ->param('state', '', new Text(2048), 'OAuth2 state params.', true) @@ -364,9 +364,10 @@ App::get('/v1/account/sessions/oauth2/:provider/redirect') ->inject('user') ->inject('dbForProject') ->inject('geodb') + ->inject('audits') ->inject('events') ->inject('usage') - ->action(function (string $provider, string $code, string $state, Request $request, Response $response, Document $project, Document $user, Database $dbForProject, Reader $geodb, Event $events, Stats $usage) use ($oauthDefaultSuccess) { + ->action(function (string $provider, string $code, string $state, Request $request, Response $response, Document $project, Document $user, Database $dbForProject, Reader $geodb, Audit $audits, Event $events, Stats $usage) use ($oauthDefaultSuccess) { $protocol = $request->getProtocol(); $callback = $protocol . '://' . $request->getHostname() . '/v1/account/sessions/oauth2/callback/' . $provider . '/' . $project->getId(); @@ -543,6 +544,8 @@ App::get('/v1/account/sessions/oauth2/:provider/redirect') $dbForProject->deleteCachedDocument('users', $user->getId()); + $audits->setResource('user/' . $user->getId()); + $usage ->setParam('users.sessions.create', 1) ->setParam('projectId', $project->getId()) @@ -586,7 +589,8 @@ App::post('/v1/account/sessions/magic-url') ->groups(['api', 'account']) ->label('scope', 'public') ->label('auth.type', 'magic-url') - ->label('audits.resource', 'user/{response.$id}') + ->label('audits.resource', 'user/{response.userId}') + ->label('audits.userId', '{response.userId}') ->label('sdk.auth', []) ->label('sdk.namespace', 'account') ->label('sdk.method', 'createMagicURLSession') @@ -710,7 +714,7 @@ App::put('/v1/account/sessions/magic-url') ->groups(['api', 'account']) ->label('scope', 'public') ->label('event', 'users.[userId].sessions.[sessionId].create') - ->label('audits.resource', 'user/{response.$id}') + ->label('audits.resource', 'user/{response.userId}') ->label('sdk.auth', []) ->label('sdk.namespace', 'account') ->label('sdk.method', 'updateMagicURLSession') @@ -822,7 +826,8 @@ App::post('/v1/account/sessions/phone') ->groups(['api', 'account']) ->label('scope', 'public') ->label('auth.type', 'phone') - ->label('audits.resource', 'user/{response.$id}') + ->label('audits.resource', 'user/{response.userId}') + ->label('audits.userId', '{response.userId}') ->label('sdk.auth', []) ->label('sdk.namespace', 'account') ->label('sdk.method', 'createPhoneSession') @@ -935,7 +940,7 @@ App::put('/v1/account/sessions/phone') ->groups(['api', 'account']) ->label('scope', 'public') ->label('event', 'users.[userId].sessions.[sessionId].create') - ->label('audits.resource', 'user/{response.$id}') + ->label('audits.resource', 'user/{response.userId}') ->label('sdk.auth', []) ->label('sdk.namespace', 'account') ->label('sdk.method', 'updatePhoneSession') @@ -1044,7 +1049,7 @@ App::post('/v1/account/sessions/anonymous') ->label('event', 'users.[userId].sessions.[sessionId].create') ->label('scope', 'public') ->label('auth.type', 'anonymous') - ->label('audits.resource', 'user/{response.$id}') + ->label('audits.resource', 'user/{response.userId}') ->label('sdk.auth', []) ->label('sdk.namespace', 'account') ->label('sdk.method', 'createAnonymousSession') @@ -1400,6 +1405,7 @@ App::patch('/v1/account/name') ->label('event', 'users.[userId].update.name') ->label('scope', 'account') ->label('audits.resource', 'user/{response.$id}') + ->label('audits.userId', '{response.$id}') ->label('sdk.auth', [APP_AUTH_TYPE_SESSION, APP_AUTH_TYPE_JWT]) ->label('sdk.namespace', 'account') ->label('sdk.method', 'updateName') @@ -1431,6 +1437,7 @@ App::patch('/v1/account/password') ->label('event', 'users.[userId].update.password') ->label('scope', 'account') ->label('audits.resource', 'user/{response.$id}') + ->label('audits.userId', '{response.$id}') ->label('sdk.auth', [APP_AUTH_TYPE_SESSION, APP_AUTH_TYPE_JWT]) ->label('sdk.namespace', 'account') ->label('sdk.method', 'updatePassword') @@ -1472,6 +1479,7 @@ App::patch('/v1/account/email') ->label('event', 'users.[userId].update.email') ->label('scope', 'account') ->label('audits.resource', 'user/{response.$id}') + ->label('audits.userId', '{response.$id}') ->label('sdk.auth', [APP_AUTH_TYPE_SESSION, APP_AUTH_TYPE_JWT]) ->label('sdk.namespace', 'account') ->label('sdk.method', 'updateEmail') @@ -1523,6 +1531,7 @@ App::patch('/v1/account/phone') ->label('event', 'users.[userId].update.phone') ->label('scope', 'account') ->label('audits.resource', 'user/{response.$id}') + ->label('audits.userId', '{response.$id}') ->label('sdk.auth', [APP_AUTH_TYPE_SESSION, APP_AUTH_TYPE_JWT]) ->label('sdk.namespace', 'account') ->label('sdk.method', 'updatePhone') @@ -1712,7 +1721,7 @@ App::patch('/v1/account/sessions/:sessionId') ->groups(['api', 'account']) ->label('scope', 'account') ->label('event', 'users.[userId].sessions.[sessionId].update') - ->label('audits.resource', 'user/{response.$id}') + ->label('audits.resource', 'user/{response.userId}') ->label('sdk.auth', [APP_AUTH_TYPE_SESSION, APP_AUTH_TYPE_JWT]) ->label('sdk.namespace', 'account') ->label('sdk.method', 'updateSession') @@ -1865,7 +1874,8 @@ App::post('/v1/account/recovery') ->groups(['api', 'account']) ->label('scope', 'public') ->label('event', 'users.[userId].recovery.[tokenId].create') - ->label('audits.resource', 'user/{response.$id}') + ->label('audits.resource', 'user/{response.userId}') + ->label('audits.userId', '{response.userId}') ->label('sdk.auth', [APP_AUTH_TYPE_SESSION, APP_AUTH_TYPE_JWT]) ->label('sdk.namespace', 'account') ->label('sdk.method', 'createRecovery') @@ -1968,7 +1978,7 @@ App::put('/v1/account/recovery') ->groups(['api', 'account']) ->label('scope', 'public') ->label('event', 'users.[userId].recovery.[tokenId].update') - ->label('audits.resource', 'user/{response.$id}') + ->label('audits.resource', 'user/{response.userId}') ->label('sdk.auth', [APP_AUTH_TYPE_SESSION, APP_AUTH_TYPE_JWT]) ->label('sdk.namespace', 'account') ->label('sdk.method', 'updateRecovery') @@ -2036,7 +2046,7 @@ App::post('/v1/account/verification') ->groups(['api', 'account']) ->label('scope', 'account') ->label('event', 'users.[userId].verification.[tokenId].create') - ->label('audits.resource', 'user/{response.$id}') + ->label('audits.resource', 'user/{response.userId}') ->label('sdk.auth', [APP_AUTH_TYPE_SESSION, APP_AUTH_TYPE_JWT]) ->label('sdk.namespace', 'account') ->label('sdk.method', 'createVerification') @@ -2125,7 +2135,7 @@ App::put('/v1/account/verification') ->groups(['api', 'account']) ->label('scope', 'public') ->label('event', 'users.[userId].verification.[tokenId].update') - ->label('audits.resource', 'user/{response.$id}') + ->label('audits.resource', 'user/{response.userId}') ->label('sdk.auth', [APP_AUTH_TYPE_SESSION, APP_AUTH_TYPE_JWT]) ->label('sdk.namespace', 'account') ->label('sdk.method', 'updateVerification') @@ -2185,7 +2195,7 @@ App::post('/v1/account/verification/phone') ->groups(['api', 'account']) ->label('scope', 'account') ->label('event', 'users.[userId].verification.[tokenId].create') - ->label('audits.resource', 'user/{response.$id}') + ->label('audits.resource', 'user/{response.userId}') ->label('sdk.auth', [APP_AUTH_TYPE_SESSION, APP_AUTH_TYPE_JWT]) ->label('sdk.namespace', 'account') ->label('sdk.method', 'createPhoneVerification') @@ -2270,7 +2280,7 @@ App::put('/v1/account/verification/phone') ->groups(['api', 'account']) ->label('scope', 'public') ->label('event', 'users.[userId].verification.[tokenId].update') - ->label('audits.resource', 'user/{response.$id}') + ->label('audits.resource', 'user/{response.userId}') ->label('sdk.auth', [APP_AUTH_TYPE_SESSION, APP_AUTH_TYPE_JWT]) ->label('sdk.namespace', 'account') ->label('sdk.method', 'updatePhoneVerification') diff --git a/app/controllers/api/teams.php b/app/controllers/api/teams.php index 875c2835bf..6c58ac2a91 100644 --- a/app/controllers/api/teams.php +++ b/app/controllers/api/teams.php @@ -207,6 +207,7 @@ App::delete('/v1/teams/:teamId') ->groups(['api', 'teams']) ->label('event', 'teams.[teamId].delete') ->label('scope', 'teams.write') + ->label('audits.resource', 'team/{request.teamId}') ->label('sdk.auth', [APP_AUTH_TYPE_SESSION, APP_AUTH_TYPE_KEY, APP_AUTH_TYPE_JWT]) ->label('sdk.namespace', 'teams') ->label('sdk.method', 'delete') @@ -251,10 +252,7 @@ App::delete('/v1/teams/:teamId') ->setPayload($response->output($team, Response::MODEL_TEAM)) ; - $audits - ->setParam('resource', 'team/' . $teamId) - ->setParam('data', $team->getArrayCopy()) - ; + $audits->setParam('data', $team->getArrayCopy()); $response->noContent(); }); @@ -265,7 +263,7 @@ App::post('/v1/teams/:teamId/memberships') ->label('event', 'teams.[teamId].memberships.[membershipId].create') ->label('scope', 'teams.write') ->label('auth.type', 'invites') - ->label('audits.resource', 'team/{response.teamId}') + ->label('audits.resource', 'team/{request.teamId}') ->label('sdk.auth', [APP_AUTH_TYPE_SESSION, APP_AUTH_TYPE_KEY, APP_AUTH_TYPE_JWT]) ->label('sdk.namespace', 'teams') ->label('sdk.method', 'createMembership') @@ -544,7 +542,7 @@ App::patch('/v1/teams/:teamId/memberships/:membershipId') ->groups(['api', 'teams']) ->label('event', 'teams.[teamId].memberships.[membershipId].update') ->label('scope', 'teams.write') - ->label('audits.resource', 'team/{response.teamId}') + ->label('audits.resource', 'team/{request.teamId}') ->label('sdk.auth', [APP_AUTH_TYPE_SESSION, APP_AUTH_TYPE_KEY, APP_AUTH_TYPE_JWT]) ->label('sdk.namespace', 'teams') ->label('sdk.method', 'updateMembershipRoles') @@ -614,7 +612,7 @@ App::patch('/v1/teams/:teamId/memberships/:membershipId/status') ->groups(['api', 'teams']) ->label('event', 'teams.[teamId].memberships.[membershipId].update.status') ->label('scope', 'public') - ->label('audits.resource', 'team/{response.teamId}') + ->label('audits.resource', 'team/{request.teamId}') ->label('sdk.auth', [APP_AUTH_TYPE_SESSION, APP_AUTH_TYPE_JWT]) ->label('sdk.namespace', 'teams') ->label('sdk.method', 'updateMembershipStatus') @@ -676,9 +674,7 @@ App::patch('/v1/teams/:teamId/memberships/:membershipId/status') ->setAttribute('confirm', true) ; - $user - ->setAttribute('emailVerification', true) - ; + $user->setAttribute('emailVerification', true); // Log user in diff --git a/app/controllers/api/users.php b/app/controllers/api/users.php index c8fafbefe2..da95d086d7 100644 --- a/app/controllers/api/users.php +++ b/app/controllers/api/users.php @@ -76,13 +76,9 @@ App::post('/v1/users') throw new Exception('Account already exists', 409, Exception::USER_ALREADY_EXISTS); } - $usage - ->setParam('users.create', 1) - ; + $usage->setParam('users.create', 1); - $events - ->setParam('userId', $user->getId()) - ; + $events->setParam('userId', $user->getId()); $response->setStatusCode(Response::STATUS_CODE_CREATED); $response->dynamic($user, Response::MODEL_USER); @@ -124,9 +120,7 @@ App::get('/v1/users') $queries[] = new Query('search', Query::TYPE_SEARCH, [$search]); } - $usage - ->setParam('users.read', 1) - ; + $usage->setParam('users.read', 1); $response->dynamic(new Document([ 'users' => $dbForProject->find('users', $queries, $limit, $offset, [], [$orderType], $cursorUser ?? null, $cursorDirection), @@ -157,9 +151,8 @@ App::get('/v1/users/:userId') throw new Exception('User not found', 404, Exception::USER_NOT_FOUND); } - $usage - ->setParam('users.read', 1) - ; + $usage->setParam('users.read', 1); + $response->dynamic($user, Response::MODEL_USER); }); @@ -188,9 +181,8 @@ App::get('/v1/users/:userId/prefs') $prefs = $user->getAttribute('prefs', new \stdClass()); - $usage - ->setParam('users.read', 1) - ; + $usage->setParam('users.read', 1); + $response->dynamic(new Document($prefs), Response::MODEL_PREFERENCES); }); @@ -230,9 +222,8 @@ App::get('/v1/users/:userId/sessions') $sessions[$key] = $session; } - $usage - ->setParam('users.read', 1) - ; + $usage->setParam('users.read', 1); + $response->dynamic(new Document([ 'sessions' => $sessions, 'total' => count($sessions), @@ -350,9 +341,7 @@ App::get('/v1/users/:userId/logs') } } - $usage - ->setParam('users.read', 1) - ; + $usage->setParam('users.read', 1); $response->dynamic(new Document([ 'total' => $audit->countLogsByUser($user->getId()), @@ -388,13 +377,9 @@ App::patch('/v1/users/:userId/status') $user = $dbForProject->updateDocument('users', $user->getId(), $user->setAttribute('status', (bool) $status)); - $usage - ->setParam('users.update', 1) - ; + $usage->setParam('users.update', 1); - $events - ->setParam('userId', $user->getId()) - ; + $events->setParam('userId', $user->getId()); $response->dynamic($user, Response::MODEL_USER); }); @@ -427,13 +412,9 @@ App::patch('/v1/users/:userId/verification') $user = $dbForProject->updateDocument('users', $user->getId(), $user->setAttribute('emailVerification', $emailVerification)); - $usage - ->setParam('users.update', 1) - ; + $usage->setParam('users.update', 1); - $events - ->setParam('userId', $user->getId()) - ; + $events->setParam('userId', $user->getId()); $response->dynamic($user, Response::MODEL_USER); }); @@ -466,13 +447,9 @@ App::patch('/v1/users/:userId/verification/phone') $user = $dbForProject->updateDocument('users', $user->getId(), $user->setAttribute('phoneVerification', $phoneVerification)); - $usage - ->setParam('users.update', 1) - ; + $usage->setParam('users.update', 1); - $events - ->setParam('userId', $user->getId()) - ; + $events->setParam('userId', $user->getId()); $response->dynamic($user, Response::MODEL_USER); }); @@ -669,13 +646,9 @@ App::patch('/v1/users/:userId/prefs') $user = $dbForProject->updateDocument('users', $user->getId(), $user->setAttribute('prefs', $prefs)); - $usage - ->setParam('users.update', 1) - ; + $usage->setParam('users.update', 1); - $events - ->setParam('userId', $user->getId()) - ; + $events->setParam('userId', $user->getId()); $response->dynamic(new Document($prefs), Response::MODEL_PREFERENCES); }); @@ -814,9 +787,7 @@ App::delete('/v1/users/:userId') ->setPayload($response->output($clone, Response::MODEL_USER)) ; - $usage - ->setParam('users.delete', 1) - ; + $usage->setParam('users.delete', 1); $response->noContent(); }); diff --git a/app/controllers/shared/api.php b/app/controllers/shared/api.php index 42f9866fc2..f82197dcd0 100644 --- a/app/controllers/shared/api.php +++ b/app/controllers/shared/api.php @@ -229,11 +229,13 @@ App::shutdown() if ($project->getId() !== 'console') { $allEvents = Event::generateEvents($events->getEvent(), $events->getParams()); $payload = new Document($events->getPayload()); + $db = $events->getContext('database'); $collection = $events->getContext('collection'); $bucket = $events->getContext('bucket'); + $target = Realtime::fromPayload( - // Pass first, most verbose event pattern + // Pass first, most verbose event pattern event: $allEvents[0], payload: $payload, project: $project, @@ -249,6 +251,7 @@ App::shutdown() channels: $target['channels'], roles: $target['roles'], options: [ + 'permissionsChanged' => $target['permissionsChanged'], 'userId' => $events->getParam('userId') ] ); @@ -277,7 +280,7 @@ App::shutdown() $parts = explode('.', $match); if(count($parts) !== 2){ - throw new Exception('Too less or more parts', 400, Exception::GENERAL_ARGUMENT_INVALID); + throw new Exception('Too less or too many parts', 400, Exception::GENERAL_ARGUMENT_INVALID); } $namespace = $parts[0]; @@ -296,28 +299,34 @@ App::shutdown() return $label; }; - $auditsResource = $route->getLabel('audits.resource', null); - if (!empty($auditsResource)) { - $resource = $parseLabel($auditsResource); - if (!empty($resource) && $resource !== $auditsResource) { + $pattern = $route->getLabel('audits.resource', null); + if (!empty($pattern)) { + $resource = $parseLabel($pattern); + if (!empty($resource) && $resource !== $pattern) { $audits->setResource($resource); } } + $pattern = $route->getLabel('audits.userId', null); + if(!empty($pattern)) { + $userId = $parseLabel($pattern); + $user = $dbForProject->getDocument('users', $userId); + $audits->setUser($user); + } + if (!empty($audits->getResource())) { /** * audits.payload is switched to default true * in order to auto audit payload for all endpoints */ - $auditsPayload = $route->getLabel('audits.payload', true); - if (!empty($auditsPayload)) { + $pattern = $route->getLabel('audits.payload', true); + if (!empty($pattern)) { $audits->setPayload($responsePayload); } foreach ($events->getParams() as $key => $value) { $audits->setParam($key, $value); } - $audits->trigger(); } From e86aab5e881d95a59dfbd469d134d7255ff1d132 Mon Sep 17 00:00:00 2001 From: shimon Date: Thu, 11 Aug 2022 16:47:53 +0300 Subject: [PATCH 4/6] ident --- app/controllers/shared/api.php | 39 +++++++++++++++------------------- 1 file changed, 17 insertions(+), 22 deletions(-) diff --git a/app/controllers/shared/api.php b/app/controllers/shared/api.php index f82197dcd0..881d79181a 100644 --- a/app/controllers/shared/api.php +++ b/app/controllers/shared/api.php @@ -81,8 +81,7 @@ App::init() $response ->addHeader('X-RateLimit-Limit', $timeLimit->limit()) ->addHeader('X-RateLimit-Remaining', $timeLimit->remaining()) - ->addHeader('X-RateLimit-Reset', $timeLimit->time() + $route->getLabel('abuse-time', 3600)) - ; + ->addHeader('X-RateLimit-Reset', $timeLimit->time() + $route->getLabel('abuse-time', 3600)); } if ( @@ -100,13 +99,11 @@ App::init() $events ->setEvent($route->getLabel('event', '')) ->setProject($project) - ->setUser($user) - ; + ->setUser($user); $mails ->setProject($project) - ->setUser($user) - ; + ->setUser($user); $audits ->setMode($mode) @@ -114,8 +111,7 @@ App::init() ->setIP($request->getIP()) ->setEvent($route->getLabel('event', '')) ->setProject($project) - ->setUser($user) - ; + ->setUser($user); $usage ->setParam('projectId', $project->getId()) @@ -125,8 +121,7 @@ App::init() ->setParam('httpPath', $route->getPath()) ->setParam('networkRequestSize', 0) ->setParam('networkResponseSize', 0) - ->setParam('storage', 0) - ; + ->setParam('storage', 0); $deletes->setProject($project); $database->setProject($project); @@ -235,7 +230,7 @@ App::shutdown() $bucket = $events->getContext('bucket'); $target = Realtime::fromPayload( - // Pass first, most verbose event pattern + // Pass first, most verbose event pattern event: $allEvents[0], payload: $payload, project: $project, @@ -260,38 +255,38 @@ App::shutdown() $route = $utopia->match($request); - $getRequestParams = function() use ($route, $request) { - $url = \parse_url($request->getURI(),PHP_URL_PATH); + $getRequestParams = function () use ($route, $request) { + $url = \parse_url($request->getURI(), PHP_URL_PATH); $regex = '@' . \preg_replace('@:[^/]+@', '([^/]+)', $route->getPath()) . '@'; - \preg_match($regex, $url,$matches); + \preg_match($regex, $url, $matches); \array_shift($matches); $url = $route->getIsAlias() ? $route->getAliasPath() : $route->getPath(); - $keyRegex = '@^' . \preg_replace('@:[^/]+@',':([^/]+)', $url) . '$@'; - \preg_match($keyRegex, $url,$keys); + $keyRegex = '@^' . \preg_replace('@:[^/]+@', ':([^/]+)', $url) . '$@'; + \preg_match($keyRegex, $url, $keys); \array_shift($keys); return \array_combine($keys, $matches) ?? []; }; - $parseLabel = function ($label) use ($responsePayload, $getRequestParams) { - preg_match_all('/{(.*?)}/', $label,$matches); + $parseLabel = function ($label) use ($responsePayload, $getRequestParams) { + preg_match_all('/{(.*?)}/', $label, $matches); foreach ($matches[1] ?? [] as $pos => $match) { $find = $matches[0][$pos]; $parts = explode('.', $match); - if(count($parts) !== 2){ + if (count($parts) !== 2) { throw new Exception('Too less or too many parts', 400, Exception::GENERAL_ARGUMENT_INVALID); } $namespace = $parts[0]; - $replace = $parts[1]; + $replace = $parts[1]; $params = match ($namespace) { 'request' => $getRequestParams(), default => $responsePayload, }; - if(array_key_exists($replace, $params)){ + if (array_key_exists($replace, $params)) { $label = \str_replace($find, $params[$replace], $label); } } @@ -308,7 +303,7 @@ App::shutdown() } $pattern = $route->getLabel('audits.userId', null); - if(!empty($pattern)) { + if (!empty($pattern)) { $userId = $parseLabel($pattern); $user = $dbForProject->getDocument('users', $userId); $audits->setUser($user); From 90cfac9b527e9c197d301cb36b322b8aa77371cf Mon Sep 17 00:00:00 2001 From: shimon Date: Fri, 12 Aug 2022 14:01:12 +0300 Subject: [PATCH 5/6] replace request param extractions --- app/controllers/api/account.php | 10 +++++++++- app/controllers/api/databases.php | 1 - app/controllers/api/teams.php | 2 ++ app/controllers/shared/api.php | 20 +++++--------------- 4 files changed, 16 insertions(+), 17 deletions(-) diff --git a/app/controllers/api/account.php b/app/controllers/api/account.php index 95f6a41e8d..a279981271 100644 --- a/app/controllers/api/account.php +++ b/app/controllers/api/account.php @@ -544,7 +544,9 @@ App::get('/v1/account/sessions/oauth2/:provider/redirect') $dbForProject->deleteCachedDocument('users', $user->getId()); - $audits->setResource('user/' . $user->getId()); + $audits->setResource('user/' . $user->getId()) + ->setUser($user) + ; $usage ->setParam('users.sessions.create', 1) @@ -715,6 +717,7 @@ App::put('/v1/account/sessions/magic-url') ->label('scope', 'public') ->label('event', 'users.[userId].sessions.[sessionId].create') ->label('audits.resource', 'user/{response.userId}') + ->label('audits.userId', '{response.userId}') ->label('sdk.auth', []) ->label('sdk.namespace', 'account') ->label('sdk.method', 'updateMagicURLSession') @@ -941,6 +944,7 @@ App::put('/v1/account/sessions/phone') ->label('scope', 'public') ->label('event', 'users.[userId].sessions.[sessionId].create') ->label('audits.resource', 'user/{response.userId}') + ->label('audits.userId', '{response.userId}') ->label('sdk.auth', []) ->label('sdk.namespace', 'account') ->label('sdk.method', 'updatePhoneSession') @@ -1050,6 +1054,7 @@ App::post('/v1/account/sessions/anonymous') ->label('scope', 'public') ->label('auth.type', 'anonymous') ->label('audits.resource', 'user/{response.userId}') + ->label('audits.userId', '{userId}') ->label('sdk.auth', []) ->label('sdk.namespace', 'account') ->label('sdk.method', 'createAnonymousSession') @@ -1722,6 +1727,7 @@ App::patch('/v1/account/sessions/:sessionId') ->label('scope', 'account') ->label('event', 'users.[userId].sessions.[sessionId].update') ->label('audits.resource', 'user/{response.userId}') + ->label('audits.userId', '{response.userId}') ->label('sdk.auth', [APP_AUTH_TYPE_SESSION, APP_AUTH_TYPE_JWT]) ->label('sdk.namespace', 'account') ->label('sdk.method', 'updateSession') @@ -1979,6 +1985,7 @@ App::put('/v1/account/recovery') ->label('scope', 'public') ->label('event', 'users.[userId].recovery.[tokenId].update') ->label('audits.resource', 'user/{response.userId}') + ->label('audits.userId', '{response.userId}') ->label('sdk.auth', [APP_AUTH_TYPE_SESSION, APP_AUTH_TYPE_JWT]) ->label('sdk.namespace', 'account') ->label('sdk.method', 'updateRecovery') @@ -2047,6 +2054,7 @@ App::post('/v1/account/verification') ->label('scope', 'account') ->label('event', 'users.[userId].verification.[tokenId].create') ->label('audits.resource', 'user/{response.userId}') + ->label('audits.userId', '{userId}') ->label('sdk.auth', [APP_AUTH_TYPE_SESSION, APP_AUTH_TYPE_JWT]) ->label('sdk.namespace', 'account') ->label('sdk.method', 'createVerification') diff --git a/app/controllers/api/databases.php b/app/controllers/api/databases.php index a25752f1da..1d7929ba91 100644 --- a/app/controllers/api/databases.php +++ b/app/controllers/api/databases.php @@ -720,7 +720,6 @@ App::put('/v1/databases/:databaseId/collections/:collectionId') ->label('scope', 'collections.write') ->label('event', 'databases.[databaseId].collections.[collectionId].update') ->label('audits.resource', 'database/{request.databaseId}/collection/{request.collectionId}') - ->label('audits-payload', true) ->label('sdk.auth', [APP_AUTH_TYPE_KEY]) ->label('sdk.namespace', 'databases') ->label('sdk.method', 'updateCollection') diff --git a/app/controllers/api/teams.php b/app/controllers/api/teams.php index 6c58ac2a91..7a4e26f2db 100644 --- a/app/controllers/api/teams.php +++ b/app/controllers/api/teams.php @@ -264,6 +264,7 @@ App::post('/v1/teams/:teamId/memberships') ->label('scope', 'teams.write') ->label('auth.type', 'invites') ->label('audits.resource', 'team/{request.teamId}') + ->label('audits.userId', '{request.userId}') ->label('sdk.auth', [APP_AUTH_TYPE_SESSION, APP_AUTH_TYPE_KEY, APP_AUTH_TYPE_JWT]) ->label('sdk.namespace', 'teams') ->label('sdk.method', 'createMembership') @@ -613,6 +614,7 @@ App::patch('/v1/teams/:teamId/memberships/:membershipId/status') ->label('event', 'teams.[teamId].memberships.[membershipId].update.status') ->label('scope', 'public') ->label('audits.resource', 'team/{request.teamId}') + ->label('audits.userId', '{request.userId}') ->label('sdk.auth', [APP_AUTH_TYPE_SESSION, APP_AUTH_TYPE_JWT]) ->label('sdk.namespace', 'teams') ->label('sdk.method', 'updateMembershipStatus') diff --git a/app/controllers/shared/api.php b/app/controllers/shared/api.php index 881d79181a..7c3792c88d 100644 --- a/app/controllers/shared/api.php +++ b/app/controllers/shared/api.php @@ -254,21 +254,11 @@ App::shutdown() } $route = $utopia->match($request); + $requestParams = array_combine( + array_keys($route->getParams()), array_column($route->getParams(), 'value') + ); - $getRequestParams = function () use ($route, $request) { - $url = \parse_url($request->getURI(), PHP_URL_PATH); - $regex = '@' . \preg_replace('@:[^/]+@', '([^/]+)', $route->getPath()) . '@'; - \preg_match($regex, $url, $matches); - \array_shift($matches); - $url = $route->getIsAlias() ? $route->getAliasPath() : $route->getPath(); - $keyRegex = '@^' . \preg_replace('@:[^/]+@', ':([^/]+)', $url) . '$@'; - \preg_match($keyRegex, $url, $keys); - \array_shift($keys); - - return \array_combine($keys, $matches) ?? []; - }; - - $parseLabel = function ($label) use ($responsePayload, $getRequestParams) { + $parseLabel = function ($label) use ($responsePayload, $requestParams) { preg_match_all('/{(.*?)}/', $label, $matches); foreach ($matches[1] ?? [] as $pos => $match) { $find = $matches[0][$pos]; @@ -282,7 +272,7 @@ App::shutdown() $replace = $parts[1]; $params = match ($namespace) { - 'request' => $getRequestParams(), + 'request' => $requestParams, default => $responsePayload, }; From 1af95fcdaa015b5d59823e2a005f790949aab465 Mon Sep 17 00:00:00 2001 From: shimon Date: Fri, 12 Aug 2022 16:21:32 +0300 Subject: [PATCH 6/6] Tidy up --- app/controllers/api/account.php | 22 +++++++--------------- app/controllers/api/databases.php | 26 +++++--------------------- app/controllers/api/storage.php | 6 +----- app/controllers/api/teams.php | 6 +----- app/controllers/shared/api.php | 6 +++--- 5 files changed, 17 insertions(+), 49 deletions(-) diff --git a/app/controllers/api/account.php b/app/controllers/api/account.php index a279981271..24787fb484 100644 --- a/app/controllers/api/account.php +++ b/app/controllers/api/account.php @@ -135,6 +135,8 @@ App::post('/v1/account/sessions/email') ->label('event', 'users.[userId].sessions.[sessionId].create') ->label('scope', 'public') ->label('auth.type', 'emailPassword') + ->label('audits.resource', 'user/{response.userId}') + ->label('audits.userId', '{response.userId}') ->label('sdk.auth', []) ->label('sdk.namespace', 'account') ->label('sdk.method', 'createEmailSession') @@ -151,10 +153,9 @@ App::post('/v1/account/sessions/email') ->inject('dbForProject') ->inject('locale') ->inject('geodb') - ->inject('audits') ->inject('usage') ->inject('events') - ->action(function (string $email, string $password, Request $request, Response $response, Database $dbForProject, Locale $locale, Reader $geodb, Audit $audits, Stats $usage, Event $events) { + ->action(function (string $email, string $password, Request $request, Response $response, Database $dbForProject, Locale $locale, Reader $geodb, Stats $usage, Event $events) { $email = \strtolower($email); $protocol = $request->getProtocol(); @@ -200,11 +201,6 @@ App::post('/v1/account/sessions/email') $dbForProject->deleteCachedDocument('users', $profile->getId()); - $audits - ->setResource('user/' . $profile->getId()) - ->setUser($profile) - ; - if (!Config::getParam('domainVerification')) { $response ->addHeader('X-Fallback-Cookies', \json_encode([Auth::$cookieName => Auth::encodeSession($profile->getId(), $secret)])) @@ -1649,6 +1645,7 @@ App::delete('/v1/account/sessions/:sessionId') ->groups(['api', 'account']) ->label('scope', 'account') ->label('event', 'users.[userId].sessions.[sessionId].delete') + ->label('audits.resource', 'user/{user.$id}') ->label('sdk.auth', [APP_AUTH_TYPE_SESSION, APP_AUTH_TYPE_JWT]) ->label('sdk.namespace', 'account') ->label('sdk.method', 'deleteSession') @@ -1662,10 +1659,9 @@ App::delete('/v1/account/sessions/:sessionId') ->inject('user') ->inject('dbForProject') ->inject('locale') - ->inject('audits') ->inject('events') ->inject('usage') - ->action(function (?string $sessionId, Request $request, Response $response, Document $user, Database $dbForProject, Locale $locale, Audit $audits, Event $events, Stats $usage) { + ->action(function (?string $sessionId, Request $request, Response $response, Document $user, Database $dbForProject, Locale $locale, Event $events, Stats $usage) { $protocol = $request->getProtocol(); $sessionId = ($sessionId === 'current') @@ -1680,8 +1676,6 @@ App::delete('/v1/account/sessions/:sessionId') $dbForProject->deleteDocument('sessions', $session->getId()); - $audits->setResource('user/' . $user->getId()); - $session->setAttribute('current', false); if ($session->getAttribute('secret') == Auth::hash(Auth::$secret)) { // If current session delete the cookies too @@ -1812,6 +1806,7 @@ App::delete('/v1/account/sessions') ->groups(['api', 'account']) ->label('scope', 'account') ->label('event', 'users.[userId].sessions.[sessionId].delete') + ->label('audits.resource', 'user/{user.$id}') ->label('sdk.auth', [APP_AUTH_TYPE_SESSION, APP_AUTH_TYPE_JWT]) ->label('sdk.namespace', 'account') ->label('sdk.method', 'deleteSessions') @@ -1824,10 +1819,9 @@ App::delete('/v1/account/sessions') ->inject('user') ->inject('dbForProject') ->inject('locale') - ->inject('audits') ->inject('events') ->inject('usage') - ->action(function (Request $request, Response $response, Document $user, Database $dbForProject, Locale $locale, Audit $audits, Event $events, Stats $usage) { + ->action(function (Request $request, Response $response, Document $user, Database $dbForProject, Locale $locale, Event $events, Stats $usage) { $protocol = $request->getProtocol(); $sessions = $user->getAttribute('sessions', []); @@ -1835,8 +1829,6 @@ App::delete('/v1/account/sessions') foreach ($sessions as $session) {/** @var Document $session */ $dbForProject->deleteDocument('sessions', $session->getId()); - $audits->setResource('user/' . $user->getId()); - if (!Config::getParam('domainVerification')) { $response->addHeader('X-Fallback-Cookies', \json_encode([])); } diff --git a/app/controllers/api/databases.php b/app/controllers/api/databases.php index 1d7929ba91..30bf6f81d7 100644 --- a/app/controllers/api/databases.php +++ b/app/controllers/api/databases.php @@ -36,7 +36,6 @@ use Appwrite\Utopia\Database\Validator\Queries as QueriesValidator; use Appwrite\Utopia\Database\Validator\OrderAttributes; use Appwrite\Utopia\Response; use Appwrite\Detector\Detector; -use Appwrite\Event\Audit as EventAudit; use Appwrite\Event\Database as EventDatabase; use Appwrite\Event\Event; use Appwrite\Stats\Stats; @@ -430,10 +429,9 @@ App::delete('/v1/databases/:databaseId') ->inject('response') ->inject('dbForProject') ->inject('events') - ->inject('audits') ->inject('deletes') ->inject('usage') - ->action(function (string $databaseId, Response $response, Database $dbForProject, Event $events, EventAudit $audits, Delete $deletes, Stats $usage) { + ->action(function (string $databaseId, Response $response, Database $dbForProject, Event $events, Delete $deletes, Stats $usage) { $database = $dbForProject->getDocument('databases', $databaseId); @@ -457,8 +455,6 @@ App::delete('/v1/databases/:databaseId') ->setPayload($response->output($database, Response::MODEL_DATABASE)) ; - $audits->setPayload($database->getArrayCopy()); - $usage->setParam('databases.delete', 1); $response->noContent(); @@ -799,10 +795,9 @@ App::delete('/v1/databases/:databaseId/collections/:collectionId') ->inject('response') ->inject('dbForProject') ->inject('events') - ->inject('audits') ->inject('deletes') ->inject('usage') - ->action(function (string $databaseId, string $collectionId, Response $response, Database $dbForProject, Event $events, EventAudit $audits, Delete $deletes, Stats $usage) { + ->action(function (string $databaseId, string $collectionId, Response $response, Database $dbForProject, Event $events, Delete $deletes, Stats $usage) { $database = Authorization::skip(fn () => $dbForProject->getDocument('databases', $databaseId)); @@ -834,8 +829,6 @@ App::delete('/v1/databases/:databaseId/collections/:collectionId') ->setPayload($response->output($collection, Response::MODEL_COLLECTION)) ; - $audits->setPayload($collection->getArrayCopy()); - $usage ->setParam('databaseId', $databaseId) ->setParam('databases.collections.delete', 1); @@ -1386,9 +1379,8 @@ App::delete('/v1/databases/:databaseId/collections/:collectionId/attributes/:key ->inject('dbForProject') ->inject('database') ->inject('events') - ->inject('audits') ->inject('usage') - ->action(function (string $databaseId, string $collectionId, string $key, Response $response, Database $dbForProject, EventDatabase $database, Event $events, EventAudit $audits, Stats $usage) { + ->action(function (string $databaseId, string $collectionId, string $key, Response $response, Database $dbForProject, EventDatabase $database, Event $events, Stats $usage) { $db = Authorization::skip(fn () => $dbForProject->getDocument('databases', $databaseId)); @@ -1453,8 +1445,6 @@ App::delete('/v1/databases/:databaseId/collections/:collectionId/attributes/:key ->setPayload($response->output($attribute, $model)) ; - $audits->setPayload($attribute->getArrayCopy()); - $response->noContent(); }); @@ -1722,9 +1712,8 @@ App::delete('/v1/databases/:databaseId/collections/:collectionId/indexes/:key') ->inject('dbForProject') ->inject('database') ->inject('events') - ->inject('audits') ->inject('usage') - ->action(function (string $databaseId, string $collectionId, string $key, Response $response, Database $dbForProject, EventDatabase $database, Event $events, EventAudit $audits, Stats $usage) { + ->action(function (string $databaseId, string $collectionId, string $key, Response $response, Database $dbForProject, EventDatabase $database, Event $events, Stats $usage) { $db = Authorization::skip(fn () => $dbForProject->getDocument('databases', $databaseId)); @@ -1770,8 +1759,6 @@ App::delete('/v1/databases/:databaseId/collections/:collectionId/indexes/:key') ->setPayload($response->output($index, Response::MODEL_INDEX)) ; - $audits->setPayload($index->getArrayCopy()); - $response->noContent(); }); @@ -2324,11 +2311,10 @@ App::delete('/v1/databases/:databaseId/collections/:collectionId/documents/:docu ->inject('response') ->inject('dbForProject') ->inject('events') - ->inject('audits') ->inject('deletes') ->inject('usage') ->inject('mode') - ->action(function (string $databaseId, string $collectionId, string $documentId, Response $response, Database $dbForProject, Event $events, EventAudit $audits, Delete $deletes, Stats $usage, string $mode) { + ->action(function (string $databaseId, string $collectionId, string $documentId, Response $response, Database $dbForProject, Event $events, Delete $deletes, Stats $usage, string $mode) { $database = Authorization::skip(fn () => $dbForProject->getDocument('databases', $databaseId)); @@ -2398,8 +2384,6 @@ App::delete('/v1/databases/:databaseId/collections/:collectionId/documents/:docu ->setPayload($response->output($document, Response::MODEL_DOCUMENT)) ; - $audits->setPayload($document->getArrayCopy()); - $response->noContent(); }); diff --git a/app/controllers/api/storage.php b/app/controllers/api/storage.php index 06cc659261..9393d32b4f 100644 --- a/app/controllers/api/storage.php +++ b/app/controllers/api/storage.php @@ -35,7 +35,6 @@ use Utopia\Storage\Validator\Upload; use Utopia\Validator\ArrayList; use Utopia\Validator\Boolean; use Utopia\Validator\HexColor; -use Utopia\Validator\Integer; use Utopia\Validator\Range; use Utopia\Validator\Text; use Utopia\Validator\WhiteList; @@ -281,11 +280,10 @@ App::delete('/v1/storage/buckets/:bucketId') ->param('bucketId', '', new UID(), 'Bucket unique ID.') ->inject('response') ->inject('dbForProject') - ->inject('audits') ->inject('deletes') ->inject('events') ->inject('usage') - ->action(function (string $bucketId, Response $response, Database $dbForProject, Audit $audits, Delete $deletes, Event $events, Stats $usage) { + ->action(function (string $bucketId, Response $response, Database $dbForProject, Delete $deletes, Event $events, Stats $usage) { $bucket = $dbForProject->getDocument('buckets', $bucketId); if ($bucket->isEmpty()) { @@ -305,8 +303,6 @@ App::delete('/v1/storage/buckets/:bucketId') ->setPayload($response->output($bucket, Response::MODEL_BUCKET)) ; - $audits->setPayload($bucket->getArrayCopy()); - $usage->setParam('storage.buckets.delete', 1); $response->noContent(); diff --git a/app/controllers/api/teams.php b/app/controllers/api/teams.php index 7a4e26f2db..76e99969bf 100644 --- a/app/controllers/api/teams.php +++ b/app/controllers/api/teams.php @@ -2,7 +2,6 @@ use Appwrite\Auth\Auth; use Appwrite\Detector\Detector; -use Appwrite\Event\Audit as EventAudit; use Appwrite\Event\Delete; use Appwrite\Event\Event; use Appwrite\Event\Mail; @@ -219,8 +218,7 @@ App::delete('/v1/teams/:teamId') ->inject('dbForProject') ->inject('events') ->inject('deletes') - ->inject('audits') - ->action(function (string $teamId, Response $response, Database $dbForProject, Event $events, Delete $deletes, EventAudit $audits) { + ->action(function (string $teamId, Response $response, Database $dbForProject, Event $events, Delete $deletes) { $team = $dbForProject->getDocument('teams', $teamId); @@ -252,8 +250,6 @@ App::delete('/v1/teams/:teamId') ->setPayload($response->output($team, Response::MODEL_TEAM)) ; - $audits->setParam('data', $team->getArrayCopy()); - $response->noContent(); }); diff --git a/app/controllers/shared/api.php b/app/controllers/shared/api.php index 7c3792c88d..ff4be68c7c 100644 --- a/app/controllers/shared/api.php +++ b/app/controllers/shared/api.php @@ -17,8 +17,6 @@ use Utopia\Abuse\Adapters\TimeLimit; use Utopia\Database\Database; use Utopia\Database\Document; use Utopia\Database\Validator\Authorization; -use Utopia\Registry\Registry; -use Utopia\Route; App::init() ->groups(['api']) @@ -257,8 +255,9 @@ App::shutdown() $requestParams = array_combine( array_keys($route->getParams()), array_column($route->getParams(), 'value') ); + $user = $audits->getUser(); - $parseLabel = function ($label) use ($responsePayload, $requestParams) { + $parseLabel = function ($label) use ($responsePayload, $requestParams, $user) { preg_match_all('/{(.*?)}/', $label, $matches); foreach ($matches[1] ?? [] as $pos => $match) { $find = $matches[0][$pos]; @@ -272,6 +271,7 @@ App::shutdown() $replace = $parts[1]; $params = match ($namespace) { + 'user' => $user, 'request' => $requestParams, default => $responsePayload, };