Browse Source

Allow configuring the activity update interval of token

On some systems with a lot of users this creates a lot of extra DB
writes.
Being able to increase this interval helps there.

Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
tags/v21.0.0beta1
Roeland Jago Douma 3 years ago
parent
commit
76a7600e2e
No account linked to committer's email address

+ 12
- 0
config/config.sample.php View File

@@ -269,6 +269,18 @@ $CONFIG = [
*/
'token_auth_enforced' => false,

/**
* The interval at which token activity should be updated.
* Increasing this value means that the last activty on the security page gets
* more outdated.
*
* Tokens are still checked every 5 minutes for validity
* max value: 300
*
* Defaults to ``300``
*/
'token_auth_activity_update' => 60,

/**
* Whether the bruteforce protection shipped with Nextcloud should be enabled or not.
*

+ 5
- 1
lib/private/Authentication/Token/PublicKeyTokenProvider.php View File

@@ -215,9 +215,13 @@ class PublicKeyTokenProvider implements IProvider {
if (!($token instanceof PublicKeyToken)) {
throw new InvalidTokenException("Invalid token type");
}

$activityInterval = $this->config->getSystemValueInt('token_auth_activity_update', 60);
$activityInterval = min(max($activityInterval, 0), 300);

/** @var DefaultToken $token */
$now = $this->time->getTime();
if ($token->getLastActivity() < ($now - 60)) {
if ($token->getLastActivity() < ($now - $activityInterval)) {
// Update token only once per minute
$token->setLastActivity($now);
$this->mapper->update($token);

+ 6
- 0
tests/lib/Authentication/Token/PublicKeyTokenProviderTest.php View File

@@ -112,6 +112,12 @@ class PublicKeyTokenProviderTest extends TestCase {

public function testUpdateTokenDebounce() {
$tk = new PublicKeyToken();

$this->config->method('getSystemValueInt')
->willReturnCallback(function ($value, $default) {
return $default;
});

$tk->setLastActivity($this->time - 30);
$this->mapper->expects($this->never())
->method('update')

Loading…
Cancel
Save