|
|
|
@ -528,12 +528,152 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
function loginHelper($user, $create = false) |
|
|
|
|
function testRecoveryFile() |
|
|
|
|
{ |
|
|
|
|
// login as admin |
|
|
|
|
$this->loginHelper('admin'); |
|
|
|
|
|
|
|
|
|
\OCA\Encryption\Helper::adminEnableRecovery(null, 'test123'); |
|
|
|
|
$recoveryKeyId = OC_Appconfig::getValue('files_encryption', 'recoveryKeyId'); |
|
|
|
|
|
|
|
|
|
// check if control file created |
|
|
|
|
$this->assertTrue($this->view->file_exists('/control-file/controlfile.enc')); |
|
|
|
|
|
|
|
|
|
$util = new \OCA\Encryption\Util(new \OC_FilesystemView('/'), 'admin'); |
|
|
|
|
|
|
|
|
|
// check if recovery password match |
|
|
|
|
$this->assertTrue($util->checkRecoveryPassword('test123')); |
|
|
|
|
|
|
|
|
|
// enable recovery for admin |
|
|
|
|
$this->assertTrue($util->setRecoveryForUser(true)); |
|
|
|
|
|
|
|
|
|
// create folder structure |
|
|
|
|
$this->view->mkdir('/admin/files' . $this->folder1); |
|
|
|
|
$this->view->mkdir('/admin/files' . $this->folder1 . $this->subfolder); |
|
|
|
|
$this->view->mkdir('/admin/files' . $this->folder1 . $this->subfolder . $this->subsubfolder); |
|
|
|
|
|
|
|
|
|
// save file with content |
|
|
|
|
$cryptedFile1 = file_put_contents('crypt://' . $this->filename, $this->dataShort); |
|
|
|
|
$cryptedFile2 = file_put_contents('crypt://' . $this->folder1 . $this->subfolder . $this->subsubfolder .'/'. $this->filename, $this->dataShort); |
|
|
|
|
|
|
|
|
|
// test that data was successfully written |
|
|
|
|
$this->assertTrue(is_int($cryptedFile1)); |
|
|
|
|
$this->assertTrue(is_int($cryptedFile2)); |
|
|
|
|
|
|
|
|
|
// check if share key for admin and recovery exists |
|
|
|
|
$this->assertTrue($this->view->file_exists('/admin/files_encryption/share-keys/' . $this->filename . '.admin.shareKey')); |
|
|
|
|
$this->assertTrue($this->view->file_exists('/admin/files_encryption/share-keys/' . $this->filename . '.'.$recoveryKeyId.'.shareKey')); |
|
|
|
|
$this->assertTrue($this->view->file_exists('/admin/files_encryption/share-keys/' . $this->folder1 . $this->subfolder . $this->subsubfolder .'/'. $this->filename . '.admin.shareKey')); |
|
|
|
|
$this->assertTrue($this->view->file_exists('/admin/files_encryption/share-keys/' . $this->folder1 . $this->subfolder . $this->subsubfolder .'/'. $this->filename . '.'.$recoveryKeyId.'.shareKey')); |
|
|
|
|
|
|
|
|
|
// disable recovery for admin |
|
|
|
|
$this->assertTrue($util->setRecoveryForUser(false)); |
|
|
|
|
|
|
|
|
|
// remove all recovery keys |
|
|
|
|
$util->removeRecoveryKeys('/'); |
|
|
|
|
|
|
|
|
|
// check if share key for recovery not exists |
|
|
|
|
$this->assertFalse($this->view->file_exists('/admin/files_encryption/share-keys/' . $this->filename . '.'.$recoveryKeyId.'.shareKey')); |
|
|
|
|
$this->assertFalse($this->view->file_exists('/admin/files_encryption/share-keys/' . $this->folder1 . $this->subfolder . $this->subsubfolder .'/'. $this->filename . '.'.$recoveryKeyId.'.shareKey')); |
|
|
|
|
|
|
|
|
|
// enable recovery for admin |
|
|
|
|
$this->assertTrue($util->setRecoveryForUser(true)); |
|
|
|
|
|
|
|
|
|
// remove all recovery keys |
|
|
|
|
$util->addRecoveryKeys('/'); |
|
|
|
|
|
|
|
|
|
// check if share key for admin and recovery exists |
|
|
|
|
$this->assertTrue($this->view->file_exists('/admin/files_encryption/share-keys/' . $this->filename . '.'.$recoveryKeyId.'.shareKey')); |
|
|
|
|
$this->assertTrue($this->view->file_exists('/admin/files_encryption/share-keys/' . $this->folder1 . $this->subfolder . $this->subsubfolder .'/'. $this->filename . '.'.$recoveryKeyId.'.shareKey')); |
|
|
|
|
|
|
|
|
|
// cleanup |
|
|
|
|
$this->view->unlink('/admin/files/' . $this->filename); |
|
|
|
|
$this->view->unlink('/admin/files/' . $this->folder1 . $this->subfolder . $this->subsubfolder .'/'. $this->filename); |
|
|
|
|
|
|
|
|
|
// check if share key for recovery not exists |
|
|
|
|
$this->assertFalse($this->view->file_exists('/admin/files_encryption/share-keys/' . $this->filename . '.'.$recoveryKeyId.'.shareKey')); |
|
|
|
|
$this->assertFalse($this->view->file_exists('/admin/files_encryption/share-keys/' . $this->folder1 . $this->subfolder . $this->subsubfolder .'/'. $this->filename . '.'.$recoveryKeyId.'.shareKey')); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
function testRecoveryForUser() |
|
|
|
|
{ |
|
|
|
|
// login as admin |
|
|
|
|
$this->loginHelper('admin'); |
|
|
|
|
|
|
|
|
|
\OCA\Encryption\Helper::adminEnableRecovery(null, 'test123'); |
|
|
|
|
$recoveryKeyId = OC_Appconfig::getValue('files_encryption', 'recoveryKeyId'); |
|
|
|
|
|
|
|
|
|
// check if control file created |
|
|
|
|
$this->assertTrue($this->view->file_exists('/control-file/controlfile.enc')); |
|
|
|
|
|
|
|
|
|
// login as user1 |
|
|
|
|
$this->loginHelper('user1'); |
|
|
|
|
|
|
|
|
|
$util = new \OCA\Encryption\Util(new \OC_FilesystemView('/'), 'user1'); |
|
|
|
|
|
|
|
|
|
// enable recovery for admin |
|
|
|
|
$this->assertTrue($util->setRecoveryForUser(true)); |
|
|
|
|
|
|
|
|
|
// create folder structure |
|
|
|
|
$this->view->mkdir('/user1/files' . $this->folder1); |
|
|
|
|
$this->view->mkdir('/user1/files' . $this->folder1 . $this->subfolder); |
|
|
|
|
$this->view->mkdir('/user1/files' . $this->folder1 . $this->subfolder . $this->subsubfolder); |
|
|
|
|
|
|
|
|
|
// save file with content |
|
|
|
|
$cryptedFile1 = file_put_contents('crypt://' . $this->filename, $this->dataShort); |
|
|
|
|
$cryptedFile2 = file_put_contents('crypt://' . $this->folder1 . $this->subfolder . $this->subsubfolder .'/'. $this->filename, $this->dataShort); |
|
|
|
|
|
|
|
|
|
// test that data was successfully written |
|
|
|
|
$this->assertTrue(is_int($cryptedFile1)); |
|
|
|
|
$this->assertTrue(is_int($cryptedFile2)); |
|
|
|
|
|
|
|
|
|
// check if share key for user and recovery exists |
|
|
|
|
$this->assertTrue($this->view->file_exists('/user1/files_encryption/share-keys/' . $this->filename . '.user1.shareKey')); |
|
|
|
|
$this->assertTrue($this->view->file_exists('/user1/files_encryption/share-keys/' . $this->filename . '.'.$recoveryKeyId.'.shareKey')); |
|
|
|
|
$this->assertTrue($this->view->file_exists('/user1/files_encryption/share-keys/' . $this->folder1 . $this->subfolder . $this->subsubfolder .'/'. $this->filename . '.user1.shareKey')); |
|
|
|
|
$this->assertTrue($this->view->file_exists('/user1/files_encryption/share-keys/' . $this->folder1 . $this->subfolder . $this->subsubfolder .'/'. $this->filename . '.'.$recoveryKeyId.'.shareKey')); |
|
|
|
|
|
|
|
|
|
// login as admin |
|
|
|
|
$this->loginHelper('admin'); |
|
|
|
|
|
|
|
|
|
// change password |
|
|
|
|
\OC_User::setPassword('user1', 'test', 'test123'); |
|
|
|
|
|
|
|
|
|
// login as user1 |
|
|
|
|
$this->loginHelper('user1', false, 'test'); |
|
|
|
|
|
|
|
|
|
// get file contents |
|
|
|
|
$retrievedCryptedFile1 = file_get_contents('crypt://' . $this->filename); |
|
|
|
|
$retrievedCryptedFile2 = file_get_contents('crypt://' . $this->folder1 . $this->subfolder . $this->subsubfolder .'/'. $this->filename); |
|
|
|
|
|
|
|
|
|
// check if data is the same as we previously written |
|
|
|
|
$this->assertEquals($this->dataShort, $retrievedCryptedFile1); |
|
|
|
|
$this->assertEquals($this->dataShort, $retrievedCryptedFile2); |
|
|
|
|
|
|
|
|
|
// cleanup |
|
|
|
|
$this->view->unlink('/user1/files' . $this->folder1); |
|
|
|
|
$this->view->unlink('/user1/files' . $this->filename); |
|
|
|
|
|
|
|
|
|
// check if share key for user and recovery exists |
|
|
|
|
$this->assertFalse($this->view->file_exists('/user1/files_encryption/share-keys/' . $this->filename . '.user1.shareKey')); |
|
|
|
|
$this->assertFalse($this->view->file_exists('/user1/files_encryption/share-keys/' . $this->filename . '.'.$recoveryKeyId.'.shareKey')); |
|
|
|
|
$this->assertFalse($this->view->file_exists('/user1/files_encryption/share-keys/' . $this->folder1 . $this->subfolder . $this->subsubfolder .'/'. $this->filename . '.user1.shareKey')); |
|
|
|
|
$this->assertFalse($this->view->file_exists('/user1/files_encryption/share-keys/' . $this->folder1 . $this->subfolder . $this->subsubfolder .'/'. $this->filename . '.'.$recoveryKeyId.'.shareKey')); |
|
|
|
|
|
|
|
|
|
// enable recovery for admin |
|
|
|
|
$this->assertTrue($util->setRecoveryForUser(false)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
function loginHelper($user, $create = false, $password = false) |
|
|
|
|
{ |
|
|
|
|
if ($create) { |
|
|
|
|
\OC_User::createUser($user, $user); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if($password === false) { |
|
|
|
|
$password = $user; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
\OC_Util::tearDownFS(); |
|
|
|
|
\OC_User::setUserId(''); |
|
|
|
|
\OC\Files\Filesystem::tearDown(); |
|
|
|
@ -541,7 +681,7 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase |
|
|
|
|
\OC_User::setUserId($user); |
|
|
|
|
|
|
|
|
|
$params['uid'] = $user; |
|
|
|
|
$params['password'] = $user; |
|
|
|
|
$params['password'] = $password; |
|
|
|
|
OCA\Encryption\Hooks::login($params); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|