Merge branch 'master' of gitorious.org:owncloud/owncloud

This commit is contained in:
Tom Needham 2012-04-14 11:18:25 +00:00
commit 9b1c881ca8
24 changed files with 389 additions and 258 deletions

View File

@ -20,8 +20,8 @@
* *
*/ */
class OC_Search_Provider_Bookmarks implements OC_Search_Provider{ class OC_Search_Provider_Bookmarks extends OC_Search_Provider{
static function search($query){ function search($query){
$results=array(); $results=array();
$offset = 0; $offset = 0;

View File

@ -1,6 +1,6 @@
<?php <?php
class OC_Search_Provider_Calendar implements OC_Search_Provider{ class OC_Search_Provider_Calendar extends OC_Search_Provider{
static function search($query){ function search($query){
$calendars = OC_Calendar_Calendar::allCalendars(OC_User::getUser(), 1); $calendars = OC_Calendar_Calendar::allCalendars(OC_User::getUser(), 1);
if(count($calendars)==0 || !OC_App::isEnabled('calendar')){ if(count($calendars)==0 || !OC_App::isEnabled('calendar')){
//return false; //return false;

View File

@ -1,6 +1,6 @@
<?php <?php
class OC_Search_Provider_Contacts implements OC_Search_Provider{ class OC_Search_Provider_Contacts extends OC_Search_Provider{
static function search($query){ function search($query){
$addressbooks = OC_Contacts_Addressbook::all(OC_User::getUser(), 1); $addressbooks = OC_Contacts_Addressbook::all(OC_User::getUser(), 1);
// if(count($calendars)==0 || !OC_App::isEnabled('contacts')){ // if(count($calendars)==0 || !OC_App::isEnabled('contacts')){
// //return false; // //return false;

View File

@ -62,6 +62,8 @@ if ($source !== false) {
$tmpl->assign("fileList", $list->fetchPage()); $tmpl->assign("fileList", $list->fetchPage());
$tmpl->assign("breadcrumb", $breadcrumbNav->fetchPage()); $tmpl->assign("breadcrumb", $breadcrumbNav->fetchPage());
$tmpl->assign("readonly", true); $tmpl->assign("readonly", true);
$tmpl->assign("allowZipDownload", false);
$tmpl->assign("dir", 'shared dir');
$tmpl->printPage(); $tmpl->printPage();
} else { } else {
//get time mimetype and set the headers //get time mimetype and set the headers

View File

@ -2,8 +2,11 @@ $(document).ready(function() {
var shared_status = {}; var shared_status = {};
if (typeof FileActions !== 'undefined') { if (typeof FileActions !== 'undefined') {
FileActions.register('all', 'Share', function(filename) { FileActions.register('all', 'Share', function(filename) {
if (scanFiles.scanning){return;}//workaround to prevent aditional http request block scanning feedback if (scanFiles.scanning){return;}//workaround to prevent additional http request block scanning feedback
var icon; var icon;
if (typeof filename == 'undefined') {
return false;
}
var file = $('#dir').val()+'/'+filename; var file = $('#dir').val()+'/'+filename;
if(shared_status[file]) if(shared_status[file])
return shared_status[file].icon; return shared_status[file].icon;
@ -145,7 +148,7 @@ $(document).ready(function() {
data: data, data: data,
success: function(token) { success: function(token) {
if (token) { if (token) {
showPublicLink(token); showPublicLink(token, source.substr(source.lastIndexOf('/')));
} }
} }
}); });
@ -203,7 +206,7 @@ function createDropdown(filename, files) {
if (users) { if (users) {
$.each(users, function(index, row) { $.each(users, function(index, row) {
if (row.uid_shared_with == 'public') { if (row.uid_shared_with == 'public') {
showPublicLink(row.token); showPublicLink(row.token, '/'+filename);
} else if (isNaN(index)) { } else if (isNaN(index)) {
addUser(row.uid_shared_with, row.permissions, index.substr(0, index.lastIndexOf('-'))); addUser(row.uid_shared_with, row.permissions, index.substr(0, index.lastIndexOf('-')));
} else { } else {
@ -234,9 +237,9 @@ function addUser(uid_shared_with, permissions, parentFolder) {
$(user).appendTo('#shared_list'); $(user).appendTo('#shared_list');
} }
function showPublicLink(token) { function showPublicLink(token, file) {
$('#makelink').attr('checked', true); $('#makelink').attr('checked', true);
$('#link').data('token', token); $('#link').data('token', token);
$('#link').val(parent.location.protocol+'//'+location.host+OC.linkTo('files_sharing','get.php')+'?token='+token); $('#link').val(parent.location.protocol+'//'+location.host+OC.linkTo('files_sharing','get.php')+'?token='+token+'&f='+file);
$('#link').show('blind'); $('#link').show('blind');
} }

View File

@ -41,8 +41,8 @@ OC_App::addNavigationEntry( array(
'icon' => OC_Helper::imagePath('core', 'places/picture.svg'), 'icon' => OC_Helper::imagePath('core', 'places/picture.svg'),
'name' => $l->t('Pictures'))); 'name' => $l->t('Pictures')));
class OC_GallerySearchProvider implements OC_Search_Provider{ class OC_GallerySearchProvider extends OC_Search_Provider{
static function search($query){ function search($query){
$stmt = OC_DB::prepare('SELECT * FROM *PREFIX*gallery_albums WHERE uid_owner = ? AND album_name LIKE ?'); $stmt = OC_DB::prepare('SELECT * FROM *PREFIX*gallery_albums WHERE uid_owner = ? AND album_name LIKE ?');
$result = $stmt->execute(array(OC_User::getUser(),'%'.$query.'%')); $result = $stmt->execute(array(OC_User::getUser(),'%'.$query.'%'));
$results=array(); $results=array();

View File

@ -82,8 +82,8 @@ class OC_MEDIA{
} }
} }
class OC_MediaSearchProvider implements OC_Search_Provider{ class OC_MediaSearchProvider extends OC_Search_Provider{
static function search($query){ function search($query){
require_once('lib_collection.php'); require_once('lib_collection.php');
$artists=OC_MEDIA_COLLECTION::getArtists($query); $artists=OC_MEDIA_COLLECTION::getArtists($query);
$albums=OC_MEDIA_COLLECTION::getAlbums(0,$query); $albums=OC_MEDIA_COLLECTION::getAlbums(0,$query);

View File

@ -94,10 +94,6 @@ class OC_USER_LDAP extends OC_User_Backend {
if( !$this->ldap_dc ) if( !$this->ldap_dc )
return false; return false;
$email = OC_Preferences::getValue($uid, 'settings', 'email', '');
if ( !empty( $email ) )
return false;
$email = $this->ldap_dc[$this->ldap_email_attr][0]; $email = $this->ldap_dc[$this->ldap_email_attr][0];
OC_Preferences::setValue($uid, 'settings', 'email', $email); OC_Preferences::setValue($uid, 'settings', 'email', $email);
} }

View File

@ -140,12 +140,17 @@ class OC_App{
OC_Installer::installShippedApp($app); OC_Installer::installShippedApp($app);
}else{ }else{
$download=OC_OCSClient::getApplicationDownload($app,1); $download=OC_OCSClient::getApplicationDownload($app,1);
if(isset($download['downloadlink']) and $download['downloadlink']<>'') { if(isset($download['downloadlink']) and $download['downloadlink']!='') {
$app=OC_Installer::installApp(array('source'=>'http','href'=>$download['downloadlink'])); $app=OC_Installer::installApp(array('source'=>'http','href'=>$download['downloadlink']));
} }
} }
} }
if($app!==false){
OC_Appconfig::setValue( $app, 'enabled', 'yes' ); OC_Appconfig::setValue( $app, 'enabled', 'yes' );
return true;
}else{
return false;
}
} }
/** /**

View File

@ -63,7 +63,7 @@ class OC_Files {
$executionTime = intval(ini_get('max_execution_time')); $executionTime = intval(ini_get('max_execution_time'));
set_time_limit(0); set_time_limit(0);
$zip = new ZipArchive(); $zip = new ZipArchive();
$filename = get_temp_dir().'/ownCloud_'.mt_rand(10000,99999).'.zip'; $filename = OC_Helper::tmpFile('.zip');
if ($zip->open($filename, ZIPARCHIVE::CREATE | ZIPARCHIVE::OVERWRITE)!==TRUE) { if ($zip->open($filename, ZIPARCHIVE::CREATE | ZIPARCHIVE::OVERWRITE)!==TRUE) {
exit("cannot open <$filename>\n"); exit("cannot open <$filename>\n");
} }
@ -84,7 +84,7 @@ class OC_Files {
$executionTime = intval(ini_get('max_execution_time')); $executionTime = intval(ini_get('max_execution_time'));
set_time_limit(0); set_time_limit(0);
$zip = new ZipArchive(); $zip = new ZipArchive();
$filename = get_temp_dir().'/ownCloud_'.mt_rand(10000,99999).'.zip'; $filename = OC_Helper::tmpFile('.zip');
if ($zip->open($filename, ZIPARCHIVE::CREATE | ZIPARCHIVE::OVERWRITE)!==TRUE) { if ($zip->open($filename, ZIPARCHIVE::CREATE | ZIPARCHIVE::OVERWRITE)!==TRUE) {
exit("cannot open <$filename>\n"); exit("cannot open <$filename>\n");
} }

View File

@ -283,8 +283,12 @@ class OC_FilesystemView {
if(OC_Filesystem::isValidPath($path)){ if(OC_Filesystem::isValidPath($path)){
$source=$this->fopen($path,'r'); $source=$this->fopen($path,'r');
if($source){ if($source){
$extention=substr($path,strrpos($path,'.')); $extension='';
$tmpFile=OC_Helper::tmpFile($extention); $extOffset=strpos($path,'.');
if($extOffset !== false) {
$extension=substr($path,strrpos($path,'.'));
}
$tmpFile=OC_Helper::tmpFile($extension);
file_put_contents($tmpFile,$source); file_put_contents($tmpFile,$source);
return $tmpFile; return $tmpFile;
} }

View File

@ -294,6 +294,9 @@ class OC_Helper {
}elseif(file_exists($dir)){ }elseif(file_exists($dir)){
unlink($dir); unlink($dir);
} }
if(file_exists($dir)) {
return false;
}
} }
/** /**
@ -472,10 +475,21 @@ class OC_Helper {
* remove all files created by self::tmpFile * remove all files created by self::tmpFile
*/ */
public static function cleanTmp(){ public static function cleanTmp(){
foreach(self::$tmpFiles as $file){ $leftoversFile='/tmp/oc-not-deleted';
if(file_exists($file)){ if(file_exists($leftoversFile)){
$leftovers=file($leftoversFile);
foreach($leftovers as $file) {
self::rmdirr($file); self::rmdirr($file);
} }
unlink($leftoversFile);
}
foreach(self::$tmpFiles as $file){
if(file_exists($file)){
if(!self::rmdirr($file)) {
file_put_contents($leftoversFile, $file."\n", FILE_APPEND);
}
}
} }
} }
} }

View File

@ -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);
}
}

View File

@ -26,13 +26,22 @@
*/ */
class OC_Search{ class OC_Search{
static private $providers=array(); static private $providers=array();
static private $registeredProviders=array();
/**
* remove all registered search providers
*/
public static function clearProviders(){
self::$providers=array();
self::$registeredProviders=array();
}
/** /**
* register a new search provider to be used * register a new search provider to be used
* @param string $provider class name of a OC_Search_Provider * @param string $provider class name of a OC_Search_Provider
*/ */
public static function registerProvider($provider){ public static function registerProvider($class,$options=array()){
self::$providers[]=$provider; self::$registeredProviders[]=array('class'=>$class,'options'=>$options);
} }
/** /**
@ -41,10 +50,25 @@ class OC_Search{
* @return array An array of OC_Search_Result's * @return array An array of OC_Search_Result's
*/ */
public static function search($query){ public static function search($query){
self::initProviders();
$results=array(); $results=array();
foreach(self::$providers as $provider){ foreach(self::$providers as $provider){
$results=array_merge($results, $provider::search($query)); $results=array_merge($results, $provider->search($query));
} }
return $results; return $results;
} }
/**
* create instances of all the registered search providers
*/
private static function initProviders(){
if(count(self::$providers)>0){
return;
}
foreach(self::$registeredProviders as $provider){
$class=$provider['class'];
$options=$provider['options'];
self::$providers[]=new $class($options);
}
}
} }

View File

@ -2,11 +2,13 @@
/** /**
* provides search functionalty * provides search functionalty
*/ */
interface OC_Search_Provider { class OC_Search_Provider {
public function __construct($options){}
/** /**
* search for $query * search for $query
* @param string $query * @param string $query
* @return array An array of OC_Search_Result's * @return array An array of OC_Search_Result's
*/ */
static function search($query); public function search($query){}
} }

View File

@ -1,7 +1,7 @@
<?php <?php
class OC_Search_Provider_File implements OC_Search_Provider{ class OC_Search_Provider_File extends OC_Search_Provider{
static function search($query){ function search($query){
$files=OC_FileCache::search($query,true); $files=OC_FileCache::search($query,true);
$results=array(); $results=array();
foreach($files as $fileData){ foreach($files as $fileData){

View File

@ -172,7 +172,7 @@ class OC_User_Database extends OC_User_Backend {
* @return boolean * @return boolean
*/ */
public function userExists($uid){ public function userExists($uid){
$query = OC_DB::prepare( "SELECT * FROM `*PREFIX*users` WHERE uid = ?" ); $query = OC_DB::prepare( "SELECT * FROM `*PREFIX*users` WHERE uid LIKE ?" );
$result = $query->execute( array( $uid )); $result = $query->execute( array( $uid ));
return $result->numRows() > 0; return $result->numRows() > 0;

114
lib/user/dummy.php Normal file
View File

@ -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]);
}
}

View File

@ -6,4 +6,4 @@ OC_JSON::setContentTypeHeader();
OC_App::disable($_POST['appid']); OC_App::disable($_POST['appid']);
?> OC_JSON::success();

View File

@ -5,6 +5,8 @@ require_once('../../lib/base.php');
OC_JSON::checkAdminUser(); OC_JSON::checkAdminUser();
OC_JSON::setContentTypeHeader(); OC_JSON::setContentTypeHeader();
OC_App::enable($_POST['appid']); if(OC_App::enable($_POST['appid'])){
OC_JSON::success();
?> }else{
OC_JSON::error();
}

View File

@ -28,10 +28,18 @@ $(document).ready(function(){
var active=$(this).data('active'); var active=$(this).data('active');
if(app){ if(app){
if(active){ if(active){
$.post(OC.filePath('settings','ajax','disableapp.php'),{appid:app}); $.post(OC.filePath('settings','ajax','disableapp.php'),{appid:app},function(result){
if(!result || result.status!='succes'){
OC.dialogs.alert('Error','Error while disabling app');
}
},'json');
$('#leftcontent li[data-id="'+app+'"]').removeClass('active'); $('#leftcontent li[data-id="'+app+'"]').removeClass('active');
}else{ }else{
$.post(OC.filePath('settings','ajax','enableapp.php'),{appid:app}); $.post(OC.filePath('settings','ajax','enableapp.php'),{appid:app},function(result){
if(!result || result.status!='succes'){
OC.dialogs.alert('Error','Error while enabling app');
}
},'json');
$('#leftcontent li[data-id="'+app+'"]').addClass('active'); $('#leftcontent li[data-id="'+app+'"]').addClass('active');
} }
active=!active; active=!active;

View File

@ -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'));
}
}

View File

@ -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);
}
}
}

27
tests/lib/user/dummy.php Normal file
View File

@ -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();
}
}