Merge pull request #17500 from owncloud/encryption_migration_improvements

Only clean up if migration finished succesfully
This commit is contained in:
Thomas Müller 2015-07-16 14:03:21 +02:00
commit d6f02eb703
5 changed files with 75 additions and 10 deletions

View File

@ -115,5 +115,7 @@ class MigrateKeys extends Command {
} }
} }
$migration->finalCleanUp();
} }
} }

View File

@ -406,19 +406,36 @@ class KeyManager {
} }
/** /**
* @param $userId * check if user has a private and a public key
*
* @param string $userId
* @return bool * @return bool
* @throws PrivateKeyMissingException
* @throws PublicKeyMissingException
*/ */
public function userHasKeys($userId) { public function userHasKeys($userId) {
$privateKey = $publicKey = true;
try { try {
$this->getPrivateKey($userId); $this->getPrivateKey($userId);
$this->getPublicKey($userId);
} catch (PrivateKeyMissingException $e) { } catch (PrivateKeyMissingException $e) {
return false; $privateKey = false;
} catch (PublicKeyMissingException $e) { $exception = $e;
return false; }
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;
} }
/** /**

View File

@ -50,7 +50,7 @@ class Migration {
$this->config = $config; $this->config = $config;
} }
public function __destruct() { public function finalCleanUp() {
$this->view->deleteAll('files_encryption/public_keys'); $this->view->deleteAll('files_encryption/public_keys');
$this->updateFileCache(); $this->updateFileCache();
$this->config->deleteAppValue('files_encryption', 'installed_version'); $this->config->deleteAppValue('files_encryption', 'installed_version');

View File

@ -182,18 +182,62 @@ class KeyManagerTest extends TestCase {
); );
} }
public function testUserHasKeys() { /**
* @dataProvider dataTestUserHasKeys
*/
public function testUserHasKeys($key, $expected) {
$this->keyStorageMock->expects($this->exactly(2)) $this->keyStorageMock->expects($this->exactly(2))
->method('getUserKey') ->method('getUserKey')
->with($this->equalTo($this->userId), $this->anything()) ->with($this->equalTo($this->userId), $this->anything())
->willReturn('key'); ->willReturn($key);
$this->assertTrue( $this->assertSame($expected,
$this->instance->userHasKeys($this->userId) $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() { public function testInit() {
$this->keyStorageMock->expects($this->any()) $this->keyStorageMock->expects($this->any())
->method('getUserKey') ->method('getUserKey')

View File

@ -102,6 +102,8 @@ class EncryptionController extends Controller {
} while (count($users) >= $limit); } while (count($users) >= $limit);
} }
$migration->finalCleanUp();
} catch (\Exception $e) { } catch (\Exception $e) {
return array( return array(
'data' => array( 'data' => array(