diff --git a/apps/files_external/appinfo/app.php b/apps/files_external/appinfo/app.php index d786c6c7a2..af9117ac1e 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 01462cb6f8..26cb4f711d 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 0000000000..de4bba8966 --- /dev/null +++ b/apps/files_external/lib/irods.php @@ -0,0 +1,104 @@ + + * 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 4685877f26..df088e4ad7 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 }