[Pkg-owncloud-commits] [owncloud] 10/104: only remove encryption keys if a real file gets deleted, skip this method if a file outside of /data/user/files was deleted
David Prévot
taffit at moszumanska.debian.org
Sat Jan 18 13:33:36 UTC 2014
This is an automated email from the git hooks/post-receive script.
taffit pushed a commit to branch master
in repository owncloud.
commit 73a0b690e94a11a48f952076e4829f2f931533be
Author: Bjoern Schiessle <schiessle at owncloud.com>
Date: Mon Dec 16 12:16:07 2013 +0100
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 5ba3bfa..4a41c97 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 a22f124..419f95e 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');
+ }
}
}
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-owncloud/owncloud.git
More information about the Pkg-owncloud-commits
mailing list