-
-
Notifications
You must be signed in to change notification settings - Fork 4.2k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Signed-off-by: Lukas Reschke <[email protected]>
- Loading branch information
1 parent
234033e
commit cb5db29
Showing
4 changed files
with
169 additions
and
3 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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]> | ||
* | ||
|
@@ -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 @@ 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)) { | ||
|
@@ -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); | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 | ||
* | ||
|
@@ -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; | ||
|
@@ -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() { | ||
|
@@ -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'); | ||
} | ||
|
||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters