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>
pull/22937/head
Roeland Jago Douma
6 years ago
No known key found for this signature in database
GPG Key ID: F941078878347C0C
3 changed files with
23 additions and
1 deletions
config/config.sample.php
lib/private/Authentication/Token/PublicKeyTokenProvider.php
tests/lib/Authentication/Token/PublicKeyTokenProviderTest.php
@ -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 .
*
@ -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 );
@ -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' )