Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
O
our_own_cloud_project
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Deploy
Releases
Model registry
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
die_coolen_jungs
our_own_cloud_project
Commits
59847bb9
Commit
59847bb9
authored
14 years ago
by
Jakob Sack
Browse files
Options
Downloads
Patches
Plain Diff
OC_CONFIG prepared for refactoring
parent
1aa7fd98
No related branches found
Branches containing commit
No related tags found
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
lib/config.php
+71
-373
71 additions, 373 deletions
lib/config.php
with
71 additions
and
373 deletions
lib/config.php
+
71
−
373
View file @
59847bb9
<?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
;
}
}
?>
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment