From 2bf69d59f15dd9e073caaf6baacf704c42be2bdb Mon Sep 17 00:00:00 2001 From: Eldad Fux Date: Sat, 17 Jul 2021 13:04:43 +0300 Subject: [PATCH] Update session document --- app/config/collections2.php | 24 +++++++++++------------ app/controllers/api/account.php | 34 +++++++++++++++++++++++---------- app/controllers/api/teams.php | 7 +++++++ app/controllers/api/users.php | 12 +++++++++--- 4 files changed, 52 insertions(+), 25 deletions(-) diff --git a/app/config/collections2.php b/app/config/collections2.php index 57362ec9d8..5ce2d3e546 100644 --- a/app/config/collections2.php +++ b/app/config/collections2.php @@ -380,7 +380,7 @@ $collections = [ '$id' => 'provider', 'type' => Database::VAR_STRING, 'format' => '', - 'size' => 1024, + 'size' => 1000, 'signed' => true, 'required' => false, 'default' => null, @@ -402,7 +402,7 @@ $collections = [ '$id' => 'providerToken', 'type' => Database::VAR_STRING, 'format' => '', - 'size' => 2048, + 'size' => 16384, 'signed' => true, 'required' => false, 'default' => null, @@ -435,7 +435,7 @@ $collections = [ '$id' => 'userAgent', 'type' => Database::VAR_STRING, 'format' => '', - 'size' => 2048, + 'size' => 16384, 'signed' => true, 'required' => false, 'default' => null, @@ -597,15 +597,15 @@ $collections = [ 'filters' => [] ], ], - 'indexes' => [ - [ - '$id' => '_key_email', - 'type' => Database::INDEX_UNIQUE, - 'attributes' => ['email'], - 'lengths' => [1024], - 'orders' => [Database::ORDER_ASC], - ] - ], + // 'indexes' => [ + // [ + // '$id' => '_key_provider_providerUid', + // 'type' => Database::INDEX_KEY, + // 'attributes' => ['provider', 'providerUid'], + // 'lengths' => [100, 100], + // 'orders' => [Database::ORDER_ASC, Database::ORDER_ASC], + // ] + // ], ], 'teams' => [ diff --git a/app/controllers/api/account.php b/app/controllers/api/account.php index f14282e2b4..67a789a872 100644 --- a/app/controllers/api/account.php +++ b/app/controllers/api/account.php @@ -192,8 +192,12 @@ App::post('/v1/account/sessions') Authorization::setRole('user:'.$profile->getId()); - $profile->setAttribute('sessions', $session, Document::SET_TYPE_APPEND); + $session = $dbForInternal->createDocument('sessions', $session + ->setAttribute('$read', ['user:'.$profile->getId()]) + ->setAttribute('$write', ['user:'.$profile->getId()]) + ); + $profile->setAttribute('sessions', $session, Document::SET_TYPE_APPEND); $profile = $dbForInternal->updateDocument('users', $profile->getId(), $profile); $audits @@ -428,9 +432,11 @@ App::get('/v1/account/sessions/oauth2/:provider/redirect') $current = Auth::sessionVerify($sessions, Auth::$secret); if($current) { // Delete current session of new one. - foreach ($sessions as $key => $session) { + foreach ($sessions as $key => $session) { /** @var Document $session */ if ($current === $session['$id']) { unset($sessions[$key]); + + $dbForInternal->deleteDocument('sessions', $session->getId()); $dbForInternal->updateDocument('users', $user->getId(), $user->setAttribute('sessions', $sessions)); } } @@ -523,6 +529,11 @@ App::get('/v1/account/sessions/oauth2/:provider/redirect') ; } + $session = $dbForInternal->createDocument('sessions', $session + ->setAttribute('$read', ['user:'.$user->getId()]) + ->setAttribute('$write', ['user:'.$user->getId()]) + ); + $user ->setAttribute('status', Auth::USER_STATUS_ACTIVATED) ->setAttribute('sessions', $session, Document::SET_TYPE_APPEND) @@ -668,6 +679,11 @@ App::post('/v1/account/sessions/anonymous') Authorization::setRole('user:'.$user->getId()); + $session = $dbForInternal->createDocument('sessions', $session + ->setAttribute('$read', ['user:'.$user->getId()]) + ->setAttribute('$write', ['user:'.$user->getId()]) + ); + $user = $dbForInternal->updateDocument('users', $user->getId(), $user->setAttribute('sessions', $session, Document::SET_TYPE_APPEND)); @@ -814,9 +830,7 @@ App::get('/v1/account/sessions') $countries = $locale->getText('countries'); $current = Auth::sessionVerify($sessions, Auth::$secret); - foreach ($sessions as $key => $session) { - /** @var Document $session */ - + foreach ($sessions as $key => $session) { /** @var Document $session */ $countryName = (isset($countries[strtoupper($session->getAttribute('countryCode'))])) ? $countries[strtoupper($session->getAttribute('countryCode'))] : $locale->getText('locale.country.unknown'); @@ -1213,12 +1227,12 @@ App::delete('/v1/account/sessions/:sessionId') $sessions = $user->getAttribute('sessions', []); - foreach ($sessions as $key => $session) { - /** @var Document $session */ - + foreach ($sessions as $key => $session) { /** @var Document $session */ if ($sessionId == $session->getId()) { unset($sessions[$key]); + $dbForInternal->deleteDocument('sessions', $session->getId()); + $audits ->setParam('userId', $user->getId()) ->setParam('event', 'account.sessions.delete') @@ -1289,8 +1303,8 @@ App::delete('/v1/account/sessions') $protocol = $request->getProtocol(); $sessions = $user->getAttribute('sessions', []); - foreach ($sessions as $session) { - /** @var Document $session */ + foreach ($sessions as $session) { /** @var Document $session */ + $dbForInternal->deleteDocument('sessions', $session->getId()); $audits ->setParam('userId', $user->getId()) diff --git a/app/controllers/api/teams.php b/app/controllers/api/teams.php index 39ced4b747..a8022cafcd 100644 --- a/app/controllers/api/teams.php +++ b/app/controllers/api/teams.php @@ -608,6 +608,8 @@ App::patch('/v1/teams/:teamId/memberships/:membershipId/status') // Log user in + Authorization::setRole('user:'.$user->getId()); + $detector = new Detector($request->getUserAgent('UNKNOWN')); $record = $geodb->get($request->getIP()); $expiry = \time() + Auth::TOKEN_EXPIRATION_LOGIN_LONG; @@ -624,6 +626,11 @@ App::patch('/v1/teams/:teamId/memberships/:membershipId/status') 'countryCode' => ($record) ? \strtolower($record['country']['iso_code']) : '--', ], $detector->getOS(), $detector->getClient(), $detector->getDevice())); + $session = $dbForInternal->createDocument('sessions', $session + ->setAttribute('$read', ['user:'.$user->getId()]) + ->setAttribute('$write', ['user:'.$user->getId()]) + ); + $user->setAttribute('sessions', $session, Document::SET_TYPE_APPEND); Authorization::setRole('user:'.$userId); diff --git a/app/controllers/api/users.php b/app/controllers/api/users.php index 9777e5b250..96e9af7872 100644 --- a/app/controllers/api/users.php +++ b/app/controllers/api/users.php @@ -430,12 +430,13 @@ App::delete('/v1/users/:userId/sessions/:sessionId') $sessions = $user->getAttribute('sessions', []); - foreach ($sessions as $key => $session) { - /** @var Document $session */ + foreach ($sessions as $key => $session) { /** @var Document $session */ if ($sessionId == $session->getId()) { unset($sessions[$key]); + $dbForInternal->deleteDocument('sessions', $session->getId()); + $user->setAttribute('sessions', $sessions); $events @@ -476,13 +477,18 @@ App::delete('/v1/users/:userId/sessions') throw new Exception('User not found', 404); } + $sessions = $user->getAttribute('sessions', []); + + foreach ($sessions as $key => $session) { /** @var Document $session */ + $dbForInternal->deleteDocument('sessions', $session->getId()); + } + $dbForInternal->updateDocument('users', $user->getId(), $user->getAttribute('sessions', [])); $events ->setParam('eventData', $response->output2($user, Response::MODEL_USER)) ; - // TODO : Response filter implementation $response->noContent(); });