initial integration with iRODS www.irods.org
The used PHP API is hosted at https://code.renci.org/gf/project/irodsphp/
This commit is contained in:
parent
33ee2e2f10
commit
7dd3391117
|
@ -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');
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
// }
|
||||
// }
|
||||
}
|
|
@ -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
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue