1
0
Fork 0
mirror of synced 2024-07-02 21:20:58 +12:00

session limit check on shutdown

This commit is contained in:
Damodar Lohani 2022-12-09 11:33:26 +00:00
parent 27d7f4f083
commit f070f0974a
3 changed files with 62 additions and 31 deletions

View file

@ -599,7 +599,7 @@ App::patch('/v1/projects/:projectId/auth/max-sessions')
}
$auths = $project->getAttribute('auths', []);
$auths['max-sessions'] = $limit;
$auths['maxSessions'] = $limit;
$dbForConsole->updateDocument('projects', $project->getId(), $project
->setAttribute('auths', $auths));

View file

@ -318,6 +318,36 @@ App::init()
}
});
App::shutdown()
->groups(['auth'])
->inject('utopia')
->inject('request')
->inject('response')
->inject('project')
->inject('dbForProject')
->action(function(App $utopia, Request $request, Response $response, Document $project, Database $dbForProject) {
// Get user total sessions
// check if endpoint is creating new session
// && sessions >= $auth['max-sessions']
// if yes -> remove oldest active session
$route = $utopia->match($request);
$event = $route->getLabel('event', '');
if($event === 'users.[userId].sessions.[sessionId].create' && $project->getId() != 'console') {
$sessionLimit = $project->getAttribute('auth', [])['maxSessions'] ?? APP_LIMIT_USER_SESSIONS;
$session = $response->getPayload();
$userId = $session['userId'] ?? '';
if(empty($userId)) return;
$user = $dbForProject->getDocument('users', $userId);
$sessions = $user->getAttribute('sessions', []);
$count = \count($sessions);
if($count <= $sessionLimit) return;
for($i = 0; $i < ($count - $sessionLimit); $i++) {
$session = array_pop($sessions);
$dbForProject->deleteDocument('sessions', $session->getId());
}
}
});
App::shutdown()
->groups(['api'])
->inject('utopia')

61
composer.lock generated
View file

@ -805,16 +805,16 @@
},
{
"name": "laravel/pint",
"version": "v1.2.0",
"version": "v1.2.1",
"source": {
"type": "git",
"url": "https://github.com/laravel/pint.git",
"reference": "1d276e4c803397a26cc337df908f55c2a4e90d86"
"reference": "e60e2112ee779ce60f253695b273d1646a17d6f1"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/laravel/pint/zipball/1d276e4c803397a26cc337df908f55c2a4e90d86",
"reference": "1d276e4c803397a26cc337df908f55c2a4e90d86",
"url": "https://api.github.com/repos/laravel/pint/zipball/e60e2112ee779ce60f253695b273d1646a17d6f1",
"reference": "e60e2112ee779ce60f253695b273d1646a17d6f1",
"shasum": ""
},
"require": {
@ -826,10 +826,10 @@
},
"require-dev": {
"friendsofphp/php-cs-fixer": "^3.11.0",
"illuminate/view": "^9.27",
"laravel-zero/framework": "^9.1.3",
"mockery/mockery": "^1.5.0",
"nunomaduro/larastan": "^2.2",
"illuminate/view": "^9.32.0",
"laravel-zero/framework": "^9.2.0",
"mockery/mockery": "^1.5.1",
"nunomaduro/larastan": "^2.2.0",
"nunomaduro/termwind": "^1.14.0",
"pestphp/pest": "^1.22.1"
},
@ -867,7 +867,7 @@
"issues": "https://github.com/laravel/pint/issues",
"source": "https://github.com/laravel/pint"
},
"time": "2022-09-13T15:07:15+00:00"
"time": "2022-11-29T16:25:20+00:00"
},
{
"name": "matomo/device-detector",
@ -1461,16 +1461,16 @@
},
{
"name": "symfony/deprecation-contracts",
"version": "v3.1.1",
"version": "v3.2.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/deprecation-contracts.git",
"reference": "07f1b9cc2ffee6aaafcf4b710fbc38ff736bd918"
"reference": "1ee04c65529dea5d8744774d474e7cbd2f1206d3"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/07f1b9cc2ffee6aaafcf4b710fbc38ff736bd918",
"reference": "07f1b9cc2ffee6aaafcf4b710fbc38ff736bd918",
"url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/1ee04c65529dea5d8744774d474e7cbd2f1206d3",
"reference": "1ee04c65529dea5d8744774d474e7cbd2f1206d3",
"shasum": ""
},
"require": {
@ -1479,7 +1479,7 @@
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "3.1-dev"
"dev-main": "3.3-dev"
},
"thanks": {
"name": "symfony/contracts",
@ -1508,7 +1508,7 @@
"description": "A generic function and convention to trigger deprecation notices",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/deprecation-contracts/tree/v3.1.1"
"source": "https://github.com/symfony/deprecation-contracts/tree/v3.2.0"
},
"funding": [
{
@ -1524,7 +1524,7 @@
"type": "tidelift"
}
],
"time": "2022-02-25T11:15:52+00:00"
"time": "2022-11-25T10:21:52+00:00"
},
{
"name": "utopia-php/abuse",
@ -1945,24 +1945,25 @@
},
{
"name": "utopia-php/framework",
"version": "0.25.0",
"version": "0.25.1",
"source": {
"type": "git",
"url": "https://github.com/utopia-php/framework.git",
"reference": "c524f681254255c8204fbf7919c53bf3b4982636"
"reference": "2391b397135586b2100d39e338827bef8d2f4ad0"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/utopia-php/framework/zipball/c524f681254255c8204fbf7919c53bf3b4982636",
"reference": "c524f681254255c8204fbf7919c53bf3b4982636",
"url": "https://api.github.com/repos/utopia-php/framework/zipball/2391b397135586b2100d39e338827bef8d2f4ad0",
"reference": "2391b397135586b2100d39e338827bef8d2f4ad0",
"shasum": ""
},
"require": {
"php": ">=8.0.0"
},
"require-dev": {
"laravel/pint": "^1.2",
"phpunit/phpunit": "^9.5.25",
"vimeo/psalm": "^4.27.0"
"vimeo/psalm": "4.27.0"
},
"type": "library",
"autoload": {
@ -1982,9 +1983,9 @@
],
"support": {
"issues": "https://github.com/utopia-php/framework/issues",
"source": "https://github.com/utopia-php/framework/tree/0.25.0"
"source": "https://github.com/utopia-php/framework/tree/0.25.1"
},
"time": "2022-11-02T09:49:57+00:00"
"time": "2022-11-23T18:22:23+00:00"
},
{
"name": "utopia-php/image",
@ -3291,21 +3292,21 @@
},
{
"name": "phpspec/prophecy",
"version": "v1.15.0",
"version": "v1.16.0",
"source": {
"type": "git",
"url": "https://github.com/phpspec/prophecy.git",
"reference": "bbcd7380b0ebf3961ee21409db7b38bc31d69a13"
"reference": "be8cac52a0827776ff9ccda8c381ac5b71aeb359"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/phpspec/prophecy/zipball/bbcd7380b0ebf3961ee21409db7b38bc31d69a13",
"reference": "bbcd7380b0ebf3961ee21409db7b38bc31d69a13",
"url": "https://api.github.com/repos/phpspec/prophecy/zipball/be8cac52a0827776ff9ccda8c381ac5b71aeb359",
"reference": "be8cac52a0827776ff9ccda8c381ac5b71aeb359",
"shasum": ""
},
"require": {
"doctrine/instantiator": "^1.2",
"php": "^7.2 || ~8.0, <8.2",
"php": "^7.2 || 8.0.* || 8.1.* || 8.2.*",
"phpdocumentor/reflection-docblock": "^5.2",
"sebastian/comparator": "^3.0 || ^4.0",
"sebastian/recursion-context": "^3.0 || ^4.0"
@ -3352,9 +3353,9 @@
],
"support": {
"issues": "https://github.com/phpspec/prophecy/issues",
"source": "https://github.com/phpspec/prophecy/tree/v1.15.0"
"source": "https://github.com/phpspec/prophecy/tree/v1.16.0"
},
"time": "2021-12-08T12:19:24+00:00"
"time": "2022-11-29T15:06:56+00:00"
},
{
"name": "phpunit/php-code-coverage",