]> source.dussan.org Git - nextcloud-server.git/commitdiff
throw a exception if we can't handle the provided path
authorBjoern Schiessle <schiessle@owncloud.com>
Mon, 29 Sep 2014 09:13:01 +0000 (11:13 +0200)
committerBjoern Schiessle <schiessle@owncloud.com>
Wed, 1 Oct 2014 13:13:48 +0000 (15:13 +0200)
apps/files_sharing/appinfo/app.php
apps/files_sharing/lib/exceptions.php [new file with mode: 0644]
apps/files_sharing/lib/sharedmount.php
apps/files_sharing/tests/sharedmount.php

index b22c553ec937c298eb97c1b490a15c0d0fc99c09..ec429529887f4c2ad0b5e9996fa223f2e7d275a1 100644 (file)
@@ -12,6 +12,9 @@ OC::$CLASSPATH['OCA\Files\Share\Api'] = 'files_sharing/lib/api.php';
 OC::$CLASSPATH['OCA\Files\Share\Maintainer'] = 'files_sharing/lib/maintainer.php';
 OC::$CLASSPATH['OCA\Files\Share\Proxy'] = 'files_sharing/lib/proxy.php';
 
+// Exceptions
+OC::$CLASSPATH['OCA\Files_Sharing\Exceptions\BrokenPath'] = 'files_sharing/lib/exceptions.php';
+
 \OCP\App::registerAdmin('files_sharing', 'settings-admin');
 
 \OCA\Files_Sharing\Helper::registerHooks();
diff --git a/apps/files_sharing/lib/exceptions.php b/apps/files_sharing/lib/exceptions.php
new file mode 100644 (file)
index 0000000..2a57a69
--- /dev/null
@@ -0,0 +1,32 @@
+<?php
+/**
+ * ownCloud
+ *
+ * @author Bjoern Schiessle
+ * @copyright 2014 Bjoern Schiessle <schiessle@owncloud.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OCA\Files_Sharing\Exceptions;
+
+/**
+ * Expected path with a different root
+ * Possible Error Codes:
+ * 10 - Path not relative to data/ and point to the users file directory
+
+ */
+class BrokenPath extends \Exception {
+}
index 1717a4bd636564dbeb88524a31244f3412789f20..4ad2d4e6b3e205648e9bccb11fce7b4867013741 100644 (file)
@@ -91,7 +91,7 @@ class SharedMount extends Mount implements MoveableMount {
         * @param string $path the absolute path
         * @return string e.g. turns '/admin/files/test.txt' into '/test.txt'
         */
-       private function stripUserFilesPath($path) {
+       protected function stripUserFilesPath($path) {
                $trimmed = ltrim($path, '/');
                $split = explode('/', $trimmed);
 
@@ -99,8 +99,8 @@ class SharedMount extends Mount implements MoveableMount {
                if (count($split) < 3 || $split[1] !== 'files') {
                        \OCP\Util::writeLog('file sharing',
                                'Can not strip userid and "files/" from path: ' . $path,
-                               \OCP\Util::DEBUG);
-                       return false;
+                               \OCP\Util::ERROR);
+                       throw new \OCA\Files_Sharing\Exceptions\BrokenPath('Path does not start with /user/files', 10);
                }
 
                // skip 'user' and 'files'
index f8c657341849dc27e01d37b749510e156f21f3a6..ac910944f9f6511cccf7a051c25a315a4e55c5f9 100644 (file)
@@ -194,4 +194,41 @@ class Test_Files_Sharing_Mount extends Test_Files_Sharing_Base {
                \OC_Group::removeFromGroup(self::TEST_FILES_SHARING_API_USER3, 'testGroup');
        }
 
+       /**
+        * @dataProvider dataProviderTestStripUserFilesPath
+        * @param string $path
+        * @param string $expectedResult
+        * @param bool $exception if a exception is expected
+        */
+       function testStripUserFilesPath($path, $expectedResult, $exception) {
+               $testClass = new DummyTestClassSharedMount(null, null);
+               try {
+                       $result = $testClass->stripUserFilesPathDummy($path);
+                       $this->assertSame($expectedResult, $result);
+               } catch (\Exception $e) {
+                       if ($exception) {
+                               $this->assertSame(10, $e->getCode());
+                       } else {
+                               $this->assertTrue(false, "Exception catched, but expected: " . $expectedResult);
+                       }
+               }
+       }
+
+       function dataProviderTestStripUserFilesPath() {
+               return array(
+                       array('/user/files/foo.txt', '/foo.txt', false),
+                       array('/user/files/folder/foo.txt', '/folder/foo.txt', false),
+                       array('/data/user/files/foo.txt', null, true),
+                       array('/data/user/files/', null, true),
+                       array('/files/foo.txt', null, true),
+                       array('/foo.txt', null, true),
+               );
+       }
+
+}
+
+class DummyTestClassSharedMount extends \OCA\Files_Sharing\SharedMount {
+       public function stripUserFilesPathDummy($path) {
+               return $this->stripUserFilesPath($path);
+       }
 }