From 361d6892c98ed5f01026919c5aa33e734e4f47d9 Mon Sep 17 00:00:00 2001 From: Vincent Petry Date: Mon, 13 Oct 2014 17:15:58 +0200 Subject: [PATCH] Allow specifying protocol in ext storage OC config Allow specifying a protocol in the host field when mounting another ownCloud instance. Note that this was already possible with the WebDAV config but this bug made it inconsistent. --- apps/files_external/lib/owncloud.php | 8 ++ .../tests/owncloudfunctions.php | 83 +++++++++++++++++++ lib/private/files/storage/dav.php | 4 +- 3 files changed, 93 insertions(+), 2 deletions(-) create mode 100644 apps/files_external/tests/owncloudfunctions.php diff --git a/apps/files_external/lib/owncloud.php b/apps/files_external/lib/owncloud.php index 98314102a64..04a1e959eb0 100644 --- a/apps/files_external/lib/owncloud.php +++ b/apps/files_external/lib/owncloud.php @@ -22,6 +22,14 @@ class OwnCloud extends \OC\Files\Storage\DAV{ // extract context path from host if specified // (owncloud install path on host) $host = $params['host']; + // strip protocol + if (substr($host, 0, 8) == "https://") { + $host = substr($host, 8); + $params['secure'] = true; + } else if (substr($host, 0, 7) == "http://") { + $host = substr($host, 7); + $params['secure'] = false; + } $contextPath = ''; $hostSlashPos = strpos($host, '/'); if ($hostSlashPos !== false){ diff --git a/apps/files_external/tests/owncloudfunctions.php b/apps/files_external/tests/owncloudfunctions.php new file mode 100644 index 00000000000..57608fff0cf --- /dev/null +++ b/apps/files_external/tests/owncloudfunctions.php @@ -0,0 +1,83 @@ + + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ + +namespace Test\Files\Storage; + +class OwnCloudFunctions extends \PHPUnit_Framework_TestCase { + + function configUrlProvider() { + return array( + array( + array( + 'host' => 'testhost', + 'root' => 'testroot', + 'secure' => false + ), + 'http://testhost/remote.php/webdav/testroot/', + ), + array( + array( + 'host' => 'testhost', + 'root' => 'testroot', + 'secure' => true + ), + 'https://testhost/remote.php/webdav/testroot/', + ), + array( + array( + 'host' => 'http://testhost', + 'root' => 'testroot', + 'secure' => false + ), + 'http://testhost/remote.php/webdav/testroot/', + ), + array( + array( + 'host' => 'https://testhost', + 'root' => 'testroot', + 'secure' => false + ), + 'https://testhost/remote.php/webdav/testroot/', + ), + array( + array( + 'host' => 'https://testhost/testroot', + 'root' => '', + 'secure' => false + ), + 'https://testhost/testroot/remote.php/webdav/', + ), + array( + array( + 'host' => 'https://testhost/testroot', + 'root' => 'subdir', + 'secure' => false + ), + 'https://testhost/testroot/remote.php/webdav/subdir/', + ), + array( + array( + 'host' => 'http://testhost/testroot', + 'root' => 'subdir', + 'secure' => true + ), + 'http://testhost/testroot/remote.php/webdav/subdir/', + ), + ); + } + + /** + * @dataProvider configUrlProvider + */ + public function testConfig($config, $expectedUri) { + $config['user'] = 'someuser'; + $config['password'] = 'somepassword'; + $instance = new \OC\Files\Storage\OwnCloud($config); + $this->assertEquals($expectedUri, $instance->createBaseUri()); + } +} diff --git a/lib/private/files/storage/dav.php b/lib/private/files/storage/dav.php index 0ba69fd727b..fb3fd1edf7e 100644 --- a/lib/private/files/storage/dav.php +++ b/lib/private/files/storage/dav.php @@ -58,7 +58,7 @@ class DAV extends \OC\Files\Storage\Common { $this->root .= '/'; } } else { - throw new \Exception(); + throw new \Exception('Invalid webdav storage configuration'); } } @@ -85,7 +85,7 @@ class DAV extends \OC\Files\Storage\Common { return 'webdav::' . $this->user . '@' . $this->host . '/' . $this->root; } - protected function createBaseUri() { + public function createBaseUri() { $baseUri = 'http'; if ($this->secure) { $baseUri .= 's'; -- 2.39.5