summaryrefslogtreecommitdiffstats
path: root/apps
diff options
context:
space:
mode:
authorThomas Mueller <thomas.mueller@tmit.eu>2013-04-12 15:51:58 +0200
committerThomas Mueller <thomas.mueller@tmit.eu>2013-04-12 15:51:58 +0200
commit7dd33911171bf4cc732889a4e6ff27851cb59274 (patch)
tree76b39a70b5d020eb6f41c980c346c3d846bf59a2 /apps
parent33ee2e2f10a425eb81338081325e5f96fc48c1f9 (diff)
downloadnextcloud-server-7dd33911171bf4cc732889a4e6ff27851cb59274.tar.gz
nextcloud-server-7dd33911171bf4cc732889a4e6ff27851cb59274.zip
initial integration with iRODS www.irods.org
The used PHP API is hosted at https://code.renci.org/gf/project/irodsphp/
Diffstat (limited to 'apps')
-rw-r--r--apps/files_external/appinfo/app.php1
-rwxr-xr-xapps/files_external/lib/config.php9
-rw-r--r--apps/files_external/lib/irods.php104
-rw-r--r--apps/files_external/lib/streamwrapper.php2
4 files changed, 116 insertions, 0 deletions
diff --git a/apps/files_external/appinfo/app.php b/apps/files_external/appinfo/app.php
index d786c6c7a2a..af9117ac1ef 100644
--- a/apps/files_external/appinfo/app.php
+++ b/apps/files_external/appinfo/app.php
@@ -15,6 +15,7 @@ OC::$CLASSPATH['OC\Files\Storage\SMB'] = 'files_external/lib/smb.php';
OC::$CLASSPATH['OC\Files\Storage\AmazonS3'] = 'files_external/lib/amazons3.php';
OC::$CLASSPATH['OC\Files\Storage\Dropbox'] = 'files_external/lib/dropbox.php';
OC::$CLASSPATH['OC\Files\Storage\SFTP'] = 'files_external/lib/sftp.php';
+OC::$CLASSPATH['OC\Files\Storage\iRODS'] = 'files_external/lib/irods.php';
OC::$CLASSPATH['OC_Mount_Config'] = 'files_external/lib/config.php';
OCP\App::registerAdmin('files_external', 'settings');
diff --git a/apps/files_external/lib/config.php b/apps/files_external/lib/config.php
index 01462cb6f85..26cb4f711dc 100755
--- a/apps/files_external/lib/config.php
+++ b/apps/files_external/lib/config.php
@@ -113,6 +113,15 @@ class OC_Mount_Config {
'password' => '*Password',
'root' => '&Root'));
+ $backends['\OC\Files\Storage\iRODS']=array(
+ 'backend' => 'iRODS',
+ 'configuration' => array(
+ 'host' => 'Host',
+ 'port' => 'Port',
+ 'user' => 'Username',
+ 'password' => '*Password',
+ 'zone' => 'Zone'));
+
return($backends);
}
diff --git a/apps/files_external/lib/irods.php b/apps/files_external/lib/irods.php
new file mode 100644
index 00000000000..de4bba89667
--- /dev/null
+++ b/apps/files_external/lib/irods.php
@@ -0,0 +1,104 @@
+<?php
+/**
+ * Copyright (c) 2013 Thomas Müller <thomas.mueller@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;
+
+set_include_path(get_include_path() . PATH_SEPARATOR .
+ \OC_App::getAppPath('files_external') . '/3rdparty/irodsphp/prods/src');
+
+require_once 'ProdsStreamer.class.php';
+
+class iRODS extends \OC\Files\Storage\StreamWrapper{
+ private $password;
+ private $user;
+ private $host;
+ private $port;
+ private $zone;
+ private $root;
+
+ public function __construct($params) {
+ if (isset($params['host']) && isset($params['user']) && isset($params['password'])) {
+ $this->host=$params['host'];
+ $this->port=$params['port'];
+ $this->user=$params['user'];
+ $this->password=$params['password'];
+ $this->zone=$params['zone'];
+
+ $this->root=isset($params['root'])?$params['root']:'/';
+ if ( ! $this->root || $this->root[0]!='/') {
+ $this->root='/'.$this->root;
+ }
+ //create the root folder if necessary
+ if ( ! $this->is_dir('')) {
+ $this->mkdir('');
+ }
+ } else {
+ throw new \Exception();
+ }
+
+ }
+
+ public function getId(){
+ return 'irods::' . $this->user . '@' . $this->host . '/' . $this->root;
+ }
+
+ /**
+ * construct the ftp url
+ * @param string $path
+ * @return string
+ */
+ public function constructUrl($path) {
+ $userWithZone = $this->user.'.'.$this->zone;
+ return 'rods://'.$userWithZone.':'.$this->password.'@'.$this->host.':'.$this->port.$this->root.$path;
+ }
+
+// public function fopen($path,$mode) {
+// $this->init();
+// switch($mode) {
+// case 'r':
+// case 'rb':
+// case 'w':
+// case 'wb':
+// case 'a':
+// case 'ab':
+// //these are supported by the wrapper
+// $context = stream_context_create(array('ftp' => array('overwrite' => true)));
+// return fopen($this->constructUrl($path), $mode, false, $context);
+// case 'r+':
+// case 'w+':
+// case 'wb+':
+// case 'a+':
+// case 'x':
+// case 'x+':
+// case 'c':
+// case 'c+':
+// //emulate these
+// if (strrpos($path, '.')!==false) {
+// $ext=substr($path, strrpos($path, '.'));
+// } else {
+// $ext='';
+// }
+// $tmpFile=\OCP\Files::tmpFile($ext);
+// \OC\Files\Stream\Close::registerCallback($tmpFile, array($this, 'writeBack'));
+// if ($this->file_exists($path)) {
+// $this->getFile($path, $tmpFile);
+// }
+// self::$tempFiles[$tmpFile]=$path;
+// return fopen('close://'.$tmpFile, $mode);
+// }
+// return false;
+// }
+//
+// public function writeBack($tmpFile) {
+// $this->init();
+// if (isset(self::$tempFiles[$tmpFile])) {
+// $this->uploadFile($tmpFile, self::$tempFiles[$tmpFile]);
+// unlink($tmpFile);
+// }
+// }
+}
diff --git a/apps/files_external/lib/streamwrapper.php b/apps/files_external/lib/streamwrapper.php
index 4685877f26b..df088e4ad71 100644
--- a/apps/files_external/lib/streamwrapper.php
+++ b/apps/files_external/lib/streamwrapper.php
@@ -82,6 +82,8 @@ abstract class StreamWrapper extends \OC\Files\Storage\Common{
$fh = $this->fopen($path, 'a');
fwrite($fh, '');
fclose($fh);
+
+ return true;
} else {
return false;//not supported
}