]> source.dussan.org Git - nextcloud-server.git/commitdiff
OC_CONFIG prepared for refactoring
authorJakob Sack <kde@jakobsack.de>
Sat, 12 Mar 2011 17:19:11 +0000 (18:19 +0100)
committerJakob Sack <kde@jakobsack.de>
Sat, 12 Mar 2011 17:19:11 +0000 (18:19 +0100)
lib/config.php

index 75ddaafc31692c335747be728b3a2fb414c24d42..637497734caefefeaa9b9e8b294fd8d20f8f657a 100644 (file)
 <?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;
        }
 }
 ?>