From: Jakob Sack Date: Sat, 12 Mar 2011 17:19:11 +0000 (+0100) Subject: OC_CONFIG prepared for refactoring X-Git-Tag: v3.0~267^2~558^2~173 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=59847bb90161badcd17397a147bd0a9ddddcb376;p=nextcloud-server.git OC_CONFIG prepared for refactoring --- diff --git a/lib/config.php b/lib/config.php index 75ddaafc316..637497734ca 100644 --- a/lib/config.php +++ b/lib/config.php @@ -1,390 +1,88 @@ . + * + */ + +/** + * This class is responsible for reading and writing config.php, the very basic + * configuration file of owncloud. + */ class OC_CONFIG{ - static public $forms=array(); - - /** - * add a form to the settings page - * @param string name - * @param string url - */ - public static function addForm($name,$url){ - self::$forms[$name]=$url; - } - - /** - * settings page - * - */ - public static function showSettings(){ - oc_require('templates/settings.php'); - } - - /** - * show the configform - * - */ - public static function showAdminForm(){ - global $CONFIG_ADMINLOGIN; - global $CONFIG_ADMINPASSWORD; - global $CONFIG_DATADIRECTORY; - global $CONFIG_HTTPFORCESSL; - global $CONFIG_DATEFORMAT; - global $CONFIG_DBNAME; - global $CONFIG_DBTABLEPREFIX; - global $CONFIG_INSTALLED; - $allow=false; - if(!$CONFIG_INSTALLED){ - $allow=true; - }elseif(OC_USER::isLoggedIn()){ - if(OC_USER::ingroup($_SESSION['username'],'admin')){ - $allow=true; - } - } - if($allow){ - oc_require('templates/adminform.php'); - } - } + // associative array key => value + private static $cache = array(); + + // Is the cache filled? + private static $init = false; - public static function createUserListener(){ - if(OC_USER::isLoggedIn()){ - if(OC_USER::ingroup($_SESSION['username'],'admin')){ - if(isset($_POST['new_username']) and isset($_POST['new_password'])){ - if(OC_USER::createuser($_POST['new_username'],$_POST['new_password'])){ - return 'user successfully created'; - }else{ - return 'error while trying to create user'; - } - }else{ - return false; - } - }else{ - return false; - } - } - } - - public static function createGroupListener(){ - if(OC_USER::isLoggedIn()){ - if(isset($_POST['creategroup']) and $_POST['creategroup']==1){ - if(OC_USER::creategroup($_POST['groupname'])){ - return 'group successfully created'; - }else{ - return 'error while trying to create group'; - } - }else{ - return false; - } - }else{ - return false; - } - } - - /** - * listen for configuration changes - * - */ - public static function configListener(){ - if(OC_USER::isLoggedIn()){ - if(isset($_POST['config']) and $_POST['config']==1){ - $error=''; - if(!OC_USER::checkpassword($_SESSION['username'],$_POST['currentpassword'])){ - $error.='wrong password
'; - }else{ - if(isset($_POST['changepass']) and $_POST['changepass']==1){ - if(!isset($_POST['password']) or empty($_POST['password'])) $error.='password not set
'; - if(!isset($_POST['password2']) or empty($_POST['password2'])) $error.='retype password not set
'; - if($_POST['password']<>$_POST['password2'] ) $error.='passwords are not the same
'; - if(empty($error)){ - if(!OC_USER::setpassword($_SESSION['username'],$_POST['password'])){ - $error.='error while trying to set password
'; - } - } - } - } - return $error; - }else{ - return false; - } - }else{ - return false; - } + * @brief Lists all available config keys + * @returns array with key names + * + * This function returns all keys saved in config.php. Please note that it + * does not return the values. + */ + public static function getKeys(){ + // TODO: write function + return array(); } /** - * Write the configuration to the `config.php` file - * - * $configuration contains key/value pairs - * - the key is the option name without the 'CONFIG_' prefix - * - the value is a string, a boolean or a number + * @brief Gets a value from config.php + * @param $key key + * @param $default = null default value + * @returns the value or $default * - * @param array $configuration is an associative array + * This function gets the value from config.php. If it does not exist, + * $default will be returned. */ - protected static function saveConfiguration($configuration) { - global $SERVERROOT; - - $configContent = ' $value ) { - if ( is_string($value) ) { - $configContent .= "\n\$CONFIG_$key = '$value';"; // e.g. $CONFIG_DBTYPE = 'mysql'; - } else if ( is_bool($value) ) { - $value = $value ? 'true' : 'false'; - $configContent .= "\n\$CONFIG_$key = $value;"; // e.g. $CONFIG_INSTALLED = true; - } else if ( is_numeric($value) ) { - $configContent .= "\n\$CONFIG_$key = $value;"; // e.g. $CONFIG_PI = 3.14; - } - } - $configContent .= "\n?>"; - $filename = "$SERVERROOT/config/config.php"; - file_put_contents($filename, $configContent); + public static function getValue( $key, $default = null ){ + // TODO: write function + return $default; } - - /** - * listen for admin configuration changes and write it to the file - *4bd0be1185e76 - */ - public static function writeAdminListener(){ - global $CONFIG_INSTALLED; - $allow=false; - if(!$CONFIG_INSTALLED){ - $allow=true; - }elseif(OC_USER::isLoggedIn()){ - if(OC_USER::ingroup($_SESSION['username'],'admin')){ - $allow=true; - } - } - if($allow){ - global $DOCUMENTROOT; - global $SERVERROOT; - global $WEBROOT; - global $CONFIG_DBHOST; - global $CONFIG_DBNAME; - global $CONFIG_DBTABLEPREFIX; - global $CONFIG_INSTALLED; - global $CONFIG_DBUSER; - global $CONFIG_DBPASSWORD; - global $CONFIG_DBTYPE; - global $CONFIG_ADMINLOGIN; - global $CONFIG_ADMINPASSWORD; - if(isset($_POST['set_config'])){ - //checkdata - $error=''; - $FIRSTRUN=!$CONFIG_INSTALLED; - if(!$FIRSTRUN){ - if(!OC_USER::login($_SESSION['username'],$_POST['currentpassword'])){ - $error.='wrong password
'; - } - } - - if((!isset($_POST['adminlogin']) or empty($_POST['adminlogin'])) and $FIRSTRUN) $error.='admin login not set
'; - if((!isset($_POST['adminpassword']) or empty($_POST['adminpassword'])) and $FIRSTRUN) $error.='admin password not set
'; - if((!isset($_POST['adminpassword2']) or empty($_POST['adminpassword2'])) and $FIRSTRUN) $error.='retype admin password not set
'; - if((!isset($_POST['datadirectory']) or empty($_POST['datadirectory'])) and $FIRSTRUN) $error.='data directory not set
'; - if(!isset($_POST['dateformat']) or empty($_POST['dateformat'])) $error.='dateformat not set
'; - if((!isset($_POST['dbname']) or empty($_POST['dbname'])) and $FIRSTRUN) $error.='databasename not set
'; - if($FIRSTRUN and $_POST['adminpassword']<>$_POST['adminpassword2'] ) $error.='admin passwords are not the same
'; - $dbtype=(isset($_POST['dbtype']))?$_POST['dbtype']:$CONFIG_DBTYPE; - if($dbtype=='mysql'){ - if(!isset($_POST['dbhost']) or empty($_POST['dbhost'])) $error.='database host not set
'; - if(!isset($_POST['dbuser']) or empty($_POST['dbuser'])) $error.='database user not set
'; - if($_POST['dbpassword']<>$_POST['dbpassword2'] ) $error.='database passwords are not the same
'; - - } - if(isset($_POST['enablebackup']) and $_POST['enablebackup']==1){ - if(!isset($_POST['backupdirectory']) or empty($_POST['backupdirectory'])) $error.='backup directory not set
'; - } - if(!$FIRSTRUN){ - if(!isset($_POST['adminpassword']) or empty($_POST['adminpassword'])){ - $_POST['adminpassword']=$CONFIG_ADMINPASSWORD; - } - if(!isset($_POST['dbpassword']) or empty($_POST['dbpassword'])){ - $_POST['dbpassword']=$CONFIG_DBPASSWORD; - } - }else{ - if(!is_dir($_POST['datadirectory'])){ - try{ - mkdir($_POST['datadirectory']); - }catch(Exception $e){ - $error.='error while trying to create data directory
'; - } - } - } - if(empty($error)) { - if($CONFIG_DBTYPE!=$dbtype or $FIRSTRUN){ - //create/fill database - $CONFIG_DBTYPE=$dbtype; - $CONFIG_DBNAME=$_POST['dbname']; - if($dbtype!='sqlite'){ - $CONFIG_DBTABLEPREFIX=$_POST['dbtableprefix']; - $CONFIG_DBHOST=$_POST['dbhost']; - $CONFIG_DBUSER=$_POST['dbuser']; - $CONFIG_DBPASSWORD=$_POST['dbpassword']; - }else{ - $_POST['dbtableprefix']=''; - $CONFIG_DBTABLEPREFIX=''; - } - try{ - if(isset($_POST['createdatabase']) and $CONFIG_DBTYPE!='sqlite'){ - self::createdatabase($_POST['dbadminuser'],$_POST['dbadminpwd']); - } - }catch(Exception $e){ - $error.='error while trying to create the database
'; - } - if($CONFIG_DBTYPE=='sqlite'){ - $f=@fopen($SERVERROOT.'/'.$CONFIG_DBNAME,'a+'); - if(!$f){ - $error.='path of sqlite database not writable by server
'; - } - OC_DB::disconnect(); - unlink($SERVERROOT.'/'.$CONFIG_DBNAME); - } - try{ - if(isset($_POST['filldb'])){ - self::filldatabase(); - } - }catch(Exception $e){ - $error.='error while trying to fill the database
'; - } - if($CONFIG_DBTYPE=='sqlite'){ - OC_DB::disconnect(); - } - } - if($FIRSTRUN){ - if(!OC_USER::createuser($_POST['adminlogin'],$_POST['adminpassword']) && !OC_USER::login($_POST['adminlogin'],$_POST['adminpassword'])){ - $error.='error while trying to create the admin user
'; - } - if(OC_USER::getgroupid('admin',true)==0){ - if(!OC_USER::creategroup('admin')){ - $error.='error while trying to create the admin group
'; - } - } - if(!OC_USER::addtogroup($_POST['adminlogin'],'admin')){ - $error.='error while trying to add the admin user to the admin group
'; - } - } - // Build the configuration array - $config = array(); - $config['INSTALLED'] = true; - $config['DATADIRECTORY'] = $_POST['datadirectory']; - $config['HTTPFORCESSL'] = isset($_POST['forcessl']); - // Backup configuration - $config['ENABLEBACKUP'] = isset($_POST['enablebackup']); - if ( $config['ENABLEBACKUP'] AND (1 == $_POST['enablebackup']) ) - $config['BACKUPDIRECTORY'] = $_POST['backupdirectory']; - $config['DATEFORMAT'] = $_POST['dateformat']; - // DB Configuration - $config['DBTYPE'] = $dbtype; - $config['DBNAME'] = $_POST['dbname']; - $config['DBTABLEPREFIX'] = $_POST['dbtableprefix']; - if ( 'sqlite' != $dbtype ) { - $config['DBHOST'] = $_POST['dbhost']; - $config['DBUSER'] = $_POST['dbuser']; - $config['DBPASSWORD'] = $_POST['dbpassword']; - } - if( empty($error) ) { - header("Location: $WEBROOT/"); - try { - // Write the configuration array to `/config/config.php` - self::saveConfiguration($config); - } catch ( Exception $e ) { - $error.='error while trying to save the configuration file
'; - return $error; - } - } else { - return $error; - } - } - return($error); - } - } - } - /** - * Fills the database with the initial tables - * Note: while the AUTO_INCREMENT function is not supported by SQLite - * the same effect can be achieved by accessing the SQLite pseudo-column - * "rowid" - */ - private static function fillDatabase(){ - global $SERVERROOT; - OC_DB::createDBFromStructure($SERVERROOT.'/db_structure.xml'); + * @brief Sets a value + * @param $key key + * @param $value value + * @returns true/false + * + * This function sets the value and writes the config.php. If the file can + * not be written, false will be returned. + */ + public static function setValue( $key, $value ){ + // TODO: write function + return true; } - + /** - * Create the database and user - * @param string adminUser - * @param string adminPwd - * - */ - private static function createDatabase($adminUser,$adminPwd){ - global $CONFIG_DBHOST; - global $CONFIG_DBNAME; - global $CONFIG_DBUSER; - global $CONFIG_DBPWD; - global $CONFIG_DBTYPE; - //we cant user OC_BD functions here because we need to connect as the administrative user. - if($CONFIG_DBTYPE=='mysql'){ - $connection=mysql_connect($CONFIG_DBHOST, $adminUser, $adminPwd); - if(!$connection) { - @ob_end_clean(); - echo('

can not connect to database as administrative user.
'); - exit(); - } - $query="SELECT user FROM mysql.user WHERE user='{$_POST['dbuser']}'"; - $result = mysql_query($query,$connection); - if (!$result) { - $entry='DB Error: "'.mysql_error($connection).'"
'; - $entry.='Offending command was: '.$query.'
'; - echo($entry); - } - if(mysql_num_rows($result)==0){ - $pwd=$_POST['dbpassword']; - //we need to create 2 accounts, one for global use and one for local user. if we don't speccify the local one, - // the anonymous user would take precedence when there is one. - $query="CREATE USER '{$_POST['dbuser']}'@'localhost' IDENTIFIED BY '$pwd'"; - $result = mysql_query($query,$connection); - if (!$result) { - $entry='DB Error: "'.mysql_error($connection).'"
'; - $entry.='Offending command was: '.$query.'
'; - echo($entry); - } - $query="CREATE USER '{$_POST['dbuser']}'@'%' IDENTIFIED BY '$pwd'"; - $result = mysql_query($query,$connection); - if (!$result) { - $entry='DB Error: "'.mysql_error($connection).'"
'; - $entry.='Offending command was: '.$query.'
'; - echo($entry); - } - } - $query="CREATE DATABASE IF NOT EXISTS `{$_POST['dbname']}`"; - $result = mysql_query($query,$connection); - if (!$result) { - $entry='DB Error: "'.mysql_error($connection).'"
'; - $entry.='Offending command was: '.$query.'
'; - echo($entry); - } - $query="GRANT ALL PRIVILEGES ON `{$_POST['dbname']}` . * TO '{$_POST['dbuser']}'"; - $result = mysql_query($query,$connection); - if (!$result) { - $entry='DB Error: "'.mysql_error($connection).'"
'; - $entry.='Offending command was: '.$query.'
'; - echo($entry); - } - mysql_close($connection); - }elseif($CONFIG_DBTYPE=='pgsql'){ - $connection = pg_connect("user='$adminUser' host='$CONFIG_DBHOST' password='$adminPwd'"); - $query="CREATE USER {$_POST['dbuser']} WITH PASSWORD '{$_POST['dbpassword']}' CREATEDB;"; - $result = pg_exec($connection, $query); - $query="select count(*) from pg_catalog.pg_database where datname = '{$_POST['dbname']}';"; - $result = pg_exec($connection, $query); - if(pg_result($result,0,0)==0){ - $query="CREATE DATABASE {$_POST['dbname']};"; - $result = pg_exec($connection, $query); - $query="ALTER DATABASE {$_POST['dbname']} OWNER TO {$_POST['dbuser']};"; - $result = pg_exec($connection, $query); - } - } + * @brief Removes a key from the config + * @param $key key + * @returns true/false + * + * This function removes a key from the config.php. If owncloud has no + * write access to config.php, the function will return false. + */ + public static function deleteKey( $key ){ + // TODO: write function + return true; } } ?>