Add missing tests and fix PHPDoc
Signed-off-by: Lukas Reschke <lukas@statuscode.ch>
This commit is contained in:
parent
271f2a4cff
commit
9d6e01ef40
4 changed files with 169 additions and 4 deletions
|
@ -1,6 +1,7 @@
|
|||
<?php
|
||||
/**
|
||||
* @copyright Copyright (c) 2016, ownCloud, Inc.
|
||||
* @copyright Copyright (c) 2016, Christoph Wurst <christoph@winzerhof-wurst.at>
|
||||
*
|
||||
* @author Christoph Wurst <christoph@owncloud.com>
|
||||
*
|
||||
|
@ -56,7 +57,11 @@ class DefaultTokenProvider implements IProvider {
|
|||
* @param ILogger $logger
|
||||
* @param ITimeFactory $time
|
||||
*/
|
||||
public function __construct(DefaultTokenMapper $mapper, ICrypto $crypto, IConfig $config, ILogger $logger, ITimeFactory $time) {
|
||||
public function __construct(DefaultTokenMapper $mapper,
|
||||
ICrypto $crypto,
|
||||
IConfig $config,
|
||||
ILogger $logger,
|
||||
ITimeFactory $time) {
|
||||
$this->mapper = $mapper;
|
||||
$this->crypto = $crypto;
|
||||
$this->config = $config;
|
||||
|
@ -98,6 +103,7 @@ class DefaultTokenProvider implements IProvider {
|
|||
* Save the updated token
|
||||
*
|
||||
* @param IToken $token
|
||||
* @throws InvalidTokenException
|
||||
*/
|
||||
public function updateToken(IToken $token) {
|
||||
if (!($token instanceof DefaultToken)) {
|
||||
|
@ -156,6 +162,7 @@ class DefaultTokenProvider implements IProvider {
|
|||
/**
|
||||
* @param string $oldSessionId
|
||||
* @param string $sessionId
|
||||
* @throws InvalidTokenException
|
||||
*/
|
||||
public function renewSessionToken($oldSessionId, $sessionId) {
|
||||
$token = $this->getToken($oldSessionId);
|
||||
|
|
|
@ -55,6 +55,7 @@ interface IProvider {
|
|||
/**
|
||||
* @param string $oldSessionId
|
||||
* @param string $sessionId
|
||||
* @throws InvalidTokenException
|
||||
*/
|
||||
public function renewSessionToken($oldSessionId, $sessionId);
|
||||
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* @author Christoph Wurst <christoph@owncloud.com>
|
||||
*
|
||||
* @copyright Copyright (c) 2016, Lukas Reschke <lukas@statuscode.ch>
|
||||
* @copyright Copyright (c) 2016, ownCloud, Inc.
|
||||
* @license AGPL-3.0
|
||||
*
|
||||
|
@ -25,6 +25,7 @@ namespace Test\Authentication\Token;
|
|||
use OC\Authentication\Token\DefaultToken;
|
||||
use OC\Authentication\Token\DefaultTokenProvider;
|
||||
use OC\Authentication\Token\IToken;
|
||||
use OCP\AppFramework\Db\Mapper;
|
||||
use OCP\AppFramework\Utility\ITimeFactory;
|
||||
use OCP\IConfig;
|
||||
use OCP\ILogger;
|
||||
|
@ -34,13 +35,19 @@ use Test\TestCase;
|
|||
|
||||
class DefaultTokenProviderTest extends TestCase {
|
||||
|
||||
/** @var DefaultTokenProvider */
|
||||
/** @var DefaultTokenProvider|\PHPUnit_Framework_MockObject_MockObject */
|
||||
private $tokenProvider;
|
||||
/** @var Mapper|\PHPUnit_Framework_MockObject_MockObject */
|
||||
private $mapper;
|
||||
/** @var ICrypto|\PHPUnit_Framework_MockObject_MockObject */
|
||||
private $crypto;
|
||||
/** @var IConfig|\PHPUnit_Framework_MockObject_MockObject */
|
||||
private $config;
|
||||
/** @var ILogger|\PHPUnit_Framework_MockObject_MockObject */
|
||||
private $logger;
|
||||
/** @var ITimeFactory|\PHPUnit_Framework_MockObject_MockObject */
|
||||
private $timeFactory;
|
||||
/** @var int */
|
||||
private $time;
|
||||
|
||||
protected function setUp() {
|
||||
|
@ -262,4 +269,111 @@ class DefaultTokenProviderTest extends TestCase {
|
|||
$this->tokenProvider->invalidateOldTokens();
|
||||
}
|
||||
|
||||
public function testRenewSessionTokenWithoutPassword() {
|
||||
$token = $this->getMockBuilder(DefaultToken::class)
|
||||
->disableOriginalConstructor()
|
||||
->setMethods(['getUID', 'getLoginName', 'getPassword', 'getName'])
|
||||
->getMock();
|
||||
$token
|
||||
->expects($this->at(0))
|
||||
->method('getUID')
|
||||
->willReturn('UserUid');
|
||||
$token
|
||||
->expects($this->at(1))
|
||||
->method('getLoginName')
|
||||
->willReturn('UserLoginName');
|
||||
$token
|
||||
->expects($this->at(2))
|
||||
->method('getPassword')
|
||||
->willReturn(null);
|
||||
$token
|
||||
->expects($this->at(3))
|
||||
->method('getName')
|
||||
->willReturn('MyTokenName');
|
||||
$this->config
|
||||
->expects($this->exactly(2))
|
||||
->method('getSystemValue')
|
||||
->with('secret')
|
||||
->willReturn('MyInstanceSecret');
|
||||
$this->mapper
|
||||
->expects($this->at(0))
|
||||
->method('getToken')
|
||||
->with(hash('sha512', 'oldId' . 'MyInstanceSecret'))
|
||||
->willReturn($token);
|
||||
$newToken = new DefaultToken();
|
||||
$newToken->setUid('UserUid');
|
||||
$newToken->setLoginName('UserLoginName');
|
||||
$newToken->setName('MyTokenName');
|
||||
$newToken->setToken(hash('sha512', 'newId' . 'MyInstanceSecret'));
|
||||
$newToken->setType(IToken::TEMPORARY_TOKEN);
|
||||
$newToken->setLastActivity(1313131);
|
||||
$this->mapper
|
||||
->expects($this->at(1))
|
||||
->method('insert')
|
||||
->with($newToken);
|
||||
|
||||
$this->tokenProvider->renewSessionToken('oldId', 'newId');
|
||||
}
|
||||
|
||||
public function testRenewSessionTokenWithPassword() {
|
||||
$token = $this->getMockBuilder(DefaultToken::class)
|
||||
->disableOriginalConstructor()
|
||||
->setMethods(['getUID', 'getLoginName', 'getPassword', 'getName'])
|
||||
->getMock();
|
||||
$token
|
||||
->expects($this->at(0))
|
||||
->method('getUID')
|
||||
->willReturn('UserUid');
|
||||
$token
|
||||
->expects($this->at(1))
|
||||
->method('getLoginName')
|
||||
->willReturn('UserLoginName');
|
||||
$token
|
||||
->expects($this->at(2))
|
||||
->method('getPassword')
|
||||
->willReturn('EncryptedPassword');
|
||||
$token
|
||||
->expects($this->at(3))
|
||||
->method('getPassword')
|
||||
->willReturn('EncryptedPassword');
|
||||
$token
|
||||
->expects($this->at(4))
|
||||
->method('getName')
|
||||
->willReturn('MyTokenName');
|
||||
$this->crypto
|
||||
->expects($this->any(0))
|
||||
->method('decrypt')
|
||||
->with('EncryptedPassword', 'oldIdMyInstanceSecret')
|
||||
->willReturn('ClearTextPassword');
|
||||
$this->crypto
|
||||
->expects($this->any(1))
|
||||
->method('encrypt')
|
||||
->with('ClearTextPassword', 'newIdMyInstanceSecret')
|
||||
->willReturn('EncryptedPassword');
|
||||
$this->config
|
||||
->expects($this->exactly(4))
|
||||
->method('getSystemValue')
|
||||
->with('secret')
|
||||
->willReturn('MyInstanceSecret');
|
||||
$this->mapper
|
||||
->expects($this->at(0))
|
||||
->method('getToken')
|
||||
->with(hash('sha512', 'oldId' . 'MyInstanceSecret'))
|
||||
->willReturn($token);
|
||||
$newToken = new DefaultToken();
|
||||
$newToken->setUid('UserUid');
|
||||
$newToken->setLoginName('UserLoginName');
|
||||
$newToken->setName('MyTokenName');
|
||||
$newToken->setToken(hash('sha512', 'newId' . 'MyInstanceSecret'));
|
||||
$newToken->setType(IToken::TEMPORARY_TOKEN);
|
||||
$newToken->setLastActivity(1313131);
|
||||
$newToken->setPassword('EncryptedPassword');
|
||||
$this->mapper
|
||||
->expects($this->at(1))
|
||||
->method('insert')
|
||||
->with($newToken);
|
||||
|
||||
$this->tokenProvider->renewSessionToken('oldId', 'newId');
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* Copyright (c) 2013 Robin Appelman <icewind@owncloud.com>
|
||||
* This file is licensed under the Affero General Public License version 3 or
|
||||
|
@ -43,6 +42,12 @@ class SessionTest extends \Test\TestCase {
|
|||
private $throttler;
|
||||
/** @var ISecureRandom|\PHPUnit_Framework_MockObject_MockObject */
|
||||
private $random;
|
||||
/** @var IUserManager|\PHPUnit_Framework_MockObject_MockObject */
|
||||
private $manager;
|
||||
/** @var ISession|\PHPUnit_Framework_MockObject_MockObject */
|
||||
private $session;
|
||||
/** @var Session|\PHPUnit_Framework_MockObject_MockObject */
|
||||
private $userSession;
|
||||
|
||||
protected function setUp() {
|
||||
parent::setUp();
|
||||
|
@ -55,6 +60,21 @@ class SessionTest extends \Test\TestCase {
|
|||
$this->config = $this->createMock(IConfig::class);
|
||||
$this->throttler = $this->createMock(Throttler::class);
|
||||
$this->random = $this->createMock(ISecureRandom::class);
|
||||
$this->manager = $this->createMock(IUserManager::class);
|
||||
$this->session = $this->createMock(ISession::class);
|
||||
$this->userSession = $this->getMockBuilder(Session::class)
|
||||
->setConstructorArgs([
|
||||
$this->manager,
|
||||
$this->session,
|
||||
$this->timeFactory,
|
||||
$this->tokenProvider,
|
||||
$this->config,
|
||||
$this->random,
|
||||
])
|
||||
->setMethods([
|
||||
'setMagicInCookie',
|
||||
])
|
||||
->getMock();
|
||||
|
||||
\OC_User::setIncognitoMode(false);
|
||||
}
|
||||
|
@ -1136,4 +1156,27 @@ class SessionTest extends \Test\TestCase {
|
|||
|
||||
$userSession->logClientIn('john', 'doe', $request, $this->throttler);
|
||||
}
|
||||
|
||||
public function testCreateRememberMeToken() {
|
||||
$user = $this->createMock(IUser::class);
|
||||
$user
|
||||
->expects($this->exactly(2))
|
||||
->method('getUID')
|
||||
->willReturn('UserUid');
|
||||
$this->random
|
||||
->expects($this->once())
|
||||
->method('generate')
|
||||
->with(32)
|
||||
->willReturn('LongRandomToken');
|
||||
$this->config
|
||||
->expects($this->once())
|
||||
->method('setUserValue')
|
||||
->with('UserUid', 'login_token', 'LongRandomToken', 10000);
|
||||
$this->userSession
|
||||
->expects($this->once())
|
||||
->method('setMagicInCookie')
|
||||
->with('UserUid', 'LongRandomToken');
|
||||
|
||||
$this->userSession->createRememberMeToken($user);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue