diff options
author | Christoph Wurst <christoph@owncloud.com> | 2016-04-26 12:48:19 +0200 |
---|---|---|
committer | Thomas Müller <thomas.mueller@tmit.eu> | 2016-05-11 13:36:46 +0200 |
commit | 8d4850218740b74faae5af637d1b1c2b3dee3c41 (patch) | |
tree | a54f2a3efc72f58fea3909a017211ac26027fbf2 /lib/private | |
parent | 53636c73d649514fbbfeba4741f39be1725e47fd (diff) | |
download | nextcloud-server-8d4850218740b74faae5af637d1b1c2b3dee3c41.tar.gz nextcloud-server-8d4850218740b74faae5af637d1b1c2b3dee3c41.zip |
Add index on 'last_activity'
add token type column and delete only temporary tokens in the background job
debounce token updates; fix wrong class import
Diffstat (limited to 'lib/private')
-rw-r--r-- | lib/private/Authentication/Token/DefaultToken.php | 5 | ||||
-rw-r--r-- | lib/private/Authentication/Token/DefaultTokenMapper.php | 6 | ||||
-rw-r--r-- | lib/private/Authentication/Token/DefaultTokenProvider.php | 4 | ||||
-rw-r--r-- | lib/private/Authentication/Token/IToken.php | 3 | ||||
-rw-r--r-- | lib/private/User/Session.php | 10 |
5 files changed, 22 insertions, 6 deletions
diff --git a/lib/private/Authentication/Token/DefaultToken.php b/lib/private/Authentication/Token/DefaultToken.php index 6b859d7d063..78b5c2d6116 100644 --- a/lib/private/Authentication/Token/DefaultToken.php +++ b/lib/private/Authentication/Token/DefaultToken.php @@ -49,6 +49,11 @@ class DefaultToken extends Entity implements IToken { /** * @var int */ + protected $type; + + /** + * @var int + */ protected $lastActivity; public function getId() { diff --git a/lib/private/Authentication/Token/DefaultTokenMapper.php b/lib/private/Authentication/Token/DefaultTokenMapper.php index d54d2489399..f4d979183e6 100644 --- a/lib/private/Authentication/Token/DefaultTokenMapper.php +++ b/lib/private/Authentication/Token/DefaultTokenMapper.php @@ -50,9 +50,11 @@ class DefaultTokenMapper extends Mapper { */ public function invalidateOld($olderThan) { $sql = 'DELETE FROM `' . $this->getTableName() . '` ' - . 'WHERE `last_activity` < ?'; + . 'WHERE `last_activity` < ? ' + . 'AND `type` = ?'; $this->execute($sql, [ - $olderThan + $olderThan, + IToken::TEMPORARY_TOKEN, ]); } diff --git a/lib/private/Authentication/Token/DefaultTokenProvider.php b/lib/private/Authentication/Token/DefaultTokenProvider.php index b3564e0e81b..a4e44f3c5d2 100644 --- a/lib/private/Authentication/Token/DefaultTokenProvider.php +++ b/lib/private/Authentication/Token/DefaultTokenProvider.php @@ -61,14 +61,16 @@ class DefaultTokenProvider implements IProvider { * @param string $token * @param string $uid * @param string $password + * @apram int $type token type * @return DefaultToken */ - public function generateToken($token, $uid, $password, $name) { + public function generateToken($token, $uid, $password, $name, $type = IToken::TEMPORARY_TOKEN) { $dbToken = new DefaultToken(); $dbToken->setUid($uid); $dbToken->setPassword($this->encryptPassword($password, $token)); $dbToken->setName($name); $dbToken->setToken($this->hashToken($token)); + $dbToken->setType($type); $dbToken->setLastActivity(time()); $this->mapper->insert($dbToken); diff --git a/lib/private/Authentication/Token/IToken.php b/lib/private/Authentication/Token/IToken.php index 10b54c0d2a8..549a1f98268 100644 --- a/lib/private/Authentication/Token/IToken.php +++ b/lib/private/Authentication/Token/IToken.php @@ -27,6 +27,9 @@ namespace OC\Authentication\Token; */ interface IToken { + const TEMPORARY_TOKEN = 0; + const PERMANENT_TOKEN = 1; + /** * Get the token ID * diff --git a/lib/private/User/Session.php b/lib/private/User/Session.php index 5d869a04ca2..976a2627735 100644 --- a/lib/private/User/Session.php +++ b/lib/private/User/Session.php @@ -38,7 +38,6 @@ use OC\Authentication\Exceptions\InvalidTokenException; use OC\Authentication\Token\DefaultTokenProvider; use OC\Authentication\Token\IProvider; use OC\Hooks\Emitter; -use OC\Session\Session; use OC_User; use OCA\DAV\Connector\Sabre\Auth; use OCP\IRequest; @@ -73,7 +72,7 @@ class Session implements IUserSession, Emitter { private $manager; /* - * @var Session $session + * @var ISession $session */ private $session; @@ -219,7 +218,12 @@ class Session implements IUserSession, Emitter { } // Session is valid, so the token can be refreshed - $this->tokenProvider->updateToken($token); + // To save unnecessary DB queries, this is only done once a minute + $lastTokenUpdate = $this->session->get('last_token_update') ? : 0; + if ($lastTokenUpdate < (time () - 60)) { + $this->tokenProvider->updateToken($token); + $this->session->set('last_token_update', time()); + } return true; } |