summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBjörn Schießle <schiessle@owncloud.com>2013-12-16 08:46:52 -0800
committerBjörn Schießle <schiessle@owncloud.com>2013-12-16 08:46:52 -0800
commit4ae148cebdbbab6291a77b62a0ecba2c6b92ae13 (patch)
tree7f7d0c041c07e3def96d5137b8db8ec6acd46b9b
parent28a28611fb9bf58bb949342cc105057f643dc1bf (diff)
parent95892c8be9c1e5a35e8f31e2ab34d233c69e6c35 (diff)
downloadnextcloud-server-4ae148cebdbbab6291a77b62a0ecba2c6b92ae13.tar.gz
nextcloud-server-4ae148cebdbbab6291a77b62a0ecba2c6b92ae13.zip
Merge pull request #6183 from owncloud/enc_tests
enable more encryption tests
-rw-r--r--apps/files_encryption/lib/proxy.php16
-rw-r--r--apps/files_encryption/tests/proxy.php69
-rwxr-xr-xapps/files_encryption/tests/share.php27
3 files changed, 92 insertions, 20 deletions
diff --git a/apps/files_encryption/lib/proxy.php b/apps/files_encryption/lib/proxy.php
index 5ba3bfa784f..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);
@@ -182,8 +191,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');
+ }
}
}
diff --git a/apps/files_encryption/tests/share.php b/apps/files_encryption/tests/share.php
index 6a29d2428dc..e55427620a6 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,13 +752,13 @@ 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);
- \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
@@ -771,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(
@@ -809,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');
@@ -823,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(
@@ -889,8 +894,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);