summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRobin <robin@Amaya.(none)>2010-05-10 16:55:30 +0200
committerRobin <robin@Amaya.(none)>2010-05-10 16:55:30 +0200
commit672297531bbd0b161ba393f8eba0ada84310f2ce (patch)
tree8ecf915a2e09c80bed5691da4909112bb14fde7d
parent898d2489bba0a5e7dd349bed19f9c10a7eb05065 (diff)
parente0347b7fa6d92d606f88aee5c60ad89f3c45ef84 (diff)
downloadnextcloud-server-672297531bbd0b161ba393f8eba0ada84310f2ce.tar.gz
nextcloud-server-672297531bbd0b161ba393f8eba0ada84310f2ce.zip
merge
-rwxr-xr-xfiles/api.php52
-rwxr-xr-xinc/lib_base.php2
-rw-r--r--inc/lib_connect.php163
-rwxr-xr-xinc/lib_files.php3
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=''){