Skip to content

Commit 21fbfa1

Browse files
authored
Merge pull request #61944 from nextcloud/chore/cleanup-login-tokens
feat(login): clean remember me tokens
2 parents f337dee + e648131 commit 21fbfa1

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
@@ -2080,6 +2080,7 @@
20802080
'OC\\Repair\\AddBruteForceCleanupJob' => $baseDir . '/lib/private/Repair/AddBruteForceCleanupJob.php',
20812081
'OC\\Repair\\AddCleanupBackgroundJobsJob' => $baseDir . '/lib/private/Repair/AddCleanupBackgroundJobsJob.php',
20822082
'OC\\Repair\\AddCleanupDeletedUsersBackgroundJob' => $baseDir . '/lib/private/Repair/AddCleanupDeletedUsersBackgroundJob.php',
2083+
'OC\\Repair\\AddCleanupLoginTokens' => $baseDir . '/lib/private/Repair/AddCleanupLoginTokens.php',
20832084
'OC\\Repair\\AddCleanupUpdaterBackupsJob' => $baseDir . '/lib/private/Repair/AddCleanupUpdaterBackupsJob.php',
20842085
'OC\\Repair\\AddMetadataGenerationJob' => $baseDir . '/lib/private/Repair/AddMetadataGenerationJob.php',
20852086
'OC\\Repair\\AddMovePreviewJob' => $baseDir . '/lib/private/Repair/AddMovePreviewJob.php',
@@ -2302,6 +2303,7 @@
23022303
'OC\\User\\AvailabilityCoordinator' => $baseDir . '/lib/private/User/AvailabilityCoordinator.php',
23032304
'OC\\User\\Backend' => $baseDir . '/lib/private/User/Backend.php',
23042305
'OC\\User\\BackgroundJobs\\CleanupDeletedUsers' => $baseDir . '/lib/private/User/BackgroundJobs/CleanupDeletedUsers.php',
2306+
'OC\\User\\BackgroundJobs\\CleanupLoginTokens' => $baseDir . '/lib/private/User/BackgroundJobs/CleanupLoginTokens.php',
23052307
'OC\\User\\Database' => $baseDir . '/lib/private/User/Database.php',
23062308
'OC\\User\\DisabledUserException' => $baseDir . '/lib/private/User/DisabledUserException.php',
23072309
'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
@@ -2121,6 +2121,7 @@ class ComposerStaticInit749170dad3f5e7f9ca158f5a9f04f6a2
21212121
'OC\\Repair\\AddBruteForceCleanupJob' => __DIR__ . '/../../..' . '/lib/private/Repair/AddBruteForceCleanupJob.php',
21222122
'OC\\Repair\\AddCleanupBackgroundJobsJob' => __DIR__ . '/../../..' . '/lib/private/Repair/AddCleanupBackgroundJobsJob.php',
21232123
'OC\\Repair\\AddCleanupDeletedUsersBackgroundJob' => __DIR__ . '/../../..' . '/lib/private/Repair/AddCleanupDeletedUsersBackgroundJob.php',
2124+
'OC\\Repair\\AddCleanupLoginTokens' => __DIR__ . '/../../..' . '/lib/private/Repair/AddCleanupLoginTokens.php',
21242125
'OC\\Repair\\AddCleanupUpdaterBackupsJob' => __DIR__ . '/../../..' . '/lib/private/Repair/AddCleanupUpdaterBackupsJob.php',
21252126
'OC\\Repair\\AddMetadataGenerationJob' => __DIR__ . '/../../..' . '/lib/private/Repair/AddMetadataGenerationJob.php',
21262127
'OC\\Repair\\AddMovePreviewJob' => __DIR__ . '/../../..' . '/lib/private/Repair/AddMovePreviewJob.php',
@@ -2343,6 +2344,7 @@ class ComposerStaticInit749170dad3f5e7f9ca158f5a9f04f6a2
23432344
'OC\\User\\AvailabilityCoordinator' => __DIR__ . '/../../..' . '/lib/private/User/AvailabilityCoordinator.php',
23442345
'OC\\User\\Backend' => __DIR__ . '/../../..' . '/lib/private/User/Backend.php',
23452346
'OC\\User\\BackgroundJobs\\CleanupDeletedUsers' => __DIR__ . '/../../..' . '/lib/private/User/BackgroundJobs/CleanupDeletedUsers.php',
2347+
'OC\\User\\BackgroundJobs\\CleanupLoginTokens' => __DIR__ . '/../../..' . '/lib/private/User/BackgroundJobs/CleanupLoginTokens.php',
23462348
'OC\\User\\Database' => __DIR__ . '/../../..' . '/lib/private/User/Database.php',
23472349
'OC\\User\\DisabledUserException' => __DIR__ . '/../../..' . '/lib/private/User/DisabledUserException.php',
23482350
'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
@@ -11,6 +11,7 @@
1111
use OC\Repair\AddBruteForceCleanupJob;
1212
use OC\Repair\AddCleanupBackgroundJobsJob;
1313
use OC\Repair\AddCleanupDeletedUsersBackgroundJob;
14+
use OC\Repair\AddCleanupLoginTokens;
1415
use OC\Repair\AddCleanupUpdaterBackupsJob;
1516
use OC\Repair\AddMetadataGenerationJob;
1617
use OC\Repair\AddMovePreviewJob;
@@ -194,6 +195,7 @@ public static function getRepairSteps(bool $includeExpensive = false): array {
194195
Server::get(RepairLogoDimension::class),
195196
Server::get(RemoveLegacyDatadirFile::class),
196197
Server::get(AddCleanupDeletedUsersBackgroundJob::class),
198+
Server::get(AddCleanupLoginTokens::class),
197199
Server::get(SanitizeAccountProperties::class),
198200
Server::get(AddMovePreviewJob::class),
199201
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
@@ -29,6 +29,7 @@
2929
use OC\Setup\Sqlite;
3030
use OC\TextProcessing\RemoveOldTasksBackgroundJob;
3131
use OC\User\BackgroundJobs\CleanupDeletedUsers;
32+
use OC\User\BackgroundJobs\CleanupLoginTokens;
3233
use OC\User\Session;
3334
use OCP\AppFramework\QueryException;
3435
use OCP\AppFramework\Utility\ITimeFactory;
@@ -530,6 +531,7 @@ public static function installBackgroundJobs(): void {
530531
$jobList->add(BackgroundCleanupJob::class);
531532
$jobList->add(RemoveOldTasksBackgroundJob::class);
532533
$jobList->add(CleanupDeletedUsers::class);
534+
$jobList->add(CleanupLoginTokens::class);
533535
$jobList->add(GenerateMetadataJob::class);
534536
$jobList->add(PreviewMigrationJob::class);
535537
$jobList->add(ExpirePreviewsJob::class);
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)