Blame view
sources/lib/private/setup.php
5.32 KB
|
31b7f2792
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
<?php
class DatabaseSetupException extends \OC\HintException
{
}
class OC_Setup {
static $dbSetupClasses = array(
'mysql' => '\OC\Setup\MySQL',
'pgsql' => '\OC\Setup\PostgreSQL',
'oci' => '\OC\Setup\OCI',
'mssql' => '\OC\Setup\MSSQL',
'sqlite' => '\OC\Setup\Sqlite',
'sqlite3' => '\OC\Setup\Sqlite',
);
public static function getTrans(){
return OC_L10N::get('lib');
}
public static function install($options) {
$l = self::getTrans();
$error = array();
$dbtype = $options['dbtype'];
if(empty($options['adminlogin'])) {
$error[] = $l->t('Set an admin username.');
}
if(empty($options['adminpass'])) {
$error[] = $l->t('Set an admin password.');
}
if(empty($options['directory'])) {
$options['directory'] = OC::$SERVERROOT."/data";
}
if (!isset(self::$dbSetupClasses[$dbtype])) {
$dbtype = 'sqlite';
}
$class = self::$dbSetupClasses[$dbtype];
$dbSetup = new $class(self::getTrans(), 'db_structure.xml');
$error = array_merge($error, $dbSetup->validate($options));
if(count($error) != 0) {
return $error;
}
//no errors, good
$username = htmlspecialchars_decode($options['adminlogin']);
$password = htmlspecialchars_decode($options['adminpass']);
$datadir = htmlspecialchars_decode($options['directory']);
|
|
6d9380f96
|
53 54 55 56 57 58 |
if( isset($options['trusted_domains'])
&& is_array($options['trusted_domains'])) {
$trustedDomains = $options['trusted_domains'];
} else {
$trustedDomains = array(OC_Request::serverHost());
}
|
|
31b7f2792
|
59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
if (OC_Util::runningOnWindows()) {
$datadir = rtrim(realpath($datadir), '\\');
}
//use sqlite3 when available, otherise sqlite2 will be used.
if($dbtype=='sqlite' and class_exists('SQLite3')) {
$dbtype='sqlite3';
}
//generate a random salt that is used to salt the local user passwords
$salt = OC_Util::generateRandomBytes(30);
OC_Config::setValue('passwordsalt', $salt);
//write the config file
|
|
6d9380f96
|
74 |
OC_Config::setValue('trusted_domains', $trustedDomains);
|
|
31b7f2792
|
75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 |
OC_Config::setValue('datadirectory', $datadir);
OC_Config::setValue('dbtype', $dbtype);
OC_Config::setValue('version', implode('.', OC_Util::getVersion()));
try {
$dbSetup->initialize($options);
$dbSetup->setupDatabase($username);
} catch (DatabaseSetupException $e) {
$error[] = array(
'error' => $e->getMessage(),
'hint' => $e->getHint()
);
return($error);
} catch (Exception $e) {
$error[] = array(
'error' => 'Error while trying to create admin user: ' . $e->getMessage(),
'hint' => ''
);
return($error);
}
//create the user and group
try {
OC_User::createUser($username, $password);
}
catch(Exception $exception) {
$error[] = $exception->getMessage();
}
if(count($error) == 0) {
|
|
6d9380f96
|
104 105 106 |
$appConfig = \OC::$server->getAppConfig();
$appConfig->setValue('core', 'installedat', microtime(true));
$appConfig->setValue('core', 'lastupdatedat', microtime(true));
|
|
31b7f2792
|
107 108 109 110 111 112 113 |
OC_Group::createGroup('admin');
OC_Group::addToGroup($username, 'admin');
OC_User::login($username, $password);
//guess what this does
OC_Installer::installShippedApps();
|
|
837968727
|
114 115 116 |
// create empty file in data dir, so we can later find
// out that this is indeed an ownCloud data directory
file_put_contents(OC_Config::getValue('datadirectory', OC::$SERVERROOT.'/data').'/.ocdata', '');
|
|
6d9380f96
|
117 |
// Update htaccess files for apache hosts |
|
31b7f2792
|
118 |
if (isset($_SERVER['SERVER_SOFTWARE']) && strstr($_SERVER['SERVER_SOFTWARE'], 'Apache')) {
|
|
6d9380f96
|
119 120 |
self::updateHtaccess(); self::protectDataDirectory(); |
|
31b7f2792
|
121 122 123 124 125 126 127 128 129 130 |
}
//and we are done
OC_Config::setValue('installed', true);
}
return $error;
}
/**
|
|
6d9380f96
|
131 |
* Append the correct ErrorDocument path for Apache hosts |
|
31b7f2792
|
132 |
*/ |
|
6d9380f96
|
133 134 135 |
public static function updateHtaccess() {
$content = "
";
|
|
31b7f2792
|
136 137 |
$content.= "ErrorDocument 403 ".OC::$WEBROOT."/core/templates/403.php ";//custom 403 error page |
|
6d9380f96
|
138 139 |
$content.= "ErrorDocument 404 ".OC::$WEBROOT."/core/templates/404.php";//custom 404 error page @file_put_contents(OC::$SERVERROOT.'/.htaccess', $content, FILE_APPEND); //suppress errors in case we don't have permissions for it |
|
31b7f2792
|
140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 |
}
public static function protectDataDirectory() {
//Require all denied
$now = date('Y-m-d H:i:s');
$content = "# Generated by ownCloud on $now
";
$content.= "# line below if for Apache 2.4
";
$content.= "<ifModule mod_authz_core>
";
$content.= "Require all denied
";
$content.= "</ifModule>
";
$content.= "# line below if for Apache 2.2
";
$content.= "<ifModule !mod_authz_core>
";
$content.= "deny from all
";
$content.= "</ifModule>
";
$content.= "# section for Apache 2.2 and 2.4
";
$content.= "IndexIgnore *
";
file_put_contents(OC_Config::getValue('datadirectory', OC::$SERVERROOT.'/data').'/.htaccess', $content);
file_put_contents(OC_Config::getValue('datadirectory', OC::$SERVERROOT.'/data').'/index.html', '');
}
/**
|
|
6d9380f96
|
174 |
* Post installation checks |
|
31b7f2792
|
175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 |
*/
public static function postSetupCheck($params) {
// setup was successful -> webdav testing now
$l = self::getTrans();
if (OC_Util::isWebDAVWorking()) {
header("Location: ".OC::$WEBROOT.'/');
} else {
$error = $l->t('Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken.');
$hint = $l->t('Please double check the <a href=\'%s\'>installation guides</a>.',
\OC_Helper::linkToDocs('admin-install'));
OC_Template::printErrorPage($error, $hint);
exit();
}
}
}
|