Browse Source

use token last_activity instead of session value

tags/v9.1.0RC1
Christoph Wurst 8 years ago
parent
commit
c4149c59c2
No account linked to committer's email address

+ 7
- 4
lib/private/Authentication/Token/DefaultTokenProvider.php View File

@@ -97,14 +97,17 @@ class DefaultTokenProvider implements IProvider {
* @throws InvalidTokenException
* @param IToken $token
*/
public function updateToken(IToken $token) {
public function updateTokenActivity(IToken $token) {
if (!($token instanceof DefaultToken)) {
throw new InvalidTokenException();
}
/** @var DefaultToken $token */
$token->setLastActivity($this->time->getTime());

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

/**

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

@@ -76,7 +76,7 @@ interface IProvider {
*
* @param IToken $token
*/
public function updateToken(IToken $token);
public function updateTokenActivity(IToken $token);

/**
* Get all token of a user

+ 2
- 16
lib/private/User/Session.php View File

@@ -237,8 +237,7 @@ class Session implements IUserSession, Emitter {
$this->session->set('last_login_check', $now);
}

// Session is valid, so the token can be refreshed
$this->updateToken($token);
$this->tokenProvider->updateTokenActivity($token);
}

/**
@@ -541,7 +540,7 @@ class Session implements IUserSession, Emitter {
$result = $this->loginWithToken($token->getUID());
if ($result) {
// Login success
$this->updateToken($token);
$this->tokenProvider->updateTokenActivity($token);
return true;
}
}
@@ -551,19 +550,6 @@ class Session implements IUserSession, Emitter {
return false;
}

/**
* @param IToken $token
*/
private function updateToken(IToken $token) {
// To save unnecessary DB queries, this is only done once a minute
$lastTokenUpdate = $this->session->get('last_token_update') ? : 0;
$now = $this->timeFacory->getTime();
if ($lastTokenUpdate < ($now - 60)) {
$this->tokenProvider->updateToken($token);
$this->session->set('last_token_update', $now);
}
}

/**
* Tries to login the user with auth token header
*

+ 12
- 1
tests/lib/Authentication/Token/DefaultTokenProviderTest.php View File

@@ -97,14 +97,25 @@ class DefaultTokenProviderTest extends TestCase {

public function testUpdateToken() {
$tk = new DefaultToken();
$tk->setLastActivity($this->time - 200);
$this->mapper->expects($this->once())
->method('update')
->with($tk);

$this->tokenProvider->updateToken($tk);
$this->tokenProvider->updateTokenActivity($tk);

$this->assertEquals($this->time, $tk->getLastActivity());
}

public function testUpdateTokenDebounce() {
$tk = new DefaultToken();
$tk->setLastActivity($this->time - 30);
$this->mapper->expects($this->never())
->method('update')
->with($tk);

$this->tokenProvider->updateTokenActivity($tk);
}
public function testGetTokenByUser() {
$user = $this->getMock('\OCP\IUser');

Loading…
Cancel
Save