Skip to content

Commit 64b8145

Browse files
AltahrimDerDreschner
authored andcommitted
feat(login): clean remember me tokens
Signed-off-by: Benjamin Gaussorgues <benjamin.gaussorgues@nextcloud.com>
1 parent cad62e6 commit 64b8145

6 files changed

Lines changed: 78 additions & 0 deletions

File tree

lib/composer/composer/autoload_classmap.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2032,6 +2032,7 @@
20322032
'OC\\RepairException' => $baseDir . '/lib/private/RepairException.php',
20332033
'OC\\Repair\\AddBruteForceCleanupJob' => $baseDir . '/lib/private/Repair/AddBruteForceCleanupJob.php',
20342034
'OC\\Repair\\AddCleanupDeletedUsersBackgroundJob' => $baseDir . '/lib/private/Repair/AddCleanupDeletedUsersBackgroundJob.php',
2035+
'OC\\Repair\\AddCleanupLoginTokens' => $baseDir . '/lib/private/Repair/AddCleanupLoginTokens.php',
20352036
'OC\\Repair\\AddCleanupUpdaterBackupsJob' => $baseDir . '/lib/private/Repair/AddCleanupUpdaterBackupsJob.php',
20362037
'OC\\Repair\\AddMetadataGenerationJob' => $baseDir . '/lib/private/Repair/AddMetadataGenerationJob.php',
20372038
'OC\\Repair\\AddMovePreviewJob' => $baseDir . '/lib/private/Repair/AddMovePreviewJob.php',
@@ -2248,6 +2249,7 @@
22482249
'OC\\User\\AvailabilityCoordinator' => $baseDir . '/lib/private/User/AvailabilityCoordinator.php',
22492250
'OC\\User\\Backend' => $baseDir . '/lib/private/User/Backend.php',
22502251
'OC\\User\\BackgroundJobs\\CleanupDeletedUsers' => $baseDir . '/lib/private/User/BackgroundJobs/CleanupDeletedUsers.php',
2252+
'OC\\User\\BackgroundJobs\\CleanupLoginTokens' => $baseDir . '/lib/private/User/BackgroundJobs/CleanupLoginTokens.php',
22512253
'OC\\User\\Database' => $baseDir . '/lib/private/User/Database.php',
22522254
'OC\\User\\DisabledUserException' => $baseDir . '/lib/private/User/DisabledUserException.php',
22532255
'OC\\User\\DisplayNameCache' => $baseDir . '/lib/private/User/DisplayNameCache.php',

lib/composer/composer/autoload_static.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2073,6 +2073,7 @@ class ComposerStaticInit749170dad3f5e7f9ca158f5a9f04f6a2
20732073
'OC\\RepairException' => __DIR__ . '/../../..' . '/lib/private/RepairException.php',
20742074
'OC\\Repair\\AddBruteForceCleanupJob' => __DIR__ . '/../../..' . '/lib/private/Repair/AddBruteForceCleanupJob.php',
20752075
'OC\\Repair\\AddCleanupDeletedUsersBackgroundJob' => __DIR__ . '/../../..' . '/lib/private/Repair/AddCleanupDeletedUsersBackgroundJob.php',
2076+
'OC\\Repair\\AddCleanupLoginTokens' => __DIR__ . '/../../..' . '/lib/private/Repair/AddCleanupLoginTokens.php',
20762077
'OC\\Repair\\AddCleanupUpdaterBackupsJob' => __DIR__ . '/../../..' . '/lib/private/Repair/AddCleanupUpdaterBackupsJob.php',
20772078
'OC\\Repair\\AddMetadataGenerationJob' => __DIR__ . '/../../..' . '/lib/private/Repair/AddMetadataGenerationJob.php',
20782079
'OC\\Repair\\AddMovePreviewJob' => __DIR__ . '/../../..' . '/lib/private/Repair/AddMovePreviewJob.php',
@@ -2289,6 +2290,7 @@ class ComposerStaticInit749170dad3f5e7f9ca158f5a9f04f6a2
22892290
'OC\\User\\AvailabilityCoordinator' => __DIR__ . '/../../..' . '/lib/private/User/AvailabilityCoordinator.php',
22902291
'OC\\User\\Backend' => __DIR__ . '/../../..' . '/lib/private/User/Backend.php',
22912292
'OC\\User\\BackgroundJobs\\CleanupDeletedUsers' => __DIR__ . '/../../..' . '/lib/private/User/BackgroundJobs/CleanupDeletedUsers.php',
2293+
'OC\\User\\BackgroundJobs\\CleanupLoginTokens' => __DIR__ . '/../../..' . '/lib/private/User/BackgroundJobs/CleanupLoginTokens.php',
22922294
'OC\\User\\Database' => __DIR__ . '/../../..' . '/lib/private/User/Database.php',
22932295
'OC\\User\\DisabledUserException' => __DIR__ . '/../../..' . '/lib/private/User/DisabledUserException.php',
22942296
'OC\\User\\DisplayNameCache' => __DIR__ . '/../../..' . '/lib/private/User/DisplayNameCache.php',

lib/private/Repair.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
use OC\DB\ConnectionAdapter;
1111
use OC\Repair\AddBruteForceCleanupJob;
1212
use OC\Repair\AddCleanupDeletedUsersBackgroundJob;
13+
use OC\Repair\AddCleanupLoginTokens;
1314
use OC\Repair\AddCleanupUpdaterBackupsJob;
1415
use OC\Repair\AddMetadataGenerationJob;
1516
use OC\Repair\AddMovePreviewJob;
@@ -197,6 +198,7 @@ public static function getRepairSteps(): array {
197198
\OCP\Server::get(RepairLogoDimension::class),
198199
\OCP\Server::get(RemoveLegacyDatadirFile::class),
199200
\OCP\Server::get(AddCleanupDeletedUsersBackgroundJob::class),
201+
\OCP\Server::get(AddCleanupLoginTokens::class),
200202
\OCP\Server::get(SanitizeAccountProperties::class),
201203
\OCP\Server::get(AddMovePreviewJob::class),
202204
\OCP\Server::get(ConfigKeyMigration::class),
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
/**
6+
* SPDX-FileCopyrightText: 2026 Nextcloud GmbH and Nextcloud contributors
7+
* SPDX-License-Identifier: AGPL-3.0-or-later
8+
*/
9+
10+
namespace OC\Repair;
11+
12+
use OC\User\BackgroundJobs\CleanupLoginTokens;
13+
use OCP\BackgroundJob\IJobList;
14+
use OCP\Migration\IOutput;
15+
use OCP\Migration\IRepairStep;
16+
17+
class AddCleanupLoginTokens implements IRepairStep {
18+
public function __construct(
19+
private IJobList $jobList,
20+
) {
21+
}
22+
23+
#[\Override]
24+
public function getName(): string {
25+
return 'Add cleanup login tokens background job';
26+
}
27+
28+
#[\Override]
29+
public function run(IOutput $output): void {
30+
$this->jobList->add(CleanupLoginTokens::class);
31+
}
32+
}

lib/private/Setup.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
use OC\Preview\BackgroundCleanupJob;
2121
use OC\TextProcessing\RemoveOldTasksBackgroundJob;
2222
use OC\User\BackgroundJobs\CleanupDeletedUsers;
23+
use OC\User\BackgroundJobs\CleanupLoginTokens;
2324
use OCP\AppFramework\Utility\ITimeFactory;
2425
use OCP\BackgroundJob\IJobList;
2526
use OCP\Defaults;
@@ -518,6 +519,7 @@ public static function installBackgroundJobs(): void {
518519
$jobList->add(BackgroundCleanupJob::class);
519520
$jobList->add(RemoveOldTasksBackgroundJob::class);
520521
$jobList->add(CleanupDeletedUsers::class);
522+
$jobList->add(CleanupLoginTokens::class);
521523
$jobList->add(GenerateMetadataJob::class);
522524
$jobList->add(PreviewMigrationJob::class);
523525
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
/**
6+
* SPDX-FileCopyrightText: 2026 Nextcloud GmbH and Nextcloud contributors
7+
* SPDX-License-Identifier: AGPL-3.0-or-later
8+
*/
9+
10+
namespace OC\User\BackgroundJobs;
11+
12+
use OCP\AppFramework\Utility\ITimeFactory;
13+
use OCP\BackgroundJob\TimedJob;
14+
use OCP\IConfig;
15+
use OCP\IDBConnection;
16+
17+
class CleanupLoginTokens extends TimedJob {
18+
public function __construct(
19+
ITimeFactory $time,
20+
private readonly IDBConnection $connection,
21+
private readonly IConfig $config,
22+
) {
23+
parent::__construct($time);
24+
$this->setTimeSensitivity(self::TIME_INSENSITIVE);
25+
$this->setInterval(24 * 60 * 60);
26+
}
27+
28+
#[\Override]
29+
protected function run($argument): void {
30+
$rememberMeMaxAge = $this->config->getSystemValueInt('remember_login_cookie_lifetime', 60 * 60 * 24 * 15);
31+
$qb = $this->connection->getQueryBuilder();
32+
$qb
33+
->delete()
34+
->where($qb->expr()->eq('appid', $qb->expr()->literal('login_token')))
35+
->andWhere($qb->expr()->lt('configvalue', $qb->createNamedParameter(time() - $rememberMeMaxAge)))
36+
->executeStatement();
37+
}
38+
}

0 commit comments

Comments
 (0)