|
|
@@ -29,8 +29,6 @@ namespace Test\Authentication\Token; |
|
|
|
use Doctrine\DBAL\Exception\UniqueConstraintViolationException; |
|
|
|
use OC\Authentication\Exceptions\InvalidTokenException; |
|
|
|
use OC\Authentication\Exceptions\PasswordlessTokenException; |
|
|
|
use OC\Authentication\Token\DefaultToken; |
|
|
|
use OC\Authentication\Token\DefaultTokenProvider; |
|
|
|
use OC\Authentication\Token\IToken; |
|
|
|
use OC\Authentication\Token\Manager; |
|
|
|
use OC\Authentication\Token\PublicKeyToken; |
|
|
@@ -42,8 +40,6 @@ class ManagerTest extends TestCase { |
|
|
|
|
|
|
|
/** @var PublicKeyTokenProvider|MockObject */ |
|
|
|
private $publicKeyTokenProvider; |
|
|
|
/** @var DefaultTokenProvider|MockObject */ |
|
|
|
private $defaultTokenProvider; |
|
|
|
/** @var Manager */ |
|
|
|
private $manager; |
|
|
|
|
|
|
@@ -51,17 +47,12 @@ class ManagerTest extends TestCase { |
|
|
|
parent::setUp(); |
|
|
|
|
|
|
|
$this->publicKeyTokenProvider = $this->createMock(PublicKeyTokenProvider::class); |
|
|
|
$this->defaultTokenProvider = $this->createMock(DefaultTokenProvider::class); |
|
|
|
$this->manager = new Manager( |
|
|
|
$this->defaultTokenProvider, |
|
|
|
$this->publicKeyTokenProvider |
|
|
|
); |
|
|
|
} |
|
|
|
|
|
|
|
public function testGenerateToken() { |
|
|
|
$this->defaultTokenProvider->expects($this->never()) |
|
|
|
->method('generateToken'); |
|
|
|
|
|
|
|
$token = new PublicKeyToken(); |
|
|
|
|
|
|
|
$this->publicKeyTokenProvider->expects($this->once()) |
|
|
@@ -92,8 +83,6 @@ class ManagerTest extends TestCase { |
|
|
|
public function testGenerateConflictingToken() { |
|
|
|
/** @var MockObject|UniqueConstraintViolationException $exception */ |
|
|
|
$exception = $this->createMock(UniqueConstraintViolationException::class); |
|
|
|
$this->defaultTokenProvider->expects($this->never()) |
|
|
|
->method('generateToken'); |
|
|
|
|
|
|
|
$token = new PublicKeyToken(); |
|
|
|
$token->setUid('uid'); |
|
|
@@ -129,18 +118,12 @@ class ManagerTest extends TestCase { |
|
|
|
|
|
|
|
public function tokenData(): array { |
|
|
|
return [ |
|
|
|
[new DefaultToken()], |
|
|
|
[new PublicKeyToken()], |
|
|
|
[$this->createMock(IToken::class)], |
|
|
|
]; |
|
|
|
} |
|
|
|
|
|
|
|
protected function setNoCall(IToken $token) { |
|
|
|
if (!($token instanceof DefaultToken)) { |
|
|
|
$this->defaultTokenProvider->expects($this->never()) |
|
|
|
->method($this->anything()); |
|
|
|
} |
|
|
|
|
|
|
|
if (!($token instanceof PublicKeyToken)) { |
|
|
|
$this->publicKeyTokenProvider->expects($this->never()) |
|
|
|
->method($this->anything()); |
|
|
@@ -148,13 +131,6 @@ class ManagerTest extends TestCase { |
|
|
|
} |
|
|
|
|
|
|
|
protected function setCall(IToken $token, string $function, $return = null) { |
|
|
|
if ($token instanceof DefaultToken) { |
|
|
|
$this->defaultTokenProvider->expects($this->once()) |
|
|
|
->method($function) |
|
|
|
->with($token) |
|
|
|
->willReturn($return); |
|
|
|
} |
|
|
|
|
|
|
|
if ($token instanceof PublicKeyToken) { |
|
|
|
$this->publicKeyTokenProvider->expects($this->once()) |
|
|
|
->method($function) |
|
|
@@ -164,7 +140,7 @@ class ManagerTest extends TestCase { |
|
|
|
} |
|
|
|
|
|
|
|
protected function setException(IToken $token) { |
|
|
|
if (!($token instanceof DefaultToken) && !($token instanceof PublicKeyToken)) { |
|
|
|
if (!($token instanceof PublicKeyToken)) { |
|
|
|
$this->expectException(InvalidTokenException::class); |
|
|
|
} |
|
|
|
} |
|
|
@@ -216,10 +192,6 @@ class ManagerTest extends TestCase { |
|
|
|
} |
|
|
|
|
|
|
|
public function testInvalidateTokens() { |
|
|
|
$this->defaultTokenProvider->expects($this->once()) |
|
|
|
->method('invalidateToken') |
|
|
|
->with('token'); |
|
|
|
|
|
|
|
$this->publicKeyTokenProvider->expects($this->once()) |
|
|
|
->method('invalidateToken') |
|
|
|
->with('token'); |
|
|
@@ -228,10 +200,6 @@ class ManagerTest extends TestCase { |
|
|
|
} |
|
|
|
|
|
|
|
public function testInvalidateTokenById() { |
|
|
|
$this->defaultTokenProvider->expects($this->once()) |
|
|
|
->method('invalidateTokenById') |
|
|
|
->with('uid', 42); |
|
|
|
|
|
|
|
$this->publicKeyTokenProvider->expects($this->once()) |
|
|
|
->method('invalidateTokenById') |
|
|
|
->with('uid', 42); |
|
|
@@ -240,9 +208,6 @@ class ManagerTest extends TestCase { |
|
|
|
} |
|
|
|
|
|
|
|
public function testInvalidateOldTokens() { |
|
|
|
$this->defaultTokenProvider->expects($this->once()) |
|
|
|
->method('invalidateOldTokens'); |
|
|
|
|
|
|
|
$this->publicKeyTokenProvider->expects($this->once()) |
|
|
|
->method('invalidateOldTokens'); |
|
|
|
|
|
|
@@ -250,28 +215,19 @@ class ManagerTest extends TestCase { |
|
|
|
} |
|
|
|
|
|
|
|
public function testGetTokenByUser() { |
|
|
|
$t1 = new DefaultToken(); |
|
|
|
$t2 = new DefaultToken(); |
|
|
|
$t3 = new PublicKeyToken(); |
|
|
|
$t4 = new PublicKeyToken(); |
|
|
|
|
|
|
|
$this->defaultTokenProvider |
|
|
|
->method('getTokenByUser') |
|
|
|
->willReturn([$t1, $t2]); |
|
|
|
$t1 = new PublicKeyToken(); |
|
|
|
$t2 = new PublicKeyToken(); |
|
|
|
|
|
|
|
$this->publicKeyTokenProvider |
|
|
|
->method('getTokenByUser') |
|
|
|
->willReturn([$t3, $t4]); |
|
|
|
->willReturn([$t1, $t2]); |
|
|
|
|
|
|
|
$result = $this->manager->getTokenByUser('uid'); |
|
|
|
|
|
|
|
$this->assertEquals([$t1, $t2, $t3, $t4], $result); |
|
|
|
$this->assertEquals([$t1, $t2], $result); |
|
|
|
} |
|
|
|
|
|
|
|
public function testRenewSessionTokenPublicKey() { |
|
|
|
$this->defaultTokenProvider->expects($this->never()) |
|
|
|
->method($this->anything()); |
|
|
|
|
|
|
|
$this->publicKeyTokenProvider->expects($this->once()) |
|
|
|
->method('renewSessionToken') |
|
|
|
->with('oldId', 'newId'); |
|
|
@@ -279,30 +235,12 @@ class ManagerTest extends TestCase { |
|
|
|
$this->manager->renewSessionToken('oldId', 'newId'); |
|
|
|
} |
|
|
|
|
|
|
|
public function testRenewSessionTokenDefault() { |
|
|
|
$this->publicKeyTokenProvider->expects($this->once()) |
|
|
|
->method('renewSessionToken') |
|
|
|
->with('oldId', 'newId') |
|
|
|
->willThrowException(new InvalidTokenException()); |
|
|
|
|
|
|
|
$this->defaultTokenProvider->expects($this->once()) |
|
|
|
->method('renewSessionToken') |
|
|
|
->with('oldId', 'newId'); |
|
|
|
|
|
|
|
$this->manager->renewSessionToken('oldId', 'newId'); |
|
|
|
} |
|
|
|
|
|
|
|
public function testRenewSessionInvalid() { |
|
|
|
$this->publicKeyTokenProvider->expects($this->once()) |
|
|
|
->method('renewSessionToken') |
|
|
|
->with('oldId', 'newId') |
|
|
|
->willThrowException(new InvalidTokenException()); |
|
|
|
|
|
|
|
$this->defaultTokenProvider->expects($this->once()) |
|
|
|
->method('renewSessionToken') |
|
|
|
->with('oldId', 'newId') |
|
|
|
->willThrowException(new InvalidTokenException()); |
|
|
|
|
|
|
|
$this->expectException(InvalidTokenException::class); |
|
|
|
$this->manager->renewSessionToken('oldId', 'newId'); |
|
|
|
} |
|
|
@@ -315,26 +253,6 @@ class ManagerTest extends TestCase { |
|
|
|
->with(42) |
|
|
|
->willReturn($token); |
|
|
|
|
|
|
|
$this->defaultTokenProvider->expects($this->never()) |
|
|
|
->method($this->anything()); |
|
|
|
|
|
|
|
|
|
|
|
$this->assertSame($token, $this->manager->getTokenById(42)); |
|
|
|
} |
|
|
|
|
|
|
|
public function testGetTokenByIdDefault() { |
|
|
|
$token = $this->createMock(IToken::class); |
|
|
|
|
|
|
|
$this->publicKeyTokenProvider->expects($this->once()) |
|
|
|
->method('getTokenById') |
|
|
|
->with(42) |
|
|
|
->willThrowException(new InvalidTokenException()); |
|
|
|
|
|
|
|
$this->defaultTokenProvider->expects($this->once()) |
|
|
|
->method('getTokenById') |
|
|
|
->with(42) |
|
|
|
->willReturn($token); |
|
|
|
|
|
|
|
$this->assertSame($token, $this->manager->getTokenById(42)); |
|
|
|
} |
|
|
|
|
|
|
@@ -344,11 +262,6 @@ class ManagerTest extends TestCase { |
|
|
|
->with(42) |
|
|
|
->willThrowException(new InvalidTokenException()); |
|
|
|
|
|
|
|
$this->defaultTokenProvider->expects($this->once()) |
|
|
|
->method('getTokenById') |
|
|
|
->with(42) |
|
|
|
->willThrowException(new InvalidTokenException()); |
|
|
|
|
|
|
|
$this->expectException(InvalidTokenException::class); |
|
|
|
$this->manager->getTokenById(42); |
|
|
|
} |
|
|
@@ -356,9 +269,6 @@ class ManagerTest extends TestCase { |
|
|
|
public function testGetTokenPublicKey() { |
|
|
|
$token = new PublicKeyToken(); |
|
|
|
|
|
|
|
$this->defaultTokenProvider->expects($this->never()) |
|
|
|
->method($this->anything()); |
|
|
|
|
|
|
|
$this->publicKeyTokenProvider |
|
|
|
->method('getToken') |
|
|
|
->with('tokenId') |
|
|
@@ -368,11 +278,6 @@ class ManagerTest extends TestCase { |
|
|
|
} |
|
|
|
|
|
|
|
public function testGetTokenInvalid() { |
|
|
|
$this->defaultTokenProvider |
|
|
|
->method('getToken') |
|
|
|
->with('tokenId') |
|
|
|
->willThrowException(new InvalidTokenException()); |
|
|
|
|
|
|
|
$this->publicKeyTokenProvider |
|
|
|
->method('getToken') |
|
|
|
->with('tokenId') |
|
|
@@ -382,58 +287,6 @@ class ManagerTest extends TestCase { |
|
|
|
$this->manager->getToken('tokenId'); |
|
|
|
} |
|
|
|
|
|
|
|
public function testGetTokenConvertPassword() { |
|
|
|
$oldToken = new DefaultToken(); |
|
|
|
$newToken = new PublicKeyToken(); |
|
|
|
|
|
|
|
$this->publicKeyTokenProvider |
|
|
|
->method('getToken') |
|
|
|
->with('tokenId') |
|
|
|
->willThrowException(new InvalidTokenException()); |
|
|
|
|
|
|
|
$this->defaultTokenProvider |
|
|
|
->method('getToken') |
|
|
|
->willReturn($oldToken); |
|
|
|
|
|
|
|
$this->defaultTokenProvider |
|
|
|
->method('getPassword') |
|
|
|
->with($oldToken, 'tokenId') |
|
|
|
->willReturn('password'); |
|
|
|
|
|
|
|
$this->publicKeyTokenProvider |
|
|
|
->method('convertToken') |
|
|
|
->with($oldToken, 'tokenId', 'password') |
|
|
|
->willReturn($newToken); |
|
|
|
|
|
|
|
$this->assertSame($newToken, $this->manager->getToken('tokenId')); |
|
|
|
} |
|
|
|
|
|
|
|
public function testGetTokenConvertNoPassword() { |
|
|
|
$oldToken = new DefaultToken(); |
|
|
|
$newToken = new PublicKeyToken(); |
|
|
|
|
|
|
|
$this->publicKeyTokenProvider |
|
|
|
->method('getToken') |
|
|
|
->with('tokenId') |
|
|
|
->willThrowException(new InvalidTokenException()); |
|
|
|
|
|
|
|
$this->defaultTokenProvider |
|
|
|
->method('getToken') |
|
|
|
->willReturn($oldToken); |
|
|
|
|
|
|
|
$this->defaultTokenProvider |
|
|
|
->method('getPassword') |
|
|
|
->with($oldToken, 'tokenId') |
|
|
|
->willThrowException(new PasswordlessTokenException()); |
|
|
|
|
|
|
|
$this->publicKeyTokenProvider |
|
|
|
->method('convertToken') |
|
|
|
->with($oldToken, 'tokenId', null) |
|
|
|
->willReturn($newToken); |
|
|
|
|
|
|
|
$this->assertSame($newToken, $this->manager->getToken('tokenId')); |
|
|
|
} |
|
|
|
|
|
|
|
public function testRotateInvalid() { |
|
|
|
$this->expectException(InvalidTokenException::class); |
|
|
|
$this->manager->rotate($this->createMock(IToken::class), 'oldId', 'newId'); |
|
|
@@ -450,60 +303,12 @@ class ManagerTest extends TestCase { |
|
|
|
$this->assertSame($token, $this->manager->rotate($token, 'oldId', 'newId')); |
|
|
|
} |
|
|
|
|
|
|
|
public function testRotateConvertPassword() { |
|
|
|
$oldToken = new DefaultToken(); |
|
|
|
$newToken = new PublicKeyToken(); |
|
|
|
|
|
|
|
$this->defaultTokenProvider |
|
|
|
->method('getPassword') |
|
|
|
->with($oldToken, 'oldId') |
|
|
|
->willReturn('password'); |
|
|
|
|
|
|
|
$this->publicKeyTokenProvider |
|
|
|
->method('convertToken') |
|
|
|
->with($oldToken, 'newId', 'password') |
|
|
|
->willReturn($newToken); |
|
|
|
|
|
|
|
$this->assertSame($newToken, $this->manager->rotate($oldToken, 'oldId', 'newId')); |
|
|
|
} |
|
|
|
|
|
|
|
public function testRotateConvertNoPassword() { |
|
|
|
$oldToken = new DefaultToken(); |
|
|
|
$newToken = new PublicKeyToken(); |
|
|
|
|
|
|
|
$this->defaultTokenProvider |
|
|
|
->method('getPassword') |
|
|
|
->with($oldToken, 'oldId') |
|
|
|
->willThrowException(new PasswordlessTokenException()); |
|
|
|
|
|
|
|
$this->publicKeyTokenProvider |
|
|
|
->method('convertToken') |
|
|
|
->with($oldToken, 'newId', null) |
|
|
|
->willReturn($newToken); |
|
|
|
|
|
|
|
$this->assertSame($newToken, $this->manager->rotate($oldToken, 'oldId', 'newId')); |
|
|
|
} |
|
|
|
|
|
|
|
public function testMarkPasswordInvalidDefault() { |
|
|
|
$token = $this->createMock(DefaultToken::class); |
|
|
|
|
|
|
|
$this->defaultTokenProvider->expects($this->once()) |
|
|
|
->method('markPasswordInvalid') |
|
|
|
->with($token, 'tokenId'); |
|
|
|
$this->publicKeyTokenProvider->expects($this->never()) |
|
|
|
->method($this->anything()); |
|
|
|
|
|
|
|
$this->manager->markPasswordInvalid($token, 'tokenId'); |
|
|
|
} |
|
|
|
|
|
|
|
public function testMarkPasswordInvalidPublicKey() { |
|
|
|
$token = $this->createMock(PublicKeyToken::class); |
|
|
|
|
|
|
|
$this->publicKeyTokenProvider->expects($this->once()) |
|
|
|
->method('markPasswordInvalid') |
|
|
|
->with($token, 'tokenId'); |
|
|
|
$this->defaultTokenProvider->expects($this->never()) |
|
|
|
->method($this->anything()); |
|
|
|
|
|
|
|
$this->manager->markPasswordInvalid($token, 'tokenId'); |
|
|
|
} |
|
|
@@ -515,9 +320,6 @@ class ManagerTest extends TestCase { |
|
|
|
} |
|
|
|
|
|
|
|
public function testUpdatePasswords() { |
|
|
|
$this->defaultTokenProvider->expects($this->once()) |
|
|
|
->method('updatePasswords') |
|
|
|
->with('uid', 'pass'); |
|
|
|
$this->publicKeyTokenProvider->expects($this->once()) |
|
|
|
->method('updatePasswords') |
|
|
|
->with('uid', 'pass'); |