summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTom Needham <needham.thomas@gmail.com>2012-04-14 11:18:25 +0000
committerTom Needham <needham.thomas@gmail.com>2012-04-14 11:18:25 +0000
commit9b1c881ca893cfc8dc1b6adb28b15cdef770e2a7 (patch)
treeb0b10504f2f6f0a81547424c98b9c24add48a3f5
parent0aaaefbb4bd635a35be46a0a2c375555f6d50efa (diff)
parent386663ddb64453690ff12b739a1ad564dddeb1ed (diff)
downloadnextcloud-server-9b1c881ca893cfc8dc1b6adb28b15cdef770e2a7.tar.gz
nextcloud-server-9b1c881ca893cfc8dc1b6adb28b15cdef770e2a7.zip
Merge branch 'master' of gitorious.org:owncloud/owncloud
-rw-r--r--apps/bookmarks/lib/search.php4
-rw-r--r--apps/calendar/lib/search.php4
-rw-r--r--apps/contacts/lib/search.php4
-rw-r--r--apps/files_sharing/get.php2
-rw-r--r--apps/files_sharing/js/share.js13
-rw-r--r--apps/gallery/appinfo/app.php4
-rw-r--r--apps/media/lib_media.php4
-rw-r--r--apps/user_ldap/user_ldap.php4
-rwxr-xr-xlib/app.php11
-rw-r--r--lib/files.php4
-rw-r--r--lib/filesystemview.php8
-rwxr-xr-xlib/helper.php42
-rw-r--r--lib/remote/cloud.php204
-rw-r--r--lib/search.php30
-rw-r--r--lib/search/provider.php6
-rw-r--r--lib/search/provider/file.php4
-rw-r--r--lib/user/database.php2
-rw-r--r--lib/user/dummy.php114
-rw-r--r--settings/ajax/disableapp.php2
-rw-r--r--settings/ajax/enableapp.php8
-rw-r--r--settings/js/apps.js12
-rw-r--r--tests/lib/user/backend.php89
-rw-r--r--tests/lib/user/database.php45
-rw-r--r--tests/lib/user/dummy.php27
24 files changed, 389 insertions, 258 deletions
diff --git a/apps/bookmarks/lib/search.php b/apps/bookmarks/lib/search.php
index 235587855d9..d7e32558617 100644
--- a/apps/bookmarks/lib/search.php
+++ b/apps/bookmarks/lib/search.php
@@ -20,8 +20,8 @@
*
*/
-class OC_Search_Provider_Bookmarks implements OC_Search_Provider{
- static function search($query){
+class OC_Search_Provider_Bookmarks extends OC_Search_Provider{
+ function search($query){
$results=array();
$offset = 0;
diff --git a/apps/calendar/lib/search.php b/apps/calendar/lib/search.php
index 8405866392d..da5fa35bc21 100644
--- a/apps/calendar/lib/search.php
+++ b/apps/calendar/lib/search.php
@@ -1,6 +1,6 @@
<?php
-class OC_Search_Provider_Calendar implements OC_Search_Provider{
- static function search($query){
+class OC_Search_Provider_Calendar extends OC_Search_Provider{
+ function search($query){
$calendars = OC_Calendar_Calendar::allCalendars(OC_User::getUser(), 1);
if(count($calendars)==0 || !OC_App::isEnabled('calendar')){
//return false;
diff --git a/apps/contacts/lib/search.php b/apps/contacts/lib/search.php
index cf0a5fe6997..31d8542091e 100644
--- a/apps/contacts/lib/search.php
+++ b/apps/contacts/lib/search.php
@@ -1,6 +1,6 @@
<?php
-class OC_Search_Provider_Contacts implements OC_Search_Provider{
- static function search($query){
+class OC_Search_Provider_Contacts extends OC_Search_Provider{
+ function search($query){
$addressbooks = OC_Contacts_Addressbook::all(OC_User::getUser(), 1);
// if(count($calendars)==0 || !OC_App::isEnabled('contacts')){
// //return false;
diff --git a/apps/files_sharing/get.php b/apps/files_sharing/get.php
index 3a3db6dd38e..fa3535fd144 100644
--- a/apps/files_sharing/get.php
+++ b/apps/files_sharing/get.php
@@ -62,6 +62,8 @@ if ($source !== false) {
$tmpl->assign("fileList", $list->fetchPage());
$tmpl->assign("breadcrumb", $breadcrumbNav->fetchPage());
$tmpl->assign("readonly", true);
+ $tmpl->assign("allowZipDownload", false);
+ $tmpl->assign("dir", 'shared dir');
$tmpl->printPage();
} else {
//get time mimetype and set the headers
diff --git a/apps/files_sharing/js/share.js b/apps/files_sharing/js/share.js
index fc9e17c25c7..54d749d833e 100644
--- a/apps/files_sharing/js/share.js
+++ b/apps/files_sharing/js/share.js
@@ -2,8 +2,11 @@ $(document).ready(function() {
var shared_status = {};
if (typeof FileActions !== 'undefined') {
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;
+ if (typeof filename == 'undefined') {
+ return false;
+ }
var file = $('#dir').val()+'/'+filename;
if(shared_status[file])
return shared_status[file].icon;
@@ -145,7 +148,7 @@ $(document).ready(function() {
data: data,
success: function(token) {
if (token) {
- showPublicLink(token);
+ showPublicLink(token, source.substr(source.lastIndexOf('/')));
}
}
});
@@ -203,7 +206,7 @@ function createDropdown(filename, files) {
if (users) {
$.each(users, function(index, row) {
if (row.uid_shared_with == 'public') {
- showPublicLink(row.token);
+ showPublicLink(row.token, '/'+filename);
} else if (isNaN(index)) {
addUser(row.uid_shared_with, row.permissions, index.substr(0, index.lastIndexOf('-')));
} else {
@@ -234,9 +237,9 @@ function addUser(uid_shared_with, permissions, parentFolder) {
$(user).appendTo('#shared_list');
}
-function showPublicLink(token) {
+function showPublicLink(token, file) {
$('#makelink').attr('checked', true);
$('#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');
}
diff --git a/apps/gallery/appinfo/app.php b/apps/gallery/appinfo/app.php
index f7e0651275e..325c2acf249 100644
--- a/apps/gallery/appinfo/app.php
+++ b/apps/gallery/appinfo/app.php
@@ -41,8 +41,8 @@ OC_App::addNavigationEntry( array(
'icon' => OC_Helper::imagePath('core', 'places/picture.svg'),
'name' => $l->t('Pictures')));
- class OC_GallerySearchProvider implements OC_Search_Provider{
- static function search($query){
+class OC_GallerySearchProvider extends OC_Search_Provider{
+ function search($query){
$stmt = OC_DB::prepare('SELECT * FROM *PREFIX*gallery_albums WHERE uid_owner = ? AND album_name LIKE ?');
$result = $stmt->execute(array(OC_User::getUser(),'%'.$query.'%'));
$results=array();
diff --git a/apps/media/lib_media.php b/apps/media/lib_media.php
index 9de291e8da2..a4e5a5dfebc 100644
--- a/apps/media/lib_media.php
+++ b/apps/media/lib_media.php
@@ -82,8 +82,8 @@ class OC_MEDIA{
}
}
-class OC_MediaSearchProvider implements OC_Search_Provider{
- static function search($query){
+class OC_MediaSearchProvider extends OC_Search_Provider{
+ function search($query){
require_once('lib_collection.php');
$artists=OC_MEDIA_COLLECTION::getArtists($query);
$albums=OC_MEDIA_COLLECTION::getAlbums(0,$query);
diff --git a/apps/user_ldap/user_ldap.php b/apps/user_ldap/user_ldap.php
index 3521a9d90cf..1e8dc6aacce 100644
--- a/apps/user_ldap/user_ldap.php
+++ b/apps/user_ldap/user_ldap.php
@@ -94,10 +94,6 @@ class OC_USER_LDAP extends OC_User_Backend {
if( !$this->ldap_dc )
return false;
- $email = OC_Preferences::getValue($uid, 'settings', 'email', '');
- if ( !empty( $email ) )
- return false;
-
$email = $this->ldap_dc[$this->ldap_email_attr][0];
OC_Preferences::setValue($uid, 'settings', 'email', $email);
}
diff --git a/lib/app.php b/lib/app.php
index 1c81fbd4242..807d8955d8f 100755
--- a/lib/app.php
+++ b/lib/app.php
@@ -139,13 +139,18 @@ class OC_App{
if(!is_numeric($app)){
OC_Installer::installShippedApp($app);
}else{
- $download=OC_OCSClient::getApplicationDownload($app,1);
- if(isset($download['downloadlink']) and $download['downloadlink']<>'') {
+ $download=OC_OCSClient::getApplicationDownload($app,1);
+ if(isset($download['downloadlink']) and $download['downloadlink']!='') {
$app=OC_Installer::installApp(array('source'=>'http','href'=>$download['downloadlink']));
}
}
}
- OC_Appconfig::setValue( $app, 'enabled', 'yes' );
+ if($app!==false){
+ OC_Appconfig::setValue( $app, 'enabled', 'yes' );
+ return true;
+ }else{
+ return false;
+ }
}
/**
diff --git a/lib/files.php b/lib/files.php
index 051cfd4b81c..01558a68588 100644
--- a/lib/files.php
+++ b/lib/files.php
@@ -63,7 +63,7 @@ class OC_Files {
$executionTime = intval(ini_get('max_execution_time'));
set_time_limit(0);
$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) {
exit("cannot open <$filename>\n");
}
@@ -84,7 +84,7 @@ class OC_Files {
$executionTime = intval(ini_get('max_execution_time'));
set_time_limit(0);
$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) {
exit("cannot open <$filename>\n");
}
diff --git a/lib/filesystemview.php b/lib/filesystemview.php
index 9d530c7ad63..95873bd87cf 100644
--- a/lib/filesystemview.php
+++ b/lib/filesystemview.php
@@ -283,8 +283,12 @@ class OC_FilesystemView {
if(OC_Filesystem::isValidPath($path)){
$source=$this->fopen($path,'r');
if($source){
- $extention=substr($path,strrpos($path,'.'));
- $tmpFile=OC_Helper::tmpFile($extention);
+ $extension='';
+ $extOffset=strpos($path,'.');
+ if($extOffset !== false) {
+ $extension=substr($path,strrpos($path,'.'));
+ }
+ $tmpFile=OC_Helper::tmpFile($extension);
file_put_contents($tmpFile,$source);
return $tmpFile;
}
diff --git a/lib/helper.php b/lib/helper.php
index f5626bccaa7..2026286352a 100755
--- a/lib/helper.php
+++ b/lib/helper.php
@@ -27,7 +27,7 @@
class OC_Helper {
private static $mimetypes=array();
private static $tmpFiles=array();
-
+
/**
* @brief Creates an url
* @param $app app
@@ -123,7 +123,7 @@ class OC_Helper {
}elseif( file_exists( OC::$SERVERROOT."/core/img/$image" )){
return OC::$WEBROOT."/core/img/$image";
}else{
- echo('image not found: image:'.$image.' webroot:'.OC::$WEBROOT.' serverroot:'.OC::$SERVERROOT);
+ echo('image not found: image:'.$image.' webroot:'.OC::$WEBROOT.' serverroot:'.OC::$SERVERROOT);
die();
}
}
@@ -188,7 +188,7 @@ class OC_Helper {
$bytes = round( $bytes / 1024, 1 );
return "$bytes GB";
}
-
+
/**
* @brief Make a computer file size
* @param $str file size in a fancy format
@@ -224,9 +224,9 @@ class OC_Helper {
$bytes = round($bytes, 2);
- return $bytes;
+ return $bytes;
}
-
+
/**
* @brief Recusive editing of file permissions
* @param $path path to file or folder
@@ -276,7 +276,7 @@ class OC_Helper {
copy($src, $dest);
}
}
-
+
/**
* @brief Recusive deletion of folders
* @param string $dir path to the folder
@@ -294,6 +294,9 @@ class OC_Helper {
}elseif(file_exists($dir)){
unlink($dir);
}
+ if(file_exists($dir)) {
+ return false;
+ }
}
/**
@@ -349,7 +352,7 @@ class OC_Helper {
}
return $mimeType;
}
-
+
/**
* @brief Checks $_REQUEST contains a var for the $s key. If so, returns the html-escaped value of this var; otherwise returns the default value provided by $d.
* @param $s name of the var to escape, if set.
@@ -357,16 +360,16 @@ class OC_Helper {
* @returns the print-safe value.
*
*/
-
+
//FIXME: should also check for value validation (i.e. the email is an email).
public static function init_var($s, $d="") {
$r = $d;
if(isset($_REQUEST[$s]) && !empty($_REQUEST[$s]))
$r = stripslashes(htmlspecialchars($_REQUEST[$s]));
-
+
return $r;
}
-
+
/**
* returns "checked"-attribut if request contains selected radio element OR if radio element is the default one -- maybe?
* @param string $s Name of radio-button element name
@@ -422,7 +425,7 @@ class OC_Helper {
}
return false;
}
-
+
/**
* copy the contents of one stream to another
* @param resource source
@@ -439,7 +442,7 @@ class OC_Helper {
}
return $count;
}
-
+
/**
* create a temporary file with an unique filename
* @param string postfix
@@ -467,14 +470,25 @@ class OC_Helper {
self::$tmpFiles[]=$path;
return $path.'/';
}
-
+
/**
* remove all files created by self::tmpFile
*/
public static function cleanTmp(){
+ $leftoversFile='/tmp/oc-not-deleted';
+ if(file_exists($leftoversFile)){
+ $leftovers=file($leftoversFile);
+ foreach($leftovers as $file) {
+ self::rmdirr($file);
+ }
+ unlink($leftoversFile);
+ }
+
foreach(self::$tmpFiles as $file){
if(file_exists($file)){
- self::rmdirr($file);
+ if(!self::rmdirr($file)) {
+ file_put_contents($leftoversFile, $file."\n", FILE_APPEND);
+ }
}
}
}
diff --git a/lib/remote/cloud.php b/lib/remote/cloud.php
deleted file mode 100644
index a9c74e8bf5f..00000000000
--- a/lib/remote/cloud.php
+++ /dev/null
@@ -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);
- }
-}
-
diff --git a/lib/search.php b/lib/search.php
index 6b33fa38140..12055418687 100644
--- a/lib/search.php
+++ b/lib/search.php
@@ -26,13 +26,22 @@
*/
class OC_Search{
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
* @param string $provider class name of a OC_Search_Provider
*/
- public static function registerProvider($provider){
- self::$providers[]=$provider;
+ public static function registerProvider($class,$options=array()){
+ self::$registeredProviders[]=array('class'=>$class,'options'=>$options);
}
/**
@@ -41,10 +50,25 @@ class OC_Search{
* @return array An array of OC_Search_Result's
*/
public static function search($query){
+ self::initProviders();
$results=array();
foreach(self::$providers as $provider){
- $results=array_merge($results, $provider::search($query));
+ $results=array_merge($results, $provider->search($query));
}
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);
+ }
+ }
}
diff --git a/lib/search/provider.php b/lib/search/provider.php
index 9487ca51f2b..838ab696d04 100644
--- a/lib/search/provider.php
+++ b/lib/search/provider.php
@@ -2,11 +2,13 @@
/**
* provides search functionalty
*/
-interface OC_Search_Provider {
+class OC_Search_Provider {
+ public function __construct($options){}
+
/**
* search for $query
* @param string $query
* @return array An array of OC_Search_Result's
*/
- static function search($query);
+ public function search($query){}
}
diff --git a/lib/search/provider/file.php b/lib/search/provider/file.php
index 3bdb3bcd2af..a37af495599 100644
--- a/lib/search/provider/file.php
+++ b/lib/search/provider/file.php
@@ -1,7 +1,7 @@
<?php
-class OC_Search_Provider_File implements OC_Search_Provider{
- static function search($query){
+class OC_Search_Provider_File extends OC_Search_Provider{
+ function search($query){
$files=OC_FileCache::search($query,true);
$results=array();
foreach($files as $fileData){
diff --git a/lib/user/database.php b/lib/user/database.php
index 3eade276dd9..c1bac1bb0b5 100644
--- a/lib/user/database.php
+++ b/lib/user/database.php
@@ -172,7 +172,7 @@ class OC_User_Database extends OC_User_Backend {
* @return boolean
*/
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 ));
return $result->numRows() > 0;
diff --git a/lib/user/dummy.php b/lib/user/dummy.php
new file mode 100644
index 00000000000..cfc96c5c52d
--- /dev/null
+++ b/lib/user/dummy.php
@@ -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]);
+ }
+}
diff --git a/settings/ajax/disableapp.php b/settings/ajax/disableapp.php
index 06dd3c2ac6b..53e9be379e1 100644
--- a/settings/ajax/disableapp.php
+++ b/settings/ajax/disableapp.php
@@ -6,4 +6,4 @@ OC_JSON::setContentTypeHeader();
OC_App::disable($_POST['appid']);
-?>
+OC_JSON::success();
diff --git a/settings/ajax/enableapp.php b/settings/ajax/enableapp.php
index 639df2aecc0..cb116ebe4e8 100644
--- a/settings/ajax/enableapp.php
+++ b/settings/ajax/enableapp.php
@@ -5,6 +5,8 @@ require_once('../../lib/base.php');
OC_JSON::checkAdminUser();
OC_JSON::setContentTypeHeader();
-OC_App::enable($_POST['appid']);
-
-?>
+if(OC_App::enable($_POST['appid'])){
+ OC_JSON::success();
+}else{
+ OC_JSON::error();
+}
diff --git a/settings/js/apps.js b/settings/js/apps.js
index e2f882c6fec..bd7a8e9f84c 100644
--- a/settings/js/apps.js
+++ b/settings/js/apps.js
@@ -28,10 +28,18 @@ $(document).ready(function(){
var active=$(this).data('active');
if(app){
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');
}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');
}
active=!active;
diff --git a/tests/lib/user/backend.php b/tests/lib/user/backend.php
new file mode 100644
index 00000000000..5dab5afb186
--- /dev/null
+++ b/tests/lib/user/backend.php
@@ -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'));
+ }
+}
diff --git a/tests/lib/user/database.php b/tests/lib/user/database.php
new file mode 100644
index 00000000000..b2fcce93c5b
--- /dev/null
+++ b/tests/lib/user/database.php
@@ -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);
+ }
+ }
+}
diff --git a/tests/lib/user/dummy.php b/tests/lib/user/dummy.php
new file mode 100644
index 00000000000..062f55ba079
--- /dev/null
+++ b/tests/lib/user/dummy.php
@@ -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();
+ }
+}