mc-cms-namelessmc/modules/Core/classes/Tasks/PurgeExpiredSessions.php
tadhgboyle ab6a0331cb
Add user sessions page (#3278)
* Save device information on login

* Users sessions page

* PR comments & device detection improvements

* Fix code-style

* Store IP in session & display on the user sessions page

* Don't show session hash, add last seen

* Fix last seen translation, ...

* Unnecesary Output::getClean() - Partydragen

* Apparently I did use admin/sessions language term

* Show location of ip

* Update custom/panel_templates/Default/core/users_sessions.tpl

Co-authored-by: Tadhg Boyle <tadhgsmboyle@gmail.com>

* Update custom/languages/en_UK.json

Co-authored-by: Tadhg Boyle <tadhgsmboyle@gmail.com>

* Update modules/Core/pages/panel/users_sessions.php

Co-authored-by: Tadhg Boyle <tadhgsmboyle@gmail.com>

* Update modules/Core/pages/panel/users_sessions.php

Co-authored-by: Tadhg Boyle <tadhgsmboyle@gmail.com>

* use country the second time

* wip

* wip usercp sessions view

* wip

* wip - show ip to user

* wip

* wip

* chore: fix build issues

* feat: add token expiry to sessions table and increase default expiry to 1 month

* feat: prevent access to geoip database

* feat: correct migrations for user sessions columns

* feat: add missing localisation terms to sessions page

* chore: purify agent info

---------

Co-authored-by: Supercrafter100 <58982133+supercrafter100@users.noreply.github.com>
Co-authored-by: Sam <samerton@users.noreply.github.com>
2024-10-17 23:21:27 -07:00

54 lines
1.5 KiB
PHP

<?php
class PurgeExpiredSessions extends Task
{
public function run(): string {
$language = $this->_container->get(Language::class);
$cutoff = strtotime('1 month ago');
$count = DB::getInstance()->query(
<<<SQL
SELECT
COUNT(*) c
FROM
`nl2_users_session`
WHERE
`last_seen` < ? OR
(
`last_seen` IS NULL AND
`active` = 0 AND
`expires_at` IS NULL
)
SQL,
[
$cutoff,
]
)->first()->c;
if ($count) {
DB::getInstance()->query(
'DELETE FROM `nl2_users_session` WHERE `last_seen` < ? OR (`last_seen` < ? AND `active` = 0 AND `expires_at` IS NULL)',
[
$cutoff,
]
);
}
$this->setOutput(['result' => $language->get('admin', 'sessions_purged', ['count' => $count])]);
$this->reschedule($language);
return Task::STATUS_COMPLETED;
}
private function reschedule(Language $language) {
Queue::schedule((new PurgeExpiredSessions())->fromNew(
Module::getIdFromName('Core'),
$language->get('admin', 'purge_sessions'),
[],
Date::next()->getTimestamp()
));
}
public static function schedule(Language $language) {
(new self())->reschedule($language);
}
}