Merge pull request #2240 from nextcloud/daita-encryption-init_on_master_key

init Session/privateKeys on Master Key
This commit is contained in:
Lukas Reschke 2016-11-23 15:19:24 +01:00 committed by GitHub
commit aa30c4cd80
4 changed files with 59 additions and 0 deletions

View file

@ -177,6 +177,14 @@ class Encryption implements IEncryptionModule {
$this->isWriteOperation = false;
$this->writeCache = '';
if($this->session->isReady() === false) {
// if the master key is enabled we can initialize encryption
// with a empty password and user name
if ($this->util->isMasterKeyEnabled()) {
$this->keyManager->init('', '');
}
}
if ($this->session->decryptAllModeActivated()) {
$encryptedFileKey = $this->keyManager->getEncryptedFileKey($this->path);
$shareKey = $this->keyManager->getShareKey($this->path, $this->session->getDecryptAllUid());

View file

@ -67,6 +67,16 @@ class Session {
return $status;
}
/**
* check if encryption was initialized successfully
*
* @return bool
*/
public function isReady() {
$status = $this->getStatus();
return $status === self::INIT_SUCCESSFUL;
}
/**
* Gets user or public share private key from session
*

View file

@ -279,6 +279,21 @@ class EncryptionTest extends TestCase {
);
}
/**
* test begin() if encryption is not initialized but the master key is enabled
* in this case we can initialize the encryption without a username/password
* and continue
*/
public function testBeginInitMasterKey() {
$this->sessionMock->expects($this->once())->method('isReady')->willReturn(false);
$this->utilMock->expects($this->once())->method('isMasterKeyEnabled')
->willReturn(true);
$this->keyManagerMock->expects($this->once())->method('init')->with('', '');
$this->instance->begin('/user/files/welcome.txt', 'user', 'r', [], []);
}
/**
* @dataProvider dataTestUpdate
*

View file

@ -133,6 +133,32 @@ class SessionTest extends TestCase {
$this->assertEquals(2, $this->instance->getStatus());
}
/**
* @dataProvider dataTestIsReady
*
* @param int $status
* @param bool $expected
*/
public function testIsReady($status, $expected) {
/** @var Session | \PHPUnit_Framework_MockObject_MockObject $instance */
$instance = $this->getMockBuilder(Session::class)
->setConstructorArgs([$this->sessionMock])
->setMethods(['getStatus'])->getMock();
$instance->expects($this->once())->method('getStatus')
->willReturn($status);
$this->assertSame($expected, $instance->isReady());
}
public function dataTestIsReady() {
return [
[Session::INIT_SUCCESSFUL, true],
[Session::INIT_EXECUTED, false],
[Session::NOT_INITIALIZED, false],
];
}
/**
* @param $key
* @param $value