commit
9b1c881ca8
@ -1,204 +0,0 @@ |
||||
<?php |
||||
/** |
||||
* 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=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=curl_exec($ch); |
||||
$result=trim($result); |
||||
$info=curl_getinfo($ch); |
||||
$httpCode=$info['http_code']; |
||||
curl_close($ch); |
||||
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; |
||||
} |
||||
|
||||
/** |
||||
* create a new file or directory |
||||
* @param string $dir |
||||
* @param string $name |
||||
* @param string $type |
||||
*/ |
||||
public function newFile($dir,$name,$type){ |
||||
if(!$this->connected){ |
||||
return false; |
||||
} |
||||
return $this->apiCall('new',array('dir'=>$dir,'name'=>$name,'type'=>$type),true); |
||||
} |
||||
|
||||
/** |
||||
* deletes a file or directory |
||||
* @param string $dir |
||||
* @param string $file |
||||
*/ |
||||
public function delete($dir,$name){ |
||||
if(!$this->connected){ |
||||
return false; |
||||
} |
||||
return $this->apiCall('delete',array('dir'=>$dir,'file'=>$name),true); |
||||
} |
||||
|
||||
/** |
||||
* moves a file or directory |
||||
* @param string $sorceDir |
||||
* @param string $sorceFile |
||||
* @param string $targetDir |
||||
* @param string $targetFile |
||||
*/ |
||||
public function move($sourceDir,$sourceFile,$targetDir,$targetFile){ |
||||
if(!$this->connected){ |
||||
return false; |
||||
} |
||||
return $this->apiCall('move',array('sourcedir'=>$sourceDir,'source'=>$sourceFile,'targetdir'=>$targetDir,'target'=>$targetFile),true); |
||||
} |
||||
|
||||
/** |
||||
* copies a file or directory |
||||
* @param string $sorceDir |
||||
* @param string $sorceFile |
||||
* @param string $targetDir |
||||
* @param string $targetFile |
||||
*/ |
||||
public function copy($sourceDir,$sourceFile,$targetDir,$targetFile){ |
||||
if(!$this->connected){ |
||||
return false; |
||||
} |
||||
return $this->apiCall('copy',array('sourcedir'=>$sourceDir,'source'=>$sourceFile,'targetdir'=>$targetDir,'target'=>$targetFile),true); |
||||
} |
||||
|
||||
/** |
||||
* get a file tree |
||||
* @param string $dir |
||||
*/ |
||||
public function getTree($dir){ |
||||
if(!$this->connected){ |
||||
return false; |
||||
} |
||||
return $this->apiCall('gettree',array('dir'=>$dir),true); |
||||
} |
||||
|
||||
/** |
||||
* 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); |
||||
} |
||||
|
||||
/** |
||||
* get a remove file and save it in a temporary file and return the path of the temporary file |
||||
* @param string $dir |
||||
* @param string $file |
||||
* @return string |
||||
*/ |
||||
public function getFile($dir, $file){ |
||||
if(!$this->connected){ |
||||
return false; |
||||
} |
||||
$ch=curl_init(); |
||||
if(!$this->cookiefile){ |
||||
$this->cookiefile=get_temp_dir().'/remoteCloudCookie'.uniqid(); |
||||
} |
||||
$tmpfile=tempnam(get_temp_dir(),'remoteCloudFile'); |
||||
$fp=fopen($tmpfile,'w+'); |
||||
$url=$this->path.="/files/api.php?action=get&dir=$dir&file=$file"; |
||||
curl_setopt($ch,CURLOPT_URL,$url); |
||||
curl_setopt($ch, CURLOPT_COOKIEFILE,$this->cookiefile); |
||||
curl_setopt($ch, CURLOPT_COOKIEJAR,$this->cookiefile); |
||||
curl_setopt($ch, CURLOPT_FILE, $fp); |
||||
curl_exec($ch); |
||||
fclose($fp); |
||||
curl_close($ch); |
||||
return $tmpfile; |
||||
} |
||||
|
||||
public function sendFile($sourceDir,$sourceFile,$targetDir,$targetFile){ |
||||
$source=$sourceDir.'/'.$sourceFile; |
||||
$tmp=OC_Filesystem::toTmpFile($source); |
||||
return $this->sendTmpFile($tmp,$targetDir,$targetFile); |
||||
} |
||||
|
||||
public function sendTmpFile($tmp,$targetDir,$targetFile){ |
||||
$token=sha1(uniqid().$tmp); |
||||
$file=get_temp_dir().'/'.'remoteCloudFile'.$token; |
||||
rename($tmp,$file); |
||||
if( OC_Config::getValue( "forcessl", false ) or isset($_SERVER['HTTPS']) and $_SERVER['HTTPS'] == 'on') { |
||||
$url = "https://". $_SERVER['SERVER_NAME'] . OC::$WEBROOT; |
||||
}else{ |
||||
$url = "http://". $_SERVER['SERVER_NAME'] . OC::$WEBROOT; |
||||
} |
||||
return $this->apiCall('pull',array('dir'=>$targetDir,'file'=>$targetFile,'token'=>$token,'source'=>$url),true); |
||||
} |
||||
} |
||||
|
@ -0,0 +1,114 @@ |
||||
<?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 Affero General Public |
||||
* License along with this library. If not, see <http://www.gnu.org/licenses/>. |
||||
* |
||||
*/ |
||||
|
||||
/** |
||||
* dummy user backend, does not keep state, only for testing use |
||||
*/ |
||||
class OC_User_Dummy extends OC_User_Backend { |
||||
private $users=array(); |
||||
/** |
||||
* @brief Create a new user |
||||
* @param $uid The username of the user to create |
||||
* @param $password The password of the new user |
||||
* @returns true/false |
||||
* |
||||
* Creates a new user. Basic checking of username is done in OC_User |
||||
* itself, not in its subclasses. |
||||
*/ |
||||
public function createUser($uid, $password){ |
||||
if(isset($this->users[$uid])){ |
||||
return false; |
||||
}else{ |
||||
$this->users[$uid]=$password; |
||||
return true; |
||||
} |
||||
} |
||||
|
||||
/** |
||||
* @brief delete a user |
||||
* @param $uid The username of the user to delete |
||||
* @returns true/false |
||||
* |
||||
* Deletes a user |
||||
*/ |
||||
public function deleteUser( $uid ){ |
||||
if(isset($this->users[$uid])){ |
||||
unset($this->users[$uid]); |
||||
return true; |
||||
}else{ |
||||
return false; |
||||
} |
||||
} |
||||
|
||||
/** |
||||
* @brief Set password |
||||
* @param $uid The username |
||||
* @param $password The new password |
||||
* @returns true/false |
||||
* |
||||
* Change the password of a user |
||||
*/ |
||||
public function setPassword($uid, $password){ |
||||
if(isset($this->users[$uid])){ |
||||
$this->users[$uid]=$password; |
||||
return true; |
||||
}else{ |
||||
return false; |
||||
} |
||||
} |
||||
|
||||
/** |
||||
* @brief Check if the password is correct |
||||
* @param $uid The username |
||||
* @param $password The password |
||||
* @returns true/false |
||||
* |
||||
* Check if the password is correct without logging in the user |
||||
*/ |
||||
public function checkPassword($uid, $password){ |
||||
if(isset($this->users[$uid])){ |
||||
return ($this->users[$uid]==$password); |
||||
}else{ |
||||
return false; |
||||
} |
||||
} |
||||
|
||||
/** |
||||
* @brief Get a list of all users |
||||
* @returns array with all uids |
||||
* |
||||
* Get a list of all users. |
||||
*/ |
||||
public function getUsers(){ |
||||
return array_keys($this->users); |
||||
} |
||||
|
||||
/** |
||||
* @brief check if a user exists |
||||
* @param string $uid the username |
||||
* @return boolean |
||||
*/ |
||||
public function userExists($uid){ |
||||
return isset($this->users[$uid]); |
||||
} |
||||
} |
@ -0,0 +1,89 @@ |
||||
<?php |
||||
/** |
||||
* ownCloud |
||||
* |
||||
* @author Robin Appelman |
||||
* @copyright 2012 Robin Appelman icewind@owncloud.com |
||||
* |
||||
* 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 Affero General Public |
||||
* License along with this library. If not, see <http://www.gnu.org/licenses/>. |
||||
* |
||||
*/ |
||||
|
||||
abstract class Test_User_Backend extends UnitTestCase { |
||||
/** |
||||
* @var OC_User_Backend $backend |
||||
*/ |
||||
protected $backend; |
||||
|
||||
/** |
||||
* get a new unique user name |
||||
* test cases can override this in order to clean up created user |
||||
* @return array |
||||
*/ |
||||
public function getUser(){ |
||||
return uniqid('test_'); |
||||
} |
||||
|
||||
public function testAddRemove(){ |
||||
//get the number of groups we start with, in case there are exising groups |
||||
$startCount=count($this->backend->getUsers()); |
||||
|
||||
$name1=$this->getUser(); |
||||
$name2=$this->getUser(); |
||||
$this->backend->createUser($name1,''); |
||||
$count=count($this->backend->getUsers())-$startCount; |
||||
$this->assertEqual(1,$count); |
||||
$this->assertTrue((array_search($name1,$this->backend->getUsers())!==false)); |
||||
$this->assertFalse((array_search($name2,$this->backend->getUsers())!==false)); |
||||
$this->backend->createUser($name2,''); |
||||
$count=count($this->backend->getUsers())-$startCount; |
||||
$this->assertEqual(2,$count); |
||||
$this->assertTrue((array_search($name1,$this->backend->getUsers())!==false)); |
||||
$this->assertTrue((array_search($name2,$this->backend->getUsers())!==false)); |
||||
|
||||
$this->backend->deleteUser($name2); |
||||
$count=count($this->backend->getUsers())-$startCount; |
||||
$this->assertEqual(1,$count); |
||||
$this->assertTrue((array_search($name1,$this->backend->getUsers())!==false)); |
||||
$this->assertFalse((array_search($name2,$this->backend->getUsers())!==false)); |
||||
} |
||||
|
||||
public function testLogin(){ |
||||
$name1=$this->getUser(); |
||||
$name2=$this->getUser(); |
||||
|
||||
$this->assertFalse($this->backend->userExists($name1)); |
||||
$this->assertFalse($this->backend->userExists($name2)); |
||||
|
||||
$this->backend->createUser($name1,'pass1'); |
||||
$this->backend->createUser($name2,'pass2'); |
||||
|
||||
$this->assertTrue($this->backend->userExists($name1)); |
||||
$this->assertTrue($this->backend->userExists($name2)); |
||||
|
||||
$this->assertTrue($this->backend->checkPassword($name1,'pass1')); |
||||
$this->assertTrue($this->backend->checkPassword($name2,'pass2')); |
||||
|
||||
$this->assertFalse($this->backend->checkPassword($name1,'pass2')); |
||||
$this->assertFalse($this->backend->checkPassword($name2,'pass1')); |
||||
|
||||
$this->assertFalse($this->backend->checkPassword($name1,'dummy')); |
||||
$this->assertFalse($this->backend->checkPassword($name2,'foobar')); |
||||
|
||||
$this->backend->setPassword($name1,'newpass1'); |
||||
$this->assertFalse($this->backend->checkPassword($name1,'pass1')); |
||||
$this->assertTrue($this->backend->checkPassword($name1,'newpass1')); |
||||
$this->assertFalse($this->backend->checkPassword($name2,'newpass1')); |
||||
} |
||||
} |
@ -0,0 +1,45 @@ |
||||
<?php |
||||
/** |
||||
* ownCloud |
||||
* |
||||
* @author Robin Appelman |
||||
* @copyright 2012 Robin Appelman icewind@owncloud.com |
||||
* |
||||
* 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 Affero General Public |
||||
* License along with this library. If not, see <http://www.gnu.org/licenses/>. |
||||
* |
||||
*/ |
||||
|
||||
class Test_User_Database extends Test_User_Backend { |
||||
private $user=array(); |
||||
/** |
||||
* get a new unique user name |
||||
* test cases can override this in order to clean up created user |
||||
* @return array |
||||
*/ |
||||
public function getUser(){ |
||||
$user=uniqid('test_'); |
||||
$this->users[]=$user; |
||||
return $user; |
||||
} |
||||
|
||||
public function setUp(){ |
||||
$this->backend=new OC_User_Dummy(); |
||||
} |
||||
|
||||
public function tearDown(){ |
||||
foreach($this->users as $user){ |
||||
$this->backend->deleteUser($user); |
||||
} |
||||
} |
||||
} |
@ -0,0 +1,27 @@ |
||||
<?php |
||||
/** |
||||
* ownCloud |
||||
* |
||||
* @author Robin Appelman |
||||
* @copyright 2012 Robin Appelman icewind@owncloud.com |
||||
* |
||||
* 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 Affero General Public |
||||
* License along with this library. If not, see <http://www.gnu.org/licenses/>. |
||||
* |
||||
*/ |
||||
|
||||
class Test_User_Dummy extends Test_User_Backend { |
||||
public function setUp(){ |
||||
$this->backend=new OC_User_Dummy(); |
||||
} |
||||
} |
Loading…
Reference in new issue