1
0
Fork 0
mirror of synced 2024-06-02 19:04:49 +12:00

Update session document

This commit is contained in:
Eldad Fux 2021-07-17 13:04:43 +03:00
parent 0608103d6f
commit 2bf69d59f1
4 changed files with 52 additions and 25 deletions

View file

@ -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' => [

View file

@ -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())

View file

@ -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);

View file

@ -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();
});