2013-09-10 22:19:42 +04:00
|
|
|
<?php
|
2013-10-02 20:23:47 +04:00
|
|
|
/**
|
|
|
|
* Copyright (c) 2013 Bart Visscher <bartv@thisnet.nl>
|
|
|
|
* This file is licensed under the Affero General Public License version 3 or
|
|
|
|
* later.
|
|
|
|
* See the COPYING-README file.
|
|
|
|
*/
|
2013-09-10 22:19:42 +04:00
|
|
|
|
|
|
|
namespace OC\Core\Setup;
|
|
|
|
|
|
|
|
class Controller {
|
|
|
|
public function run($post) {
|
|
|
|
// Check for autosetup:
|
|
|
|
$post = $this->loadAutoConfig($post);
|
|
|
|
$opts = $this->getSystemInfo();
|
|
|
|
|
|
|
|
if(isset($post['install']) AND $post['install']=='true') {
|
|
|
|
// We have to launch the installation process :
|
|
|
|
$e = \OC_Setup::install($post);
|
|
|
|
$errors = array('errors' => $e);
|
|
|
|
|
|
|
|
if(count($e) > 0) {
|
2014-03-13 23:05:11 +04:00
|
|
|
$options = array_merge($opts, $post, $errors);
|
2013-09-10 22:19:42 +04:00
|
|
|
$this->display($options);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
$this->finishSetup();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
2014-03-13 23:05:11 +04:00
|
|
|
$options = array_merge($opts, $post);
|
|
|
|
$this->display($options);
|
2013-09-10 22:19:42 +04:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public function display($post) {
|
2014-01-31 19:57:49 +04:00
|
|
|
$defaults = array(
|
|
|
|
'adminlogin' => '',
|
|
|
|
'adminpass' => '',
|
|
|
|
'dbuser' => '',
|
|
|
|
'dbpass' => '',
|
|
|
|
'dbname' => '',
|
|
|
|
'dbtablespace' => '',
|
|
|
|
'dbhost' => '',
|
2014-03-13 23:05:11 +04:00
|
|
|
'dbtype' => '',
|
2014-01-31 19:57:49 +04:00
|
|
|
);
|
|
|
|
$parameters = array_merge($defaults, $post);
|
2014-01-31 19:43:12 +04:00
|
|
|
|
|
|
|
\OC_Util::addScript( '3rdparty', 'strengthify/jquery.strengthify' );
|
|
|
|
\OC_Util::addStyle( '3rdparty', 'strengthify/strengthify' );
|
2013-09-10 22:19:42 +04:00
|
|
|
\OC_Util::addScript('setup');
|
2014-01-31 19:57:49 +04:00
|
|
|
\OC_Template::printGuestPage('', 'installation', $parameters);
|
2013-09-10 22:19:42 +04:00
|
|
|
}
|
|
|
|
|
|
|
|
public function finishSetup() {
|
|
|
|
header( 'Location: '.\OC_Helper::linkToRoute( 'post_setup_check' ));
|
|
|
|
exit();
|
|
|
|
}
|
|
|
|
|
|
|
|
public function loadAutoConfig($post) {
|
|
|
|
$autosetup_file = \OC::$SERVERROOT.'/config/autoconfig.php';
|
|
|
|
if( file_exists( $autosetup_file )) {
|
|
|
|
\OC_Log::write('core', 'Autoconfig file found, setting up owncloud...', \OC_Log::INFO);
|
2014-02-05 21:23:40 +04:00
|
|
|
$AUTOCONFIG = array();
|
2013-09-10 22:19:42 +04:00
|
|
|
include $autosetup_file;
|
|
|
|
$post = array_merge ($post, $AUTOCONFIG);
|
|
|
|
}
|
2014-01-31 19:43:12 +04:00
|
|
|
|
2014-02-05 21:23:40 +04:00
|
|
|
$dbIsSet = isset($post['dbtype']);
|
|
|
|
$directoryIsSet = isset($post['directory']);
|
|
|
|
$adminAccountIsSet = isset($post['adminlogin']);
|
|
|
|
|
2014-01-31 19:43:12 +04:00
|
|
|
if ($dbIsSet AND $directoryIsSet AND $adminAccountIsSet) {
|
|
|
|
$post['install'] = 'true';
|
|
|
|
if( file_exists( $autosetup_file )) {
|
|
|
|
unlink($autosetup_file);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
$post['dbIsSet'] = $dbIsSet;
|
|
|
|
$post['directoryIsSet'] = $directoryIsSet;
|
|
|
|
|
2013-09-10 22:19:42 +04:00
|
|
|
return $post;
|
|
|
|
}
|
|
|
|
|
2014-03-20 15:31:36 +04:00
|
|
|
/**
|
|
|
|
* Gathers system information like database type and does
|
|
|
|
* a few system checks.
|
|
|
|
*
|
|
|
|
* @return array of system info, including an "errors" value
|
|
|
|
* in case of errors/warnings
|
|
|
|
*/
|
2013-09-10 22:19:42 +04:00
|
|
|
public function getSystemInfo() {
|
|
|
|
$hasSQLite = class_exists('SQLite3');
|
|
|
|
$hasMySQL = is_callable('mysql_connect');
|
|
|
|
$hasPostgreSQL = is_callable('pg_connect');
|
|
|
|
$hasOracle = is_callable('oci_connect');
|
|
|
|
$hasMSSQL = is_callable('sqlsrv_connect');
|
2014-01-31 20:31:19 +04:00
|
|
|
$databases = array();
|
|
|
|
if ($hasSQLite) {
|
|
|
|
$databases['sqlite'] = 'SQLite';
|
|
|
|
}
|
|
|
|
if ($hasMySQL) {
|
2014-02-07 19:09:31 +04:00
|
|
|
$databases['mysql'] = 'MySQL/MariaDB';
|
2014-01-31 20:31:19 +04:00
|
|
|
}
|
|
|
|
if ($hasPostgreSQL) {
|
|
|
|
$databases['pgsql'] = 'PostgreSQL';
|
|
|
|
}
|
|
|
|
if ($hasOracle) {
|
|
|
|
$databases['oci'] = 'Oracle';
|
|
|
|
}
|
|
|
|
if ($hasMSSQL) {
|
|
|
|
$databases['mssql'] = 'MS SQL';
|
|
|
|
}
|
2013-09-10 22:19:42 +04:00
|
|
|
$datadir = \OC_Config::getValue('datadirectory', \OC::$SERVERROOT.'/data');
|
|
|
|
$vulnerableToNullByte = false;
|
|
|
|
if(@file_exists(__FILE__."\0Nullbyte")) { // Check if the used PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)
|
|
|
|
$vulnerableToNullByte = true;
|
|
|
|
}
|
|
|
|
|
2013-09-11 00:05:20 +04:00
|
|
|
$errors = array();
|
|
|
|
|
2013-09-10 22:19:42 +04:00
|
|
|
// Protect data directory here, so we can test if the protection is working
|
|
|
|
\OC_Setup::protectDataDirectory();
|
2013-09-11 00:05:20 +04:00
|
|
|
try {
|
2013-09-24 02:44:55 +04:00
|
|
|
$htaccessWorking = \OC_Util::isHtAccessWorking();
|
2013-09-11 00:05:20 +04:00
|
|
|
} catch (\OC\HintException $e) {
|
|
|
|
$errors[] = array(
|
|
|
|
'error' => $e->getMessage(),
|
|
|
|
'hint' => $e->getHint()
|
|
|
|
);
|
2013-10-07 02:36:42 +04:00
|
|
|
$htaccessWorking = false;
|
2013-09-11 00:05:20 +04:00
|
|
|
}
|
2013-09-10 22:19:42 +04:00
|
|
|
|
2014-03-20 15:31:36 +04:00
|
|
|
if (\OC_Util::runningOnMac()) {
|
|
|
|
$l10n = \OC_L10N::get('core');
|
|
|
|
$themeName = \OC_Util::getTheme();
|
|
|
|
$theme = new \OC_Defaults();
|
|
|
|
$errors[] = array(
|
|
|
|
'error' => $l10n->t(
|
|
|
|
'Mac OS X is not supported and %s will not work properly on this platform. ' .
|
|
|
|
'Use it at your own risk! ',
|
|
|
|
$theme->getName()
|
|
|
|
),
|
|
|
|
'hint' => $l10n->t('For the best results, please consider using a GNU/Linux server instead.')
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
2013-09-10 22:19:42 +04:00
|
|
|
return array(
|
|
|
|
'hasSQLite' => $hasSQLite,
|
|
|
|
'hasMySQL' => $hasMySQL,
|
|
|
|
'hasPostgreSQL' => $hasPostgreSQL,
|
|
|
|
'hasOracle' => $hasOracle,
|
|
|
|
'hasMSSQL' => $hasMSSQL,
|
2014-01-31 20:31:19 +04:00
|
|
|
'databases' => $databases,
|
2013-09-10 22:19:42 +04:00
|
|
|
'directory' => $datadir,
|
|
|
|
'secureRNG' => \OC_Util::secureRNGAvailable(),
|
2013-09-11 00:05:20 +04:00
|
|
|
'htaccessWorking' => $htaccessWorking,
|
2013-09-10 22:19:42 +04:00
|
|
|
'vulnerableToNullByte' => $vulnerableToNullByte,
|
2013-09-11 00:05:20 +04:00
|
|
|
'errors' => $errors,
|
2013-09-10 22:19:42 +04:00
|
|
|
);
|
|
|
|
}
|
|
|
|
}
|