summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRoeland Jago Douma <rullzer@users.noreply.github.com>2020-10-08 11:52:45 +0200
committerGitHub <noreply@github.com>2020-10-08 11:52:45 +0200
commit84a58957d558fbacb348af6910db263b05370ee2 (patch)
tree052ab19186a07ed8f24f8f057f39e1212f357f21
parent759f47cba364566ebbf77ca3c662a253232f9d7d (diff)
parent93756602541232a6154d9a96c725180d173672eb (diff)
downloadnextcloud-server-84a58957d558fbacb348af6910db263b05370ee2.tar.gz
nextcloud-server-84a58957d558fbacb348af6910db263b05370ee2.zip
Merge pull request #23214 from nextcloud/backport/22937/stable19
[stable19] Allow configuring the activity update interval of token
-rw-r--r--config/config.sample.php12
-rw-r--r--lib/private/Authentication/Token/PublicKeyTokenProvider.php6
-rw-r--r--tests/lib/Authentication/Token/PublicKeyTokenProviderTest.php6
3 files changed, 23 insertions, 1 deletions
diff --git a/config/config.sample.php b/config/config.sample.php
index c099b81bd7c..16216bb75c6 100644
--- a/config/config.sample.php
+++ b/config/config.sample.php
@@ -270,6 +270,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.
*
* Disabling this is discouraged for security reasons.
diff --git a/lib/private/Authentication/Token/PublicKeyTokenProvider.php b/lib/private/Authentication/Token/PublicKeyTokenProvider.php
index 17d6a351c8e..43d708c268a 100644
--- a/lib/private/Authentication/Token/PublicKeyTokenProvider.php
+++ b/lib/private/Authentication/Token/PublicKeyTokenProvider.php
@@ -214,9 +214,13 @@ class PublicKeyTokenProvider implements IProvider {
if (!($token instanceof PublicKeyToken)) {
throw new InvalidTokenException();
}
+
+ $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);
diff --git a/tests/lib/Authentication/Token/PublicKeyTokenProviderTest.php b/tests/lib/Authentication/Token/PublicKeyTokenProviderTest.php
index 43ae0e9542c..eaffa905b9a 100644
--- a/tests/lib/Authentication/Token/PublicKeyTokenProviderTest.php
+++ b/tests/lib/Authentication/Token/PublicKeyTokenProviderTest.php
@@ -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')