Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/server.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVincent Petry <pvince81@owncloud.com>2014-06-25 21:59:39 +0400
committerVincent Petry <pvince81@owncloud.com>2014-06-25 21:59:39 +0400
commit93a6792da7507d570a287d080b37f6dab3fd31c0 (patch)
tree6ca5e94a6211a553a89b633a34be70ea4d33c4fc
parent7c362ab55ef76a51879229c8254e4c2893949cdc (diff)
parentd22559200cda0b864e0c539059ccf1dd1996ab9e (diff)
Merge pull request #9205 from owncloud/remoteshare-fixurlpath
Fix parsing of remote URL when mounting remote shares
-rw-r--r--apps/files_sharing/lib/external/storage.php4
-rw-r--r--apps/files_sharing/tests/externalstorage.php91
2 files changed, 93 insertions, 2 deletions
diff --git a/apps/files_sharing/lib/external/storage.php b/apps/files_sharing/lib/external/storage.php
index cd04841bb09..2771f974614 100644
--- a/apps/files_sharing/lib/external/storage.php
+++ b/apps/files_sharing/lib/external/storage.php
@@ -37,9 +37,9 @@ class Storage extends DAV implements ISharedStorage {
$this->remote = $options['remote'];
$this->remoteUser = $options['owner'];
list($protocol, $remote) = explode('://', $this->remote);
- list($host, $root) = explode('/', $remote);
+ list($host, $root) = explode('/', $remote, 2);
$secure = $protocol === 'https';
- $root .= '/public.php/webdav';
+ $root = rtrim($root, '/') . '/public.php/webdav';
$this->mountPoint = $options['mountpoint'];
$this->token = $options['token'];
parent::__construct(array(
diff --git a/apps/files_sharing/tests/externalstorage.php b/apps/files_sharing/tests/externalstorage.php
new file mode 100644
index 00000000000..b7797333c10
--- /dev/null
+++ b/apps/files_sharing/tests/externalstorage.php
@@ -0,0 +1,91 @@
+<?php
+/**
+ * ownCloud
+ *
+ * @author Vincent Petry
+ * @copyright 2014 Vincent Petry <pvince81@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/>.
+ *
+ */
+
+require_once __DIR__ . '/base.php';
+
+require_once __DIR__ . '/../../files_external/lib/webdav.php';
+
+/**
+ * Tests for the external Storage class for remote shares.
+ */
+class Test_Files_Sharing_External_Storage extends \PHPUnit_Framework_TestCase {
+
+ function optionsProvider() {
+ return array(
+ array(
+ 'http://remoteserver:8080/owncloud',
+ 'http://remoteserver:8080/owncloud/public.php/webdav/',
+ ),
+ // extra slash
+ array(
+ 'http://remoteserver:8080/owncloud/',
+ 'http://remoteserver:8080/owncloud/public.php/webdav/',
+ ),
+ // extra path
+ array(
+ 'http://remoteserver:8080/myservices/owncloud/',
+ 'http://remoteserver:8080/myservices/owncloud/public.php/webdav/',
+ ),
+ // root path
+ array(
+ 'http://remoteserver:8080/',
+ 'http://remoteserver:8080/public.php/webdav/',
+ ),
+ // without port
+ array(
+ 'http://remoteserver/oc.test',
+ 'http://remoteserver/oc.test/public.php/webdav/',
+ ),
+ // https
+ array(
+ 'https://remoteserver/',
+ 'https://remoteserver/public.php/webdav/',
+ ),
+ );
+ }
+
+ /**
+ * @dataProvider optionsProvider
+ */
+ public function testStorageMountOptions($inputUri, $baseUri) {
+ $storage = new TestSharingExternalStorage(
+ array(
+ 'remote' => $inputUri,
+ 'owner' => 'testOwner',
+ 'mountpoint' => 'remoteshare',
+ 'token' => 'abcdef',
+ 'password' => '',
+ )
+ );
+ $this->assertEquals($baseUri, $storage->getBaseUri());
+ }
+}
+
+/**
+ * Dummy subclass to make it possible to access private members
+ */
+class TestSharingExternalStorage extends \OCA\Files_Sharing\External\Storage {
+
+ public function getBaseUri() {
+ return $this->createBaseUri();
+ }
+}