only create new key pair if both keys are missing
This commit is contained in:
parent
85c3b9d5cf
commit
1e284b15ff
2 changed files with 70 additions and 9 deletions
|
@ -406,19 +406,36 @@ class KeyManager {
|
|||
}
|
||||
|
||||
/**
|
||||
* @param $userId
|
||||
* check if user has a private and a public key
|
||||
*
|
||||
* @param string $userId
|
||||
* @return bool
|
||||
* @throws PrivateKeyMissingException
|
||||
* @throws PublicKeyMissingException
|
||||
*/
|
||||
public function userHasKeys($userId) {
|
||||
$privateKey = $publicKey = true;
|
||||
|
||||
try {
|
||||
$this->getPrivateKey($userId);
|
||||
$this->getPublicKey($userId);
|
||||
} catch (PrivateKeyMissingException $e) {
|
||||
return false;
|
||||
} catch (PublicKeyMissingException $e) {
|
||||
return false;
|
||||
$privateKey = false;
|
||||
$exception = $e;
|
||||
}
|
||||
try {
|
||||
$this->getPublicKey($userId);
|
||||
} catch (PublicKeyMissingException $e) {
|
||||
$publicKey = false;
|
||||
$exception = $e;
|
||||
}
|
||||
|
||||
if ($privateKey && $publicKey) {
|
||||
return true;
|
||||
} elseif (!$privateKey && !$publicKey) {
|
||||
return false;
|
||||
} else {
|
||||
throw $exception;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -182,18 +182,62 @@ class KeyManagerTest extends TestCase {
|
|||
);
|
||||
}
|
||||
|
||||
public function testUserHasKeys() {
|
||||
/**
|
||||
* @dataProvider dataTestUserHasKeys
|
||||
*/
|
||||
public function testUserHasKeys($key, $expected) {
|
||||
$this->keyStorageMock->expects($this->exactly(2))
|
||||
->method('getUserKey')
|
||||
->with($this->equalTo($this->userId), $this->anything())
|
||||
->willReturn('key');
|
||||
->willReturn($key);
|
||||
|
||||
|
||||
$this->assertTrue(
|
||||
$this->assertSame($expected,
|
||||
$this->instance->userHasKeys($this->userId)
|
||||
);
|
||||
}
|
||||
|
||||
public function dataTestUserHasKeys() {
|
||||
return [
|
||||
['key', true],
|
||||
['', false]
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException \OCA\Encryption\Exceptions\PrivateKeyMissingException
|
||||
*/
|
||||
public function testUserHasKeysMissingPrivateKey() {
|
||||
$this->keyStorageMock->expects($this->exactly(2))
|
||||
->method('getUserKey')
|
||||
->willReturnCallback(function ($uid, $keyID, $encryptionModuleId) {
|
||||
if ($keyID=== 'privateKey') {
|
||||
return '';
|
||||
}
|
||||
return 'key';
|
||||
});
|
||||
|
||||
$this->instance->userHasKeys($this->userId);
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException \OCA\Encryption\Exceptions\PublicKeyMissingException
|
||||
*/
|
||||
public function testUserHasKeysMissingPublicKey() {
|
||||
$this->keyStorageMock->expects($this->exactly(2))
|
||||
->method('getUserKey')
|
||||
->willReturnCallback(function ($uid, $keyID, $encryptionModuleId){
|
||||
if ($keyID === 'publicKey') {
|
||||
return '';
|
||||
}
|
||||
return 'key';
|
||||
});
|
||||
|
||||
$this->instance->userHasKeys($this->userId);
|
||||
|
||||
}
|
||||
|
||||
|
||||
public function testInit() {
|
||||
$this->keyStorageMock->expects($this->any())
|
||||
->method('getUserKey')
|
||||
|
|
Loading…
Reference in a new issue