summaryrefslogtreecommitdiffstats
path: root/apps
diff options
context:
space:
mode:
authorVincent Petry <pvince81@owncloud.com>2013-10-09 16:54:36 +0200
committerVincent Petry <pvince81@owncloud.com>2013-10-09 17:30:22 +0200
commitb1f1357957c85c23ace4beed497df2128484d651 (patch)
tree183b071c6bb5ad1848e1232df82e3c7e12889b28 /apps
parenta18ebac108ad58d7b4298489fcb7ed3f22a99bb5 (diff)
downloadnextcloud-server-b1f1357957c85c23ace4beed497df2128484d651.tar.gz
nextcloud-server-b1f1357957c85c23ace4beed497df2128484d651.zip
Added ownCloud backend for external storage
To make it possible to use the short ownCloud URL (without specifying webdav.php or remote.php), a new backend is available for ownCloud. The user must specify the host + context path in the "Url" field (which is mapped to the "host" parameter) and the subdir to mount in the "Root" field. This is to prevent confusion because some users forget to append webdav.php or remote.php to the WebDAV URL. Fixes #4923
Diffstat (limited to 'apps')
-rw-r--r--apps/files_external/appinfo/app.php1
-rwxr-xr-xapps/files_external/lib/config.php26
-rw-r--r--apps/files_external/lib/owncloud.php51
-rw-r--r--apps/files_external/lib/webdav.php2
-rw-r--r--apps/files_external/tests/config.php7
-rw-r--r--apps/files_external/tests/owncloud.php31
6 files changed, 109 insertions, 9 deletions
diff --git a/apps/files_external/appinfo/app.php b/apps/files_external/appinfo/app.php
index dd0b76ed9d7..070740fb4d4 100644
--- a/apps/files_external/appinfo/app.php
+++ b/apps/files_external/appinfo/app.php
@@ -9,6 +9,7 @@
OC::$CLASSPATH['OC\Files\Storage\StreamWrapper'] = 'files_external/lib/streamwrapper.php';
OC::$CLASSPATH['OC\Files\Storage\FTP'] = 'files_external/lib/ftp.php';
OC::$CLASSPATH['OC\Files\Storage\DAV'] = 'files_external/lib/webdav.php';
+OC::$CLASSPATH['OC\Files\Storage\OwnCloud'] = 'files_external/lib/owncloud.php';
OC::$CLASSPATH['OC\Files\Storage\Google'] = 'files_external/lib/google.php';
OC::$CLASSPATH['OC\Files\Storage\SWIFT'] = 'files_external/lib/swift.php';
OC::$CLASSPATH['OC\Files\Storage\SMB'] = 'files_external/lib/smb.php';
diff --git a/apps/files_external/lib/config.php b/apps/files_external/lib/config.php
index 659959e662e..3f17b490070 100755
--- a/apps/files_external/lib/config.php
+++ b/apps/files_external/lib/config.php
@@ -106,14 +106,24 @@ class OC_Mount_Config {
}
}
- if(OC_Mount_Config::checkcurl()) $backends['\OC\Files\Storage\DAV']=array(
- 'backend' => 'ownCloud / WebDAV',
- 'configuration' => array(
- 'host' => 'URL',
- 'user' => 'Username',
- 'password' => '*Password',
- 'root' => '&Root',
- 'secure' => '!Secure https://'));
+ if(OC_Mount_Config::checkcurl()){
+ $backends['\OC\Files\Storage\DAV']=array(
+ 'backend' => 'WebDAV',
+ 'configuration' => array(
+ 'host' => 'URL',
+ 'user' => 'Username',
+ 'password' => '*Password',
+ 'root' => '&Root',
+ 'secure' => '!Secure https://'));
+ $backends['\OC\Files\Storage\OwnCloud']=array(
+ 'backend' => 'ownCloud',
+ 'configuration' => array(
+ 'host' => 'URL',
+ 'user' => 'Username',
+ 'password' => '*Password',
+ 'root' => '&Remote subfolder',
+ 'secure' => '!Secure https://'));
+ }
$backends['\OC\Files\Storage\SFTP']=array(
'backend' => 'SFTP',
diff --git a/apps/files_external/lib/owncloud.php b/apps/files_external/lib/owncloud.php
new file mode 100644
index 00000000000..98314102a64
--- /dev/null
+++ b/apps/files_external/lib/owncloud.php
@@ -0,0 +1,51 @@
+<?php
+/**
+ * Copyright (c) 2013 Vincent Petry <pvince81@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OC\Files\Storage;
+
+/**
+ * ownCloud backend for external storage based on DAV backend.
+ *
+ * The ownCloud URL consists of three parts:
+ * http://%host/%context/remote.php/webdav/%root
+ *
+ */
+class OwnCloud extends \OC\Files\Storage\DAV{
+ const OC_URL_SUFFIX = 'remote.php/webdav';
+
+ public function __construct($params) {
+ // extract context path from host if specified
+ // (owncloud install path on host)
+ $host = $params['host'];
+ $contextPath = '';
+ $hostSlashPos = strpos($host, '/');
+ if ($hostSlashPos !== false){
+ $contextPath = substr($host, $hostSlashPos);
+ $host = substr($host, 0, $hostSlashPos);
+ }
+
+ if (substr($contextPath , 1) !== '/'){
+ $contextPath .= '/';
+ }
+
+ if (isset($params['root'])){
+ $root = $params['root'];
+ if (substr($root, 1) !== '/'){
+ $root = '/' . $root;
+ }
+ }
+ else{
+ $root = '/';
+ }
+
+ $params['host'] = $host;
+ $params['root'] = $contextPath . self::OC_URL_SUFFIX . $root;
+
+ parent::__construct($params);
+ }
+}
diff --git a/apps/files_external/lib/webdav.php b/apps/files_external/lib/webdav.php
index 66920fc9f64..5bdfe4d106b 100644
--- a/apps/files_external/lib/webdav.php
+++ b/apps/files_external/lib/webdav.php
@@ -79,7 +79,7 @@ class DAV extends \OC\Files\Storage\Common{
return 'webdav::' . $this->user . '@' . $this->host . '/' . $this->root;
}
- private function createBaseUri() {
+ protected function createBaseUri() {
$baseUri='http';
if ($this->secure) {
$baseUri.='s';
diff --git a/apps/files_external/tests/config.php b/apps/files_external/tests/config.php
index d4a69d29c0f..a1651c08c85 100644
--- a/apps/files_external/tests/config.php
+++ b/apps/files_external/tests/config.php
@@ -23,6 +23,13 @@ return array(
'password'=>'test',
'root'=>'/owncloud/files/webdav.php',
),
+ 'owncloud'=>array(
+ 'run'=>true,
+ 'host'=>'localhost/owncloud',
+ 'user'=>'test',
+ 'password'=>'test',
+ 'root'=>'',
+ ),
'google'=>array(
'run'=> false,
'configured' => 'true',
diff --git a/apps/files_external/tests/owncloud.php b/apps/files_external/tests/owncloud.php
new file mode 100644
index 00000000000..408a55864f2
--- /dev/null
+++ b/apps/files_external/tests/owncloud.php
@@ -0,0 +1,31 @@
+<?php
+/**
+ * Copyright (c) 2013 Vincent Petry <pvince81@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace Test\Files\Storage;
+
+class OwnCloud extends Storage {
+
+ private $config;
+
+ public function setUp() {
+ $id = uniqid();
+ $this->config = include('files_external/tests/config.php');
+ if ( ! is_array($this->config) or ! isset($this->config['owncloud']) or ! $this->config['owncloud']['run']) {
+ $this->markTestSkipped('ownCloud backend not configured');
+ }
+ $this->config['owncloud']['root'] .= '/' . $id; //make sure we have an new empty folder to work in
+ $this->instance = new \OC\Files\Storage\OwnCloud($this->config['owncloud']);
+ $this->instance->mkdir('/');
+ }
+
+ public function tearDown() {
+ if ($this->instance) {
+ $this->instance->rmdir('/');
+ }
+ }
+}