From e1f5f00ec399d925f5db8e31f00580500d835146 Mon Sep 17 00:00:00 2001 From: Thomas Mueller Date: Thu, 18 Apr 2013 22:12:53 +0200 Subject: [PATCH] in order to use the ownCloud login credentials we use a login hook to grab uid and password and store it in the session. The stored credentials will be used for and interactions with the iRODS server. Within the config UI a check box can be used to enable the credential reuse. --- apps/files_external/appinfo/app.php | 4 ++ apps/files_external/lib/irods.php | 58 +++++++---------------------- 2 files changed, 17 insertions(+), 45 deletions(-) diff --git a/apps/files_external/appinfo/app.php b/apps/files_external/appinfo/app.php index af9117ac1ef..dd0b76ed9d7 100644 --- a/apps/files_external/appinfo/app.php +++ b/apps/files_external/appinfo/app.php @@ -22,3 +22,7 @@ OCP\App::registerAdmin('files_external', 'settings'); if (OCP\Config::getAppValue('files_external', 'allow_user_mounting', 'yes') == 'yes') { OCP\App::registerPersonal('files_external', 'personal'); } + +// connecting hooks +OCP\Util::connectHook( 'OC_User', 'post_login', 'OC\Files\Storage\iRODS', 'login' ); + diff --git a/apps/files_external/lib/irods.php b/apps/files_external/lib/irods.php index de4bba89667..888cf569cb9 100644 --- a/apps/files_external/lib/irods.php +++ b/apps/files_external/lib/irods.php @@ -20,6 +20,7 @@ class iRODS extends \OC\Files\Storage\StreamWrapper{ private $port; private $zone; private $root; + private $use_logon_credentials; public function __construct($params) { if (isset($params['host']) && isset($params['user']) && isset($params['password'])) { @@ -27,12 +28,20 @@ class iRODS extends \OC\Files\Storage\StreamWrapper{ $this->port=$params['port']; $this->user=$params['user']; $this->password=$params['password']; + $this->use_logon_credentials=$params['use_logon_credentials']; $this->zone=$params['zone']; $this->root=isset($params['root'])?$params['root']:'/'; if ( ! $this->root || $this->root[0]!='/') { $this->root='/'.$this->root; } + + if ($this->use_logon_credentials && isset($_SESSION['irods-credentials']) ) + { + $this->user = $_SESSION['irods-credentials']['uid']; + $this->password = $_SESSION['irods-credentials']['password']; + } + //create the root folder if necessary if ( ! $this->is_dir('')) { $this->mkdir(''); @@ -43,6 +52,10 @@ class iRODS extends \OC\Files\Storage\StreamWrapper{ } + public static function login( $params ) { + $_SESSION['irods-credentials'] = $params; + } + public function getId(){ return 'irods::' . $this->user . '@' . $this->host . '/' . $this->root; } @@ -56,49 +69,4 @@ class iRODS extends \OC\Files\Storage\StreamWrapper{ $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); -// } -// } }