summaryrefslogtreecommitdiffstats
path: root/apps/files_encryption
diff options
context:
space:
mode:
authorBjoern Schiessle <schiessle@owncloud.com>2013-12-16 12:16:07 +0100
committerBjoern Schiessle <schiessle@owncloud.com>2013-12-16 16:05:24 +0100
commitcdd816c930328f8ff721f9fa476184145eb3f41a (patch)
treecbbf10a01d76ff1a127861be442ae124131a4cca /apps/files_encryption
parent6d489e0474b56930081ffd83838b8d1d6ec380ea (diff)
downloadnextcloud-server-cdd816c930328f8ff721f9fa476184145eb3f41a.tar.gz
nextcloud-server-cdd816c930328f8ff721f9fa476184145eb3f41a.zip
only remove encryption keys if a real file gets deleted, skip this method if a file outside of /data/user/files was deleted
Diffstat (limited to 'apps/files_encryption')
-rw-r--r--apps/files_encryption/lib/proxy.php7
-rw-r--r--apps/files_encryption/tests/proxy.php69
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');
+ }
}
}