mirror of
https://github.com/NamelessMC/Nameless
synced 2026-08-18 06:29:04 -04:00
* 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>
54 lines
1.5 KiB
PHP
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);
|
|
}
|
|
}
|