summaryrefslogtreecommitdiffstats
path: root/lib/private/setup.php
diff options
context:
space:
mode:
Diffstat (limited to 'lib/private/setup.php')
-rw-r--r--lib/private/setup.php63
1 files changed, 42 insertions, 21 deletions
diff --git a/lib/private/setup.php b/lib/private/setup.php
index 50bf0dceafc..8f1ae389e45 100644
--- a/lib/private/setup.php
+++ b/lib/private/setup.php
@@ -39,6 +39,8 @@ use bantu\IniGetWrapper\IniGetWrapper;
use Exception;
use OCP\IConfig;
use OCP\IL10N;
+use OCP\ILogger;
+use OCP\Security\ISecureRandom;
class Setup {
/** @var \OCP\IConfig */
@@ -49,6 +51,10 @@ class Setup {
protected $l10n;
/** @var \OC_Defaults */
protected $defaults;
+ /** @var ILogger */
+ protected $logger;
+ /** @var ISecureRandom */
+ protected $random;
/**
* @param IConfig $config
@@ -58,18 +64,22 @@ class Setup {
function __construct(IConfig $config,
IniGetWrapper $iniWrapper,
IL10N $l10n,
- \OC_Defaults $defaults) {
+ \OC_Defaults $defaults,
+ ILogger $logger,
+ ISecureRandom $random
+ ) {
$this->config = $config;
$this->iniWrapper = $iniWrapper;
$this->l10n = $l10n;
$this->defaults = $defaults;
+ $this->logger = $logger;
+ $this->random = $random;
}
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',
);
@@ -79,7 +89,7 @@ class Setup {
* @param string $name
* @return bool
*/
- public function class_exists($name) {
+ protected function class_exists($name) {
return class_exists($name);
}
@@ -88,11 +98,20 @@ class Setup {
* @param string $name
* @return bool
*/
- public function is_callable($name) {
+ protected function is_callable($name) {
return is_callable($name);
}
/**
+ * Wrapper around \PDO::getAvailableDrivers
+ *
+ * @return array
+ */
+ protected function getAvailableDbDriversForPdo() {
+ return \PDO::getAvailableDrivers();
+ }
+
+ /**
* Get the available and supported databases of this instance
*
* @param bool $allowAllDatabases
@@ -107,8 +126,8 @@ class Setup {
'name' => 'SQLite'
),
'mysql' => array(
- 'type' => 'function',
- 'call' => 'mysql_connect',
+ 'type' => 'pdo',
+ 'call' => 'mysql',
'name' => 'MySQL/MariaDB'
),
'pgsql' => array(
@@ -120,11 +139,6 @@ class Setup {
'type' => 'function',
'call' => 'oci_connect',
'name' => 'Oracle'
- ),
- 'mssql' => array(
- 'type' => 'function',
- 'call' => 'sqlsrv_connect',
- 'name' => 'MS SQL'
)
);
if ($allowAllDatabases) {
@@ -142,10 +156,15 @@ class Setup {
foreach($configuredDatabases as $database) {
if(array_key_exists($database, $availableDatabases)) {
$working = false;
- if($availableDatabases[$database]['type'] === 'class') {
- $working = $this->class_exists($availableDatabases[$database]['call']);
- } elseif ($availableDatabases[$database]['type'] === 'function') {
- $working = $this->is_callable($availableDatabases[$database]['call']);
+ $type = $availableDatabases[$database]['type'];
+ $call = $availableDatabases[$database]['call'];
+
+ if($type === 'class') {
+ $working = $this->class_exists($call);
+ } elseif ($type === 'function') {
+ $working = $this->is_callable($call);
+ } elseif($type === 'pdo') {
+ $working = in_array($call, $this->getAvailableDbDriversForPdo(), TRUE);
}
if($working) {
$supportedDatabases[$database] = $availableDatabases[$database]['name'];
@@ -218,7 +237,6 @@ class Setup {
'hasMySQL' => isset($databases['mysql']),
'hasPostgreSQL' => isset($databases['pgsql']),
'hasOracle' => isset($databases['oci']),
- 'hasMSSQL' => isset($databases['mssql']),
'databases' => $databases,
'directory' => $dataDir,
'htaccessWorking' => $htAccessWorking,
@@ -256,7 +274,8 @@ class Setup {
$class = self::$dbSetupClasses[$dbType];
/** @var \OC\Setup\AbstractDatabase $dbSetup */
- $dbSetup = new $class($l, 'db_structure.xml');
+ $dbSetup = new $class($l, 'db_structure.xml', $this->config,
+ $this->logger, $this->random);
$error = array_merge($error, $dbSetup->validate($options));
// validate the data directory
@@ -291,9 +310,9 @@ class Setup {
}
//generate a random salt that is used to salt the local user passwords
- $salt = \OC::$server->getSecureRandom()->getLowStrengthGenerator()->generate(30);
+ $salt = $this->random->getLowStrengthGenerator()->generate(30);
// generate a secret
- $secret = \OC::$server->getSecureRandom()->getMediumStrengthGenerator()->generate(48);
+ $secret = $this->random->getMediumStrengthGenerator()->generate(48);
//write the config file
$this->config->setSystemValues([
@@ -358,7 +377,7 @@ class Setup {
//try to write logtimezone
if (date_default_timezone_get()) {
- \OC_Config::setValue('logtimezone', date_default_timezone_get());
+ $config->setSystemValue('logtimezone', date_default_timezone_get());
}
//and we are done
@@ -396,7 +415,9 @@ class Setup {
* @throws \OC\HintException If .htaccess does not include the current version
*/
public static function updateHtaccess() {
- $setupHelper = new \OC\Setup(\OC::$server->getConfig(), \OC::$server->getIniWrapper(), \OC::$server->getL10N('lib'), new \OC_Defaults());
+ $setupHelper = new \OC\Setup(\OC::$server->getConfig(), \OC::$server->getIniWrapper(),
+ \OC::$server->getL10N('lib'), new \OC_Defaults(), \OC::$server->getLogger(),
+ \OC::$server->getSecureRandom());
if(!$setupHelper->isCurrentHtaccess()) {
throw new \OC\HintException('.htaccess file has the wrong version. Please upload the correct version. Maybe you forgot to replace it after updating?');
}