From b919a65432edf1536879b341e3e4d4bd002d2196 Mon Sep 17 00:00:00 2001 From: Bjoern Schiessle Date: Wed, 4 Dec 2013 17:43:38 +0100 Subject: enable more tests --- apps/files_encryption/tests/share.php | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/apps/files_encryption/tests/share.php b/apps/files_encryption/tests/share.php index 6a29d2428dc..1d852d3c8cc 100755 --- a/apps/files_encryption/tests/share.php +++ b/apps/files_encryption/tests/share.php @@ -649,9 +649,7 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase { * @large */ function testRecoveryFile() { - $this->markTestIncomplete( - 'No idea what\'s wrong here, this works perfectly in real-world. removeRecoveryKeys(\'/\') L709 removes correctly the keys, but for some reasons afterwards also the top-level folder "share-keys" is gone...' - ); + // login as admin \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1); @@ -754,9 +752,7 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase { * @large */ function testRecoveryForUser() { - $this->markTestIncomplete( - 'This test drives Jenkins crazy - "Cannot modify header information - headers already sent" - line 811' - ); + // login as admin \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1); @@ -889,8 +885,8 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase { } catch (Exception $e) { $this->assertEquals(0, strpos($e->getMessage(), "Following users are not set up for encryption")); } - - + + // login as admin \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1); -- cgit v1.2.3 From 6d489e0474b56930081ffd83838b8d1d6ec380ea Mon Sep 17 00:00:00 2001 From: Bjoern Schiessle Date: Wed, 11 Dec 2013 15:38:19 +0100 Subject: call set password hook because it doesn't get triggered during test execution and fix paths --- apps/files_encryption/tests/share.php | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/apps/files_encryption/tests/share.php b/apps/files_encryption/tests/share.php index 1d852d3c8cc..e55427620a6 100755 --- a/apps/files_encryption/tests/share.php +++ b/apps/files_encryption/tests/share.php @@ -756,7 +756,9 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase { // login as admin \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1); - \OCA\Encryption\Helper::adminEnableRecovery(null, 'test123'); + $result = \OCA\Encryption\Helper::adminEnableRecovery(null, 'test123'); + $this->assertTrue($result); + $recoveryKeyId = OC_Appconfig::getValue('files_encryption', 'recoveryKeyId'); // login as user2 @@ -767,6 +769,9 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase { // enable recovery for admin $this->assertTrue($util->setRecoveryForUser(1)); + // add recovery keys for existing files (e.g. the auto-generated welcome.txt) + $util->addRecoveryKeys(); + // create folder structure $this->view->mkdir('/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '/files' . $this->folder1); $this->view->mkdir( @@ -805,6 +810,10 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase { // change password \OC_User::setPassword(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2, 'test', 'test123'); + $params = array('uid' => \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2, + 'password' => 'test', + 'recoveryPassword' => 'test123'); + \OCA\Encryption\Hooks::setPassphrase($params); // login as user2 \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2, false, 'test'); @@ -819,8 +828,8 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase { $this->assertEquals($this->dataShort, $retrievedCryptedFile2); // cleanup - $this->view->unlink('/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '/files' . $this->folder1); - $this->view->unlink('/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '/files' . $this->filename); + $this->view->unlink('/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '/files/' . $this->folder1); + $this->view->unlink('/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '/files/' . $this->filename); // check if share key for user and recovery exists $this->assertFalse($this->view->file_exists( -- cgit v1.2.3 From cdd816c930328f8ff721f9fa476184145eb3f41a Mon Sep 17 00:00:00 2001 From: Bjoern Schiessle Date: Mon, 16 Dec 2013 12:16:07 +0100 Subject: only remove encryption keys if a real file gets deleted, skip this method if a file outside of /data/user/files was deleted --- apps/files_encryption/lib/proxy.php | 7 +++- apps/files_encryption/tests/proxy.php | 69 +++++++++++++++++++++++++++++++---- 2 files changed, 67 insertions(+), 9 deletions(-) diff --git a/apps/files_encryption/lib/proxy.php b/apps/files_encryption/lib/proxy.php index 5ba3bfa784f..4a41c978139 100644 --- a/apps/files_encryption/lib/proxy.php +++ b/apps/files_encryption/lib/proxy.php @@ -182,8 +182,11 @@ class Proxy extends \OC_FileProxy { */ public function preUnlink($path) { - // let the trashbin handle this - if (\OCP\App::isEnabled('files_trashbin')) { + $relPath = Helper::stripUserFilesPath($path); + + // skip this method if the trash bin is enabled or if we delete a file + // outside of /data/user/files + if (\OCP\App::isEnabled('files_trashbin') || $relPath === false) { return true; } diff --git a/apps/files_encryption/tests/proxy.php b/apps/files_encryption/tests/proxy.php index a22f12411f4..419f95e1a38 100644 --- a/apps/files_encryption/tests/proxy.php +++ b/apps/files_encryption/tests/proxy.php @@ -44,8 +44,10 @@ class Test_Encryption_Proxy extends \PHPUnit_Framework_TestCase { /** * @var \OC_FilesystemView */ - public $view; + public $view; // view in /data/user/files + public $rootView; // view on /data/user public $data; + public $filename; public static function setUpBeforeClass() { // reset backend @@ -74,9 +76,12 @@ class Test_Encryption_Proxy extends \PHPUnit_Framework_TestCase { // init filesystem view $this->view = new \OC_FilesystemView('/'. \Test_Encryption_Proxy::TEST_ENCRYPTION_PROXY_USER1 . '/files'); + $this->rootView = new \OC_FilesystemView('/'. \Test_Encryption_Proxy::TEST_ENCRYPTION_PROXY_USER1 ); // init short data $this->data = 'hats'; + $this->filename = 'enc_proxy_tests-' . time() . '.txt'; + } public static function tearDownAfterClass() { @@ -90,21 +95,71 @@ class Test_Encryption_Proxy extends \PHPUnit_Framework_TestCase { */ function testPostFileSize() { - // generate filename - $filename = 'tmp-' . time() . '.txt'; - - $this->view->file_put_contents($filename, $this->data); + $this->view->file_put_contents($this->filename, $this->data); \OC_FileProxy::$enabled = false; - $unencryptedSize = $this->view->filesize($filename); + $unencryptedSize = $this->view->filesize($this->filename); \OC_FileProxy::$enabled = true; - $encryptedSize = $this->view->filesize($filename); + $encryptedSize = $this->view->filesize($this->filename); $this->assertTrue($encryptedSize !== $unencryptedSize); + // cleanup + $this->view->unlink($this->filename); + + } + + function testPreUnlinkWithoutTrash() { + + // remember files_trashbin state + $stateFilesTrashbin = OC_App::isEnabled('files_trashbin'); + + // we want to tests with app files_trashbin enabled + \OC_App::disable('files_trashbin'); + + $this->view->file_put_contents($this->filename, $this->data); + + // create a dummy file that we can delete something outside of data/user/files + $this->rootView->file_put_contents("dummy.txt", $this->data); + + // check if all keys are generated + $this->assertTrue($this->rootView->file_exists( + '/files_encryption/share-keys/' + . $this->filename . '.' . \Test_Encryption_Proxy::TEST_ENCRYPTION_PROXY_USER1 . '.shareKey')); + $this->assertTrue($this->rootView->file_exists( + '/files_encryption/keyfiles/' . $this->filename . '.key')); + + + // delete dummy file outside of data/user/files + $this->rootView->unlink("dummy.txt"); + + // all keys should still exist + $this->assertTrue($this->rootView->file_exists( + '/files_encryption/share-keys/' + . $this->filename . '.' . \Test_Encryption_Proxy::TEST_ENCRYPTION_PROXY_USER1 . '.shareKey')); + $this->assertTrue($this->rootView->file_exists( + '/files_encryption/keyfiles/' . $this->filename . '.key')); + + + // delete the file in data/user/files + $this->view->unlink($this->filename); + + // now also the keys should be gone + $this->assertFalse($this->rootView->file_exists( + '/files_encryption/share-keys/' + . $this->filename . '.' . \Test_Encryption_Proxy::TEST_ENCRYPTION_PROXY_USER1 . '.shareKey')); + $this->assertFalse($this->rootView->file_exists( + '/files_encryption/keyfiles/' . $this->filename . '.key')); + + if ($stateFilesTrashbin) { + OC_App::enable('files_trashbin'); + } + else { + OC_App::disable('files_trashbin'); + } } } -- cgit v1.2.3 From 95892c8be9c1e5a35e8f31e2ab34d233c69e6c35 Mon Sep 17 00:00:00 2001 From: Bjoern Schiessle Date: Mon, 16 Dec 2013 15:24:11 +0100 Subject: update file cache for target file --- apps/files_encryption/lib/proxy.php | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/apps/files_encryption/lib/proxy.php b/apps/files_encryption/lib/proxy.php index 4a41c978139..96667493a51 100644 --- a/apps/files_encryption/lib/proxy.php +++ b/apps/files_encryption/lib/proxy.php @@ -114,6 +114,15 @@ class Proxy extends \OC_FileProxy { // get encrypted content $data = $view->file_get_contents($tmpPath); + // update file cache for target file + $tmpFileInfo = $view->getFileInfo($tmpPath); + $fileInfo = $view->getFileInfo($path); + if (is_array($fileInfo) && is_array($tmpFileInfo)) { + $fileInfo['encrypted'] = true; + $fileInfo['unencrypted_size'] = $tmpFileInfo['size']; + $view->putFileInfo($path, $fileInfo); + } + // remove our temp file $view->deleteAll('/' . \OCP\User::getUser() . '/cache/' . $cacheFolder); -- cgit v1.2.3