Skip to content

Commit 648a138

Browse files
Merge pull request #61970 from nextcloud/backport/61944/stable32
[stable32] feat(login): clean remember me tokens
2 parents 241c4fd + 188c03a commit 648a138

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
@@ -1957,6 +1957,7 @@
19571957
'OC\\RepairException' => $baseDir . '/lib/private/RepairException.php',
19581958
'OC\\Repair\\AddBruteForceCleanupJob' => $baseDir . '/lib/private/Repair/AddBruteForceCleanupJob.php',
19591959
'OC\\Repair\\AddCleanupDeletedUsersBackgroundJob' => $baseDir . '/lib/private/Repair/AddCleanupDeletedUsersBackgroundJob.php',
1960+
'OC\\Repair\\AddCleanupLoginTokens' => $baseDir . '/lib/private/Repair/AddCleanupLoginTokens.php',
19601961
'OC\\Repair\\AddCleanupUpdaterBackupsJob' => $baseDir . '/lib/private/Repair/AddCleanupUpdaterBackupsJob.php',
19611962
'OC\\Repair\\AddMetadataGenerationJob' => $baseDir . '/lib/private/Repair/AddMetadataGenerationJob.php',
19621963
'OC\\Repair\\AddRemoveOldTasksBackgroundJob' => $baseDir . '/lib/private/Repair/AddRemoveOldTasksBackgroundJob.php',
@@ -2170,6 +2171,7 @@
21702171
'OC\\User\\AvailabilityCoordinator' => $baseDir . '/lib/private/User/AvailabilityCoordinator.php',
21712172
'OC\\User\\Backend' => $baseDir . '/lib/private/User/Backend.php',
21722173
'OC\\User\\BackgroundJobs\\CleanupDeletedUsers' => $baseDir . '/lib/private/User/BackgroundJobs/CleanupDeletedUsers.php',
2174+
'OC\\User\\BackgroundJobs\\CleanupLoginTokens' => $baseDir . '/lib/private/User/BackgroundJobs/CleanupLoginTokens.php',
21732175
'OC\\User\\Database' => $baseDir . '/lib/private/User/Database.php',
21742176
'OC\\User\\DisabledUserException' => $baseDir . '/lib/private/User/DisabledUserException.php',
21752177
'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
@@ -1998,6 +1998,7 @@ class ComposerStaticInit749170dad3f5e7f9ca158f5a9f04f6a2
19981998
'OC\\RepairException' => __DIR__ . '/../../..' . '/lib/private/RepairException.php',
19991999
'OC\\Repair\\AddBruteForceCleanupJob' => __DIR__ . '/../../..' . '/lib/private/Repair/AddBruteForceCleanupJob.php',
20002000
'OC\\Repair\\AddCleanupDeletedUsersBackgroundJob' => __DIR__ . '/../../..' . '/lib/private/Repair/AddCleanupDeletedUsersBackgroundJob.php',
2001+
'OC\\Repair\\AddCleanupLoginTokens' => __DIR__ . '/../../..' . '/lib/private/Repair/AddCleanupLoginTokens.php',
20012002
'OC\\Repair\\AddCleanupUpdaterBackupsJob' => __DIR__ . '/../../..' . '/lib/private/Repair/AddCleanupUpdaterBackupsJob.php',
20022003
'OC\\Repair\\AddMetadataGenerationJob' => __DIR__ . '/../../..' . '/lib/private/Repair/AddMetadataGenerationJob.php',
20032004
'OC\\Repair\\AddRemoveOldTasksBackgroundJob' => __DIR__ . '/../../..' . '/lib/private/Repair/AddRemoveOldTasksBackgroundJob.php',
@@ -2211,6 +2212,7 @@ class ComposerStaticInit749170dad3f5e7f9ca158f5a9f04f6a2
22112212
'OC\\User\\AvailabilityCoordinator' => __DIR__ . '/../../..' . '/lib/private/User/AvailabilityCoordinator.php',
22122213
'OC\\User\\Backend' => __DIR__ . '/../../..' . '/lib/private/User/Backend.php',
22132214
'OC\\User\\BackgroundJobs\\CleanupDeletedUsers' => __DIR__ . '/../../..' . '/lib/private/User/BackgroundJobs/CleanupDeletedUsers.php',
2215+
'OC\\User\\BackgroundJobs\\CleanupLoginTokens' => __DIR__ . '/../../..' . '/lib/private/User/BackgroundJobs/CleanupLoginTokens.php',
22142216
'OC\\User\\Database' => __DIR__ . '/../../..' . '/lib/private/User/Database.php',
22152217
'OC\\User\\DisabledUserException' => __DIR__ . '/../../..' . '/lib/private/User/DisabledUserException.php',
22162218
'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\AddRemoveOldTasksBackgroundJob;
@@ -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(ConfigKeyMigration::class),
202204
];
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
@@ -19,6 +19,7 @@
1919
use OC\Preview\BackgroundCleanupJob;
2020
use OC\TextProcessing\RemoveOldTasksBackgroundJob;
2121
use OC\User\BackgroundJobs\CleanupDeletedUsers;
22+
use OC\User\BackgroundJobs\CleanupLoginTokens;
2223
use OCP\AppFramework\Utility\ITimeFactory;
2324
use OCP\BackgroundJob\IJobList;
2425
use OCP\Defaults;
@@ -517,6 +518,7 @@ public static function installBackgroundJobs(): void {
517518
$jobList->add(BackgroundCleanupJob::class);
518519
$jobList->add(RemoveOldTasksBackgroundJob::class);
519520
$jobList->add(CleanupDeletedUsers::class);
521+
$jobList->add(CleanupLoginTokens::class);
520522
$jobList->add(GenerateMetadataJob::class);
521523
}
522524

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)