[Pkg-owncloud-commits] [owncloud] 57/131: only move real files to the trash bin
David Prévot
taffit at moszumanska.debian.org
Tue Aug 11 15:58:31 UTC 2015
This is an automated email from the git hooks/post-receive script.
taffit pushed a commit to annotated tag v8.1.1
in repository owncloud.
commit fb452486d7ad2f8b30c509f86bcfd67fb9090480
Author: Bjoern Schiessle <schiessle at owncloud.com>
Date: Tue Jul 7 18:38:58 2015 +0200
only move real files to the trash bin
---
apps/files_trashbin/lib/storage.php | 34 ++++++++++++++++++++++++++++++++--
apps/files_trashbin/tests/storage.php | 30 ++++++++++++++++++++++++++++++
2 files changed, 62 insertions(+), 2 deletions(-)
diff --git a/apps/files_trashbin/lib/storage.php b/apps/files_trashbin/lib/storage.php
index 006971f..4185fc6 100644
--- a/apps/files_trashbin/lib/storage.php
+++ b/apps/files_trashbin/lib/storage.php
@@ -26,6 +26,7 @@ namespace OCA\Files_Trashbin;
use OC\Files\Filesystem;
use OC\Files\Storage\Wrapper\Wrapper;
+use OCP\IUserManager;
class Storage extends Wrapper {
@@ -41,8 +42,12 @@ class Storage extends Wrapper {
*/
private static $disableTrash = false;
- function __construct($parameters) {
+ /** @var IUserManager */
+ private $userManager;
+
+ function __construct($parameters, IUserManager $userManager = null) {
$this->mountPoint = $parameters['mountPoint'];
+ $this->userManager = $userManager;
parent::__construct($parameters);
}
@@ -101,6 +106,27 @@ class Storage extends Wrapper {
}
/**
+ * check if it is a file located in data/user/files only files in the
+ * 'files' directory should be moved to the trash
+ *
+ * @param $path
+ * @return bool
+ */
+ protected function shouldMoveToTrash($path){
+ $normalized = Filesystem::normalizePath($this->mountPoint . '/' . $path);
+ $parts = explode('/', $normalized);
+ if (count($parts) < 4) {
+ return false;
+ }
+
+ if ($this->userManager->userExists($parts[1]) && $parts[2] == 'files') {
+ return true;
+ }
+
+ return false;
+ }
+
+ /**
* Run the delete operation with the given method
*
* @param string $path path of file or folder to delete
@@ -112,6 +138,7 @@ class Storage extends Wrapper {
if (self::$disableTrash
|| !\OC_App::isEnabled('files_trashbin')
|| (pathinfo($path, PATHINFO_EXTENSION) === 'part')
+ || $this->shouldMoveToTrash($path) === false
) {
return call_user_func_array([$this->storage, $method], [$path]);
}
@@ -144,7 +171,10 @@ class Storage extends Wrapper {
*/
public static function setupStorage() {
\OC\Files\Filesystem::addStorageWrapper('oc_trashbin', function ($mountPoint, $storage) {
- return new \OCA\Files_Trashbin\Storage(array('storage' => $storage, 'mountPoint' => $mountPoint));
+ return new \OCA\Files_Trashbin\Storage(
+ array('storage' => $storage, 'mountPoint' => $mountPoint),
+ \OC::$server->getUserManager()
+ );
}, 1);
}
diff --git a/apps/files_trashbin/tests/storage.php b/apps/files_trashbin/tests/storage.php
index 6375436..6454050 100644
--- a/apps/files_trashbin/tests/storage.php
+++ b/apps/files_trashbin/tests/storage.php
@@ -493,4 +493,34 @@ class Storage extends \Test\TestCase {
$results = $this->rootView->getDirectoryContent($this->user . '/files_trashbin/files/');
$this->assertEquals(0, count($results));
}
+
+ /**
+ * @dataProvider dataTestShouldMoveToTrash
+ */
+ public function testShouldMoveToTrash($mountPoint, $path, $userExists, $expected) {
+ $tmpStorage = $this->getMockBuilder('\OC\Files\Storage\Temporary')
+ ->disableOriginalConstructor()->getMock();
+ $userManager = $this->getMockBuilder('OCP\IUserManager')
+ ->disableOriginalConstructor()->getMock();
+ $userManager->expects($this->any())
+ ->method('userExists')->willReturn($userExists);
+ $storage = new \OCA\Files_Trashbin\Storage(
+ ['mountPoint' => $mountPoint, 'storage' => $tmpStorage],
+ $userManager
+ );
+
+ $this->assertSame($expected,
+ $this->invokePrivate($storage, 'shouldMoveToTrash', [$path])
+ );
+
+ }
+
+ public function dataTestShouldMoveToTrash() {
+ return [
+ ['/schiesbn/', '/files/test.txt', true, true],
+ ['/schiesbn/', '/files/test.txt', false, false],
+ ['/schiesbn/', '/test.txt', true, false],
+ ['/schiesbn/', '/test.txt', false, false],
+ ];
+ }
}
--
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