summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorJakob Sack <kde@jakobsack.de>2011-03-12 18:19:11 +0100
committerJakob Sack <kde@jakobsack.de>2011-03-12 18:19:11 +0100
commit59847bb90161badcd17397a147bd0a9ddddcb376 (patch)
treee353b07ba6a27deaa5686c9a91f0dd93e26fd0ed /lib
parent1aa7fd98c2e9fc20ede32fb6716e35b0827b6a91 (diff)
downloadnextcloud-server-59847bb90161badcd17397a147bd0a9ddddcb376.tar.gz
nextcloud-server-59847bb90161badcd17397a147bd0a9ddddcb376.zip
OC_CONFIG prepared for refactoring
Diffstat (limited to 'lib')
-rw-r--r--lib/config.php444
1 files changed, 71 insertions, 373 deletions
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 @@
<?php
+/**
+ * ownCloud
+ *
+ * @author Frank Karlitschek
+ * @author Jakob Sack
+ * @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/>.
+ *
+ */
+
+/**
+ * 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<br />';
- }else{
- if(isset($_POST['changepass']) and $_POST['changepass']==1){
- if(!isset($_POST['password']) or empty($_POST['password'])) $error.='password not set<br />';
- if(!isset($_POST['password2']) or empty($_POST['password2'])) $error.='retype password not set<br />';
- if($_POST['password']<>$_POST['password2'] ) $error.='passwords are not the same<br />';
- if(empty($error)){
- if(!OC_USER::setpassword($_SESSION['username'],$_POST['password'])){
- $error.='error while trying to set password<br />';
- }
- }
- }
- }
- 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 = '<?php';
- foreach ( $configuration as $key => $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<br />';
- }
- }
-
- if((!isset($_POST['adminlogin']) or empty($_POST['adminlogin'])) and $FIRSTRUN) $error.='admin login not set<br />';
- if((!isset($_POST['adminpassword']) or empty($_POST['adminpassword'])) and $FIRSTRUN) $error.='admin password not set<br />';
- if((!isset($_POST['adminpassword2']) or empty($_POST['adminpassword2'])) and $FIRSTRUN) $error.='retype admin password not set<br />';
- if((!isset($_POST['datadirectory']) or empty($_POST['datadirectory'])) and $FIRSTRUN) $error.='data directory not set<br />';
- if(!isset($_POST['dateformat']) or empty($_POST['dateformat'])) $error.='dateformat not set<br />';
- if((!isset($_POST['dbname']) or empty($_POST['dbname'])) and $FIRSTRUN) $error.='databasename not set<br />';
- if($FIRSTRUN and $_POST['adminpassword']<>$_POST['adminpassword2'] ) $error.='admin passwords are not the same<br />';
- $dbtype=(isset($_POST['dbtype']))?$_POST['dbtype']:$CONFIG_DBTYPE;
- if($dbtype=='mysql'){
- if(!isset($_POST['dbhost']) or empty($_POST['dbhost'])) $error.='database host not set<br />';
- if(!isset($_POST['dbuser']) or empty($_POST['dbuser'])) $error.='database user not set<br />';
- if($_POST['dbpassword']<>$_POST['dbpassword2'] ) $error.='database passwords are not the same<br />';
-
- }
- if(isset($_POST['enablebackup']) and $_POST['enablebackup']==1){
- if(!isset($_POST['backupdirectory']) or empty($_POST['backupdirectory'])) $error.='backup directory not set<br />';
- }
- 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<br/>';
- }
- }
- }
- 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<br/>';
- }
- if($CONFIG_DBTYPE=='sqlite'){
- $f=@fopen($SERVERROOT.'/'.$CONFIG_DBNAME,'a+');
- if(!$f){
- $error.='path of sqlite database not writable by server<br/>';
- }
- 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<br/>';
- }
- 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<br/>';
- }
- if(OC_USER::getgroupid('admin',true)==0){
- if(!OC_USER::creategroup('admin')){
- $error.='error while trying to create the admin group<br/>';
- }
- }
- if(!OC_USER::addtogroup($_POST['adminlogin'],'admin')){
- $error.='error while trying to add the admin user to the admin group<br/>';
- }
- }
- // 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<br/>';
- 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('<html><head></head><body bgcolor="#F0F0F0"><br /><br /><center><b>can not connect to database as administrative user.</center></body></html>');
- exit();
- }
- $query="SELECT user FROM mysql.user WHERE user='{$_POST['dbuser']}'";
- $result = mysql_query($query,$connection);
- if (!$result) {
- $entry='DB Error: "'.mysql_error($connection).'"<br />';
- $entry.='Offending command was: '.$query.'<br />';
- 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).'"<br />';
- $entry.='Offending command was: '.$query.'<br />';
- echo($entry);
- }
- $query="CREATE USER '{$_POST['dbuser']}'@'%' IDENTIFIED BY '$pwd'";
- $result = mysql_query($query,$connection);
- if (!$result) {
- $entry='DB Error: "'.mysql_error($connection).'"<br />';
- $entry.='Offending command was: '.$query.'<br />';
- echo($entry);
- }
- }
- $query="CREATE DATABASE IF NOT EXISTS `{$_POST['dbname']}`";
- $result = mysql_query($query,$connection);
- if (!$result) {
- $entry='DB Error: "'.mysql_error($connection).'"<br />';
- $entry.='Offending command was: '.$query.'<br />';
- 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).'"<br />';
- $entry.='Offending command was: '.$query.'<br />';
- 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;
}
}
?>