diff options
author | Thomas Mueller <thomas.mueller@tmit.eu> | 2013-04-12 15:51:58 +0200 |
---|---|---|
committer | Thomas Mueller <thomas.mueller@tmit.eu> | 2013-04-12 15:51:58 +0200 |
commit | 7dd33911171bf4cc732889a4e6ff27851cb59274 (patch) | |
tree | 76b39a70b5d020eb6f41c980c346c3d846bf59a2 /apps | |
parent | 33ee2e2f10a425eb81338081325e5f96fc48c1f9 (diff) | |
download | nextcloud-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.php | 1 | ||||
-rwxr-xr-x | apps/files_external/lib/config.php | 9 | ||||
-rw-r--r-- | apps/files_external/lib/irods.php | 104 | ||||
-rw-r--r-- | apps/files_external/lib/streamwrapper.php | 2 |
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 } |