Browse Source
add method to query all user auth tokens
remotes/origin/smb-delay-init
Christoph Wurst
10 years ago
No known key found for this signature in database
GPG Key ID: FEECD2543CA6EAF0
5 changed files with
82 additions and
0 deletions
-
lib/private/Authentication/Token/DefaultTokenMapper.php
-
lib/private/Authentication/Token/DefaultTokenProvider.php
-
lib/private/Authentication/Token/IProvider.php
-
tests/lib/authentication/token/defaulttokenmappertest.php
-
tests/lib/authentication/token/defaulttokenprovidertest.php
|
|
|
@ -26,6 +26,7 @@ use OCP\AppFramework\Db\DoesNotExistException; |
|
|
|
use OCP\AppFramework\Db\Mapper; |
|
|
|
use OCP\DB\QueryBuilder\IQueryBuilder; |
|
|
|
use OCP\IDBConnection; |
|
|
|
use OCP\IUser; |
|
|
|
|
|
|
|
class DefaultTokenMapper extends Mapper { |
|
|
|
|
|
|
|
@ -83,4 +84,31 @@ class DefaultTokenMapper extends Mapper { |
|
|
|
return DefaultToken::fromRow($data); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* Get all token of a user |
|
|
|
* |
|
|
|
* The provider may limit the number of result rows in case of an abuse |
|
|
|
* where a high number of (session) tokens is generated |
|
|
|
* |
|
|
|
* @param IUser $user |
|
|
|
* @return DefaultToken[] |
|
|
|
*/ |
|
|
|
public function getTokenByUser(IUser $user) { |
|
|
|
/* @var $qb IQueryBuilder */ |
|
|
|
$qb = $this->db->getQueryBuilder(); |
|
|
|
$qb->select('id', 'uid', 'password', 'name', 'type', 'token', 'last_activity') |
|
|
|
->from('authtoken') |
|
|
|
->where($qb->expr()->eq('uid', $qb->createNamedParameter($user->getUID()))) |
|
|
|
->setMaxResults(1000); |
|
|
|
$result = $qb->execute(); |
|
|
|
$data = $result->fetchAll(); |
|
|
|
$result->closeCursor(); |
|
|
|
|
|
|
|
$entities = array_map(function ($row) { |
|
|
|
return DefaultToken::fromRow($row); |
|
|
|
}, $data); |
|
|
|
|
|
|
|
return $entities; |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
@ -28,6 +28,7 @@ use OCP\AppFramework\Db\DoesNotExistException; |
|
|
|
use OCP\AppFramework\Utility\ITimeFactory; |
|
|
|
use OCP\IConfig; |
|
|
|
use OCP\ILogger; |
|
|
|
use OCP\IUser; |
|
|
|
use OCP\Security\ICrypto; |
|
|
|
|
|
|
|
class DefaultTokenProvider implements IProvider { |
|
|
|
@ -102,6 +103,19 @@ class DefaultTokenProvider implements IProvider { |
|
|
|
$this->mapper->update($token); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* Get all token of a user |
|
|
|
* |
|
|
|
* The provider may limit the number of result rows in case of an abuse |
|
|
|
* where a high number of (session) tokens is generated |
|
|
|
* |
|
|
|
* @param IUser $user |
|
|
|
* @return IToken[] |
|
|
|
*/ |
|
|
|
public function getTokenByUser(IUser $user) { |
|
|
|
return $this->mapper->getTokenByUser($user); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* Get a token by token id |
|
|
|
* |
|
|
|
|
|
|
|
@ -23,6 +23,7 @@ |
|
|
|
namespace OC\Authentication\Token; |
|
|
|
|
|
|
|
use OC\Authentication\Exceptions\InvalidTokenException; |
|
|
|
use OCP\IUser; |
|
|
|
|
|
|
|
interface IProvider { |
|
|
|
|
|
|
|
@ -68,6 +69,17 @@ interface IProvider { |
|
|
|
*/ |
|
|
|
public function updateToken(IToken $token); |
|
|
|
|
|
|
|
/** |
|
|
|
* Get all token of a user |
|
|
|
* |
|
|
|
* The provider may limit the number of result rows in case of an abuse |
|
|
|
* where a high number of (session) tokens is generated |
|
|
|
* |
|
|
|
* @param IUser $user |
|
|
|
* @return IToken[] |
|
|
|
*/ |
|
|
|
public function getTokenByUser(IUser $user); |
|
|
|
|
|
|
|
/** |
|
|
|
* Get the (unencrypted) password of the given token |
|
|
|
* |
|
|
|
|
|
|
|
@ -141,4 +141,22 @@ class DefaultTokenMapperTest extends TestCase { |
|
|
|
$this->mapper->getToken($token); |
|
|
|
} |
|
|
|
|
|
|
|
public function testGetTokenByUser() { |
|
|
|
$user = $this->getMock('\OCP\IUser'); |
|
|
|
$user->expects($this->once()) |
|
|
|
->method('getUID') |
|
|
|
->will($this->returnValue('user1')); |
|
|
|
|
|
|
|
$this->assertCount(2, $this->mapper->getTokenByUser($user)); |
|
|
|
} |
|
|
|
|
|
|
|
public function testGetTokenByUserNotFound() { |
|
|
|
$user = $this->getMock('\OCP\IUser'); |
|
|
|
$user->expects($this->once()) |
|
|
|
->method('getUID') |
|
|
|
->will($this->returnValue('user1000')); |
|
|
|
|
|
|
|
$this->assertCount(0, $this->mapper->getTokenByUser($user)); |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
@ -103,6 +103,16 @@ class DefaultTokenProviderTest extends TestCase { |
|
|
|
|
|
|
|
$this->assertEquals($this->time, $tk->getLastActivity()); |
|
|
|
} |
|
|
|
|
|
|
|
public function testGetTokenByUser() { |
|
|
|
$user = $this->getMock('\OCP\IUser'); |
|
|
|
$this->mapper->expects($this->once()) |
|
|
|
->method('getTokenByUser') |
|
|
|
->with($user) |
|
|
|
->will($this->returnValue(['token'])); |
|
|
|
|
|
|
|
$this->assertEquals(['token'], $this->tokenProvider->getTokenByUser($user)); |
|
|
|
} |
|
|
|
|
|
|
|
public function testGetPassword() { |
|
|
|
$token = 'token1234'; |
|
|
|
|