]> source.dussan.org Git - nextcloud-server.git/commitdiff
only remove encryption keys if a real file gets deleted, skip this method if a file...
authorBjoern Schiessle <schiessle@owncloud.com>
Mon, 16 Dec 2013 11:16:07 +0000 (12:16 +0100)
committerBjoern Schiessle <schiessle@owncloud.com>
Mon, 16 Dec 2013 15:05:24 +0000 (16:05 +0100)
apps/files_encryption/lib/proxy.php
apps/files_encryption/tests/proxy.php

index 5ba3bfa784fb65a17bbd6fde8b851db3cc19fa34..4a41c978139f1ca3fc483271dd3ec66eb8358db2 100644 (file)
@@ -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;
                }
 
index a22f12411f4e2bf7a8e2db94c7673f6efcd71c26..419f95e1a38a661de4550c24f547bf85260576be 100644 (file)
@@ -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');
+               }
        }
 
 }