Skip to content

Commit

Permalink
Add missing tests and fix PHPDoc
Browse files Browse the repository at this point in the history
Signed-off-by: Lukas Reschke <[email protected]>
  • Loading branch information
LukasReschke committed Nov 2, 2016
1 parent 234033e commit cb5db29
Show file tree
Hide file tree
Showing 4 changed files with 169 additions and 3 deletions.
9 changes: 8 additions & 1 deletion lib/private/Authentication/Token/DefaultTokenProvider.php
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
<?php
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
* @copyright Copyright (c) 2016, Christoph Wurst <[email protected]>
*
* @author Christoph Wurst <[email protected]>
*
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -98,6 +103,7 @@ public function generateToken($token, $uid, $loginName, $password, $name, $type
* Save the updated token
*
* @param IToken $token
* @throws InvalidTokenException
*/
public function updateToken(IToken $token) {
if (!($token instanceof DefaultToken)) {
Expand Down Expand Up @@ -156,6 +162,7 @@ public function getToken($tokenId) {
/**
* @param string $oldSessionId
* @param string $sessionId
* @throws InvalidTokenException
*/
public function renewSessionToken($oldSessionId, $sessionId) {
$token = $this->getToken($oldSessionId);
Expand Down
1 change: 1 addition & 0 deletions lib/private/Authentication/Token/IProvider.php
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ public function getToken($tokenId) ;
/**
* @param string $oldSessionId
* @param string $sessionId
* @throws InvalidTokenException
*/
public function renewSessionToken($oldSessionId, $sessionId);

Expand Down
118 changes: 116 additions & 2 deletions tests/lib/Authentication/Token/DefaultTokenProviderTest.php
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
<?php

/**
* @author Christoph Wurst <[email protected]>
*
* @copyright Copyright (c) 2016, Lukas Reschke <[email protected]>
* @copyright Copyright (c) 2016, ownCloud, Inc.
* @license AGPL-3.0
*
Expand All @@ -25,6 +25,7 @@
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;
Expand All @@ -34,13 +35,19 @@

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() {
Expand Down Expand Up @@ -262,4 +269,111 @@ public function testInvalidateOldTokens() {
$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');
}

}
44 changes: 44 additions & 0 deletions tests/lib/User/SessionTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,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();
Expand All @@ -55,6 +61,21 @@ protected function setUp() {
$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);
}
Expand Down Expand Up @@ -1136,4 +1157,27 @@ public function testNoUpdateAuthTokenLastCheckRecent() {

$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);
}
}

0 comments on commit cb5db29

Please sign in to comment.