diff options
author | Robin <robin@Amaya.(none)> | 2010-05-10 16:55:30 +0200 |
---|---|---|
committer | Robin <robin@Amaya.(none)> | 2010-05-10 16:55:30 +0200 |
commit | 672297531bbd0b161ba393f8eba0ada84310f2ce (patch) | |
tree | 8ecf915a2e09c80bed5691da4909112bb14fde7d | |
parent | 898d2489bba0a5e7dd349bed19f9c10a7eb05065 (diff) | |
parent | e0347b7fa6d92d606f88aee5c60ad89f3c45ef84 (diff) | |
download | nextcloud-server-672297531bbd0b161ba393f8eba0ada84310f2ce.tar.gz nextcloud-server-672297531bbd0b161ba393f8eba0ada84310f2ce.zip |
merge
-rwxr-xr-x | files/api.php | 52 | ||||
-rwxr-xr-x | inc/lib_base.php | 2 | ||||
-rw-r--r-- | inc/lib_connect.php | 163 | ||||
-rwxr-xr-x | inc/lib_files.php | 3 |
4 files changed, 201 insertions, 19 deletions
diff --git a/files/api.php b/files/api.php index b27228d9676..12bc49dd7f0 100755 --- a/files/api.php +++ b/files/api.php @@ -30,23 +30,43 @@ if(!isset($_POST['action']) and isset($_GET['action'])){ foreach($arguments as &$argument){ $argument=stripslashes($argument); } +global $CONFIG_DATADIRECTORY; ob_clean(); -switch($arguments['action']){ - case 'delete': - OC_FILES::delete($arguments['dir'],$arguments['file']); - break; - case 'rename': - OC_FILES::move($arguments['dir'],$arguments['file'],$arguments['dir'],$arguments['newname']); - break; - case 'new': - OC_FILES::newfile($arguments['dir'],$arguments['name'],$arguments['type']); - break; - case 'move': - OC_FILES::move($arguments['sourcedir'],$arguments['source'],$arguments['targetdir'],$arguments['target']); - break; - case 'get': - OC_FILES::get($arguments['dir'],$arguments['file']); - break; +if($arguments['action']){ + switch($arguments['action']){ + case 'delete': + OC_FILES::delete($arguments['dir'],$arguments['file']); + break; + case 'rename': + OC_FILES::move($arguments['dir'],$arguments['file'],$arguments['dir'],$arguments['newname']); + break; + case 'new': + OC_FILES::newfile($arguments['dir'],$arguments['name'],$arguments['type']); + break; + case 'move': + OC_FILES::move($arguments['sourcedir'],$arguments['source'],$arguments['targetdir'],$arguments['target']); + break; + case 'get': + OC_FILES::get($arguments['dir'],$arguments['file']); + break; + case 'getfiles': + echo json_encode(OC_FILES::getdirectorycontent($CONFIG_DATADIRECTORY.'/'.$arguments['dir'])); + break; + case 'login': + if(OC_USER::login($arguments['username'],$arguments['password'])){ + echo 'true'; + }else{ + echo 'false'; + } + break; + case 'checklogin': + if(OC_USER::isLoggedIn()){ + echo 'true'; + }else{ + echo 'false'; + } + break; + } } ?>
\ No newline at end of file diff --git a/inc/lib_base.php b/inc/lib_base.php index 0685a640c08..b5829c6d999 100755 --- a/inc/lib_base.php +++ b/inc/lib_base.php @@ -78,7 +78,7 @@ oc_require_once('lib_config.php'); oc_require_once('lib_user.php'); oc_require_once('lib_ocs.php'); @oc_require_once('MDB2.php'); -// @oc_require_once('MDB2/Driver/Manager/common.php'); +oc_require_once('lib_connect.php'); if(!is_dir($CONFIG_DATADIRECTORY_ROOT)){ diff --git a/inc/lib_connect.php b/inc/lib_connect.php new file mode 100644 index 00000000000..ddf03eb6e74 --- /dev/null +++ b/inc/lib_connect.php @@ -0,0 +1,163 @@ +<?php + +/** +* ownCloud +* +* @author Frank Karlitschek +* @copyright 2010 Frank Karlitschek karlitschek@kde.org +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE +* License as published by the Free Software Foundation; either +* version 3 of the License, or any later version. +* +* This library is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU AFFERO GENERAL PUBLIC LICENSE for more details. +* +* You should have received a copy of the GNU Lesser General Public +* License along with this library. If not, see <http://www.gnu.org/licenses/>. +* +*/ + +/** + * Class for connecting multiply ownCloud installations + * + */ +class OC_CONNECT{ + static private $clouds=array(); + + static function connect($path,$user,$password){ + $cloud=new OC_REMOTE_CLOUD($path,$user,$password); + if($cloud->connected){ + self::$clouds[$path]=$cloud; + return $cloud; + }else{ + return false; + } + } +} + + +/** + * Class for connection to a remote owncloud installation + * + */ +class OC_REMOTE_CLOUD{ + private $path; + private $connected=false; + private $cookiefile=false; + + /** + * make an api call to the remote cloud + * @param string $action + * @param array parameters + * @param bool assoc when set to true, the result will be parsed as associative array + * + */ + private function apiCall($action,$parameters=false,$assoc=false){ + if(!$this->cookiefile){ + $this->cookiefile=sys_get_temp_dir().'/remoteCloudCookie'.uniqid(); + } + $url=$this->path.='/files/api.php'; + $fields_string="action=$action&"; + if(is_array($parameters)){ + foreach($parameters as $key=>$value){ + $fields_string.=$key.'='.$value.'&'; + } + rtrim($fields_string,'&'); + } + $ch=curl_init(); + curl_setopt($ch,CURLOPT_URL,$url); + curl_setopt($ch,CURLOPT_POST,count($parameters)); + curl_setopt($ch,CURLOPT_POSTFIELDS,$fields_string); + curl_setopt($ch, CURLOPT_COOKIEFILE,$this->cookiefile); + curl_setopt($ch, CURLOPT_COOKIEJAR,$this->cookiefile); + curl_setopt($ch,CURLOPT_RETURNTRANSFER,true); + $result=trim(curl_exec($ch)); + $info=curl_getinfo($ch); + $httpCode=$info['http_code']; + if($httpCode==200 or $httpCode==0){ + return json_decode($result,$assoc); + }else{ + return false; + } + } + + public function __construct($path,$user,$password){ + $this->path=$path; + $this->connected=$this->apiCall('login',array('username'=>$user,'password'=>$password)); + } + + /** + * check if we are stull logged in on the remote cloud + * + */ + public function isLoggedIn(){ + if(!$this->connected){ + return false; + } + return $this->apiCall('checklogin'); + } + + public function __get($name){ + switch($name){ + case 'connected': + return $this->connected; + } + } + + /** + * disconnect from the remote cloud + * + */ + public function disconnect(){ + $this->connected=false; + if(is_file($this->cookiefile)){ + unlink($this->cookiefile); + } + $this->cookiefile=false; + } + + /** + * get the files inside a directory of the remote cloud + * @param string $dir + */ + public function getFiles($dir){ + if(!$this->connected){ + return false; + } + return $this->apiCall('getfiles',array('dir'=>$dir),true); + } +} + +function OC_CONNECT_TEST($path,$user,$password){ + echo 'connecting...'; + $remote=OC_CONNECT::connect($path,$user,$password); + if($remote->connected){ + echo 'done<br/>'; + if($remote->isLoggedIn()){ + echo 'logged in, session working<br/>'; + echo 'trying to get remote files...'; + $files=$remote->getFiles(''); + if($files){ + echo count($files).' files found:<br/>'; + foreach($files as $file){ + echo "{$file['type']} {$file['name']}: {$file['size']} bytes<br/>"; + } + }else{ + echo 'fail<br/>'; + } + }else{ + echo 'no longer logged in, session fail<br/>'; + } + }else{ + echo 'fail<br/>'; + } + $remote->disconnect(); + die(); +} + + +?> diff --git a/inc/lib_files.php b/inc/lib_files.php index f00f235d749..e8aa71f74b7 100755 --- a/inc/lib_files.php +++ b/inc/lib_files.php @@ -204,10 +204,9 @@ class OC_FILES { * @param string path * @return string guessed mime type */ - function getMimeType($path){ + static function getMimeType($path){ return OC_FILESYSTEM::getMimeType($path); } - } function zipAddDir($dir,$zip,$internalDir=''){ |