diff --git a/core/command/db/converttype.php b/core/command/db/converttype.php index 9d03b705d1..cbce1c3710 100644 --- a/core/command/db/converttype.php +++ b/core/command/db/converttype.php @@ -289,10 +289,12 @@ class ConvertType extends Command { $dbhost .= ':'.$input->getOption('port'); } - $this->config->setSystemValue('dbtype', $type); - $this->config->setSystemValue('dbname', $dbname); - $this->config->setSystemValue('dbhost', $dbhost); - $this->config->setSystemValue('dbuser', $username); - $this->config->setSystemValue('dbpassword', $password); + $this->config->setSystemValues([ + 'dbtype' => $type, + 'dbname' => $dbname, + 'dbhost' => $dbhost, + 'dbuser' => $username, + 'dbpassword' => $password, + ]); } } diff --git a/lib/private/setup.php b/lib/private/setup.php index b9ba8d906c..e5f84d4c02 100644 --- a/lib/private/setup.php +++ b/lib/private/setup.php @@ -176,18 +176,19 @@ class OC_Setup { //generate a random salt that is used to salt the local user passwords $salt = \OC::$server->getSecureRandom()->getLowStrengthGenerator()->generate(30); - \OC::$server->getConfig()->setSystemValue('passwordsalt', $salt); - // generate a secret $secret = \OC::$server->getSecureRandom()->getMediumStrengthGenerator()->generate(48); - \OC::$server->getConfig()->setSystemValue('secret', $secret); //write the config file - \OC::$server->getConfig()->setSystemValue('trusted_domains', $trustedDomains); - \OC::$server->getConfig()->setSystemValue('datadirectory', $dataDir); - \OC::$server->getConfig()->setSystemValue('overwrite.cli.url', \OC_Request::serverProtocol() . '://' . \OC_Request::serverHost() . OC::$WEBROOT); - \OC::$server->getConfig()->setSystemValue('dbtype', $dbType); - \OC::$server->getConfig()->setSystemValue('version', implode('.', OC_Util::getVersion())); + \OC::$server->getConfig()->setSystemValues([ + 'passwordsalt' => $salt, + 'secret' => $secret, + 'trusted_domains' => $trustedDomains, + 'datadirectory' => $dataDir, + 'overwrite.cli.url' => \OC_Request::serverProtocol() . '://' . \OC_Request::serverHost() . OC::$WEBROOT, + 'dbtype' => $dbType, + 'version' => implode('.', OC_Util::getVersion()), + ]); try { $dbSetup->initialize($options); diff --git a/lib/private/setup/abstractdatabase.php b/lib/private/setup/abstractdatabase.php index 84625a217e..e421efe802 100644 --- a/lib/private/setup/abstractdatabase.php +++ b/lib/private/setup/abstractdatabase.php @@ -41,9 +41,11 @@ abstract class AbstractDatabase { $dbhost = !empty($config['dbhost']) ? $config['dbhost'] : 'localhost'; $dbtableprefix = isset($config['dbtableprefix']) ? $config['dbtableprefix'] : 'oc_'; - \OC_Config::setValue('dbname', $dbname); - \OC_Config::setValue('dbhost', $dbhost); - \OC_Config::setValue('dbtableprefix', $dbtableprefix); + \OC_Config::setValues([ + 'dbname' => $dbname, + 'dbhost' => $dbhost, + 'dbtableprefix' => $dbtableprefix, + ]); $this->dbuser = $dbuser; $this->dbpassword = $dbpass; diff --git a/lib/private/setup/mssql.php b/lib/private/setup/mssql.php index 5143545b76..f1699c36f9 100644 --- a/lib/private/setup/mssql.php +++ b/lib/private/setup/mssql.php @@ -21,8 +21,10 @@ class MSSQL extends AbstractDatabase { $this->trans->t('You need to enter either an existing account or the administrator.')); } - \OC_Config::setValue('dbuser', $this->dbuser); - \OC_Config::setValue('dbpassword', $this->dbpassword); + \OC_Config::setValues([ + 'dbuser' => $this->dbuser, + 'dbpassword' => $this->dbpassword, + ]); $this->createDBLogin($masterConnection); diff --git a/lib/private/setup/mysql.php b/lib/private/setup/mysql.php index 8f8d86d388..97f75e2f67 100644 --- a/lib/private/setup/mysql.php +++ b/lib/private/setup/mysql.php @@ -51,8 +51,10 @@ class MySQL extends AbstractDatabase { } }; - \OC_Config::setValue('dbuser', $this->dbuser); - \OC_Config::setValue('dbpassword', $this->dbpassword); + \OC_Config::setValues([ + 'dbuser' => $this->dbuser, + 'dbpassword' => $this->dbpassword, + ]); } //create the database diff --git a/lib/private/setup/oci.php b/lib/private/setup/oci.php index b75b658bae..d4f71f18ab 100644 --- a/lib/private/setup/oci.php +++ b/lib/private/setup/oci.php @@ -16,8 +16,11 @@ class OCI extends AbstractDatabase { } // allow empty hostname for oracle $this->dbhost = $config['dbhost']; - \OC_Config::setValue('dbhost', $this->dbhost); - \OC_Config::setValue('dbtablespace', $this->dbtablespace); + + \OC_Config::setValues([ + 'dbhost' => $this->dbhost, + 'dbtablespace' => $this->dbtablespace, + ]); } public function validate($config) { @@ -72,37 +75,32 @@ class OCI extends AbstractDatabase { $result = oci_execute($stmt); if($result) { $row = oci_fetch_row($stmt); + + if ($row[0] > 0) { + //use the admin login data for the new database user + + //add prefix to the oracle user name to prevent collisions + $this->dbuser='oc_'.$username; + //create a new password so we don't need to store the admin config in the config file + $this->dbpassword=\OC_Util::generateRandomBytes(30); + + //oracle passwords are treated as identifiers: + // must start with alphanumeric char + // needs to be shortened to 30 bytes, as the two " needed to escape the identifier count towards the identifier length. + $this->dbpassword=substr($this->dbpassword, 0, 30); + + $this->createDBUser($connection); + } } - if($result and $row[0] > 0) { - //use the admin login data for the new database user - //add prefix to the oracle user name to prevent collisions - $this->dbuser='oc_'.$username; - //create a new password so we don't need to store the admin config in the config file - $this->dbpassword=\OC_Util::generateRandomBytes(30); + \OC_Config::setValues([ + 'dbuser' => $this->dbuser, + 'dbname' => $this->dbname, + 'dbpassword' => $this->dbpassword, + ]); - //oracle passwords are treated as identifiers: - // must start with alphanumeric char - // needs to be shortened to 30 bytes, as the two " needed to escape the identifier count towards the identifier length. - $this->dbpassword=substr($this->dbpassword, 0, 30); - - $this->createDBUser($connection); - - \OC_Config::setValue('dbuser', $this->dbuser); - \OC_Config::setValue('dbname', $this->dbuser); - \OC_Config::setValue('dbpassword', $this->dbpassword); - - //create the database not necessary, oracle implies user = schema - //$this->createDatabase($this->dbname, $this->dbuser, $connection); - } else { - - \OC_Config::setValue('dbuser', $this->dbuser); - \OC_Config::setValue('dbname', $this->dbname); - \OC_Config::setValue('dbpassword', $this->dbpassword); - - //create the database not necessary, oracle implies user = schema - //$this->createDatabase($this->dbname, $this->dbuser, $connection); - } + //create the database not necessary, oracle implies user = schema + //$this->createDatabase($this->dbname, $this->dbuser, $connection); //FIXME check tablespace exists: select * from user_tablespaces diff --git a/lib/private/setup/postgresql.php b/lib/private/setup/postgresql.php index 3777d1620b..5fb6b85fc8 100644 --- a/lib/private/setup/postgresql.php +++ b/lib/private/setup/postgresql.php @@ -43,20 +43,15 @@ class PostgreSQL extends AbstractDatabase { $this->dbpassword=\OC_Util::generateRandomBytes(30); $this->createDBUser($connection); - - \OC_Config::setValue('dbuser', $this->dbuser); - \OC_Config::setValue('dbpassword', $this->dbpassword); - - //create the database - $this->createDatabase($connection); } - else { - \OC_Config::setValue('dbuser', $this->dbuser); - \OC_Config::setValue('dbpassword', $this->dbpassword); - //create the database - $this->createDatabase($connection); - } + \OC_Config::setValues([ + 'dbuser' => $this->dbuser, + 'dbpassword' => $this->dbpassword, + ]); + + //create the database + $this->createDatabase($connection); // the connection to dbname=postgres is not needed anymore pg_close($connection); diff --git a/settings/controller/mailsettingscontroller.php b/settings/controller/mailsettingscontroller.php index d050a5ea03..5874e644ab 100644 --- a/settings/controller/mailsettingscontroller.php +++ b/settings/controller/mailsettingscontroller.php @@ -84,20 +84,19 @@ class MailSettingsController extends Controller { $mail_smtpport) { $params = get_defined_vars(); + $configs = []; foreach($params as $key => $value) { - if(empty($value)) { - $this->config->deleteSystemValue($key); - } else { - $this->config->setSystemValue($key, $value); - } + $configs[$key] = (empty($value)) ? null : $value; } // Delete passwords from config in case no auth is specified - if($params['mail_smtpauth'] !== 1) { - $this->config->deleteSystemValue('mail_smtpname'); - $this->config->deleteSystemValue('mail_smtppassword'); + if ($params['mail_smtpauth'] !== 1) { + $configs['mail_smtpname'] = null; + $configs['mail_smtppassword'] = null; } + $this->config->setSystemValues($configs); + return array('data' => array('message' => (string) $this->l10n->t('Saved') @@ -113,8 +112,10 @@ class MailSettingsController extends Controller { * @return array */ public function storeCredentials($mail_smtpname, $mail_smtppassword) { - $this->config->setSystemValue('mail_smtpname', $mail_smtpname); - $this->config->setSystemValue('mail_smtppassword', $mail_smtppassword); + $this->config->setSystemValues([ + 'mail_smtpname' => $mail_smtpname, + 'mail_smtppassword' => $mail_smtppassword, + ]); return array('data' => array('message' => diff --git a/tests/settings/controller/mailsettingscontrollertest.php b/tests/settings/controller/mailsettingscontrollertest.php index f6ebade7b1..ed33d7fbe4 100644 --- a/tests/settings/controller/mailsettingscontrollertest.php +++ b/tests/settings/controller/mailsettingscontrollertest.php @@ -69,26 +69,37 @@ class MailSettingsControllerTest extends \Test\TestCase { ); */ - $this->container['Config'] - ->expects($this->exactly(15)) - ->method('setSystemValue'); - + /** @var \PHPUnit_Framework_MockObject_MockObject $config */ + $config = $this->container['Config']; + $config->expects($this->exactly(2)) + ->method('setSystemValues'); /** * FIXME: Use the following block once Jenkins uses PHPUnit >= 4.1 - */ - /* - $this->container['Config'] - ->expects($this->exactly(3)) - ->method('deleteSystemValue') ->withConsecutive( - array($this->equalTo('mail_smtpauth')), - array($this->equalTo('mail_smtpname')), - array($this->equalTo('mail_smtppassword')) + [[ + 'mail_domain' => 'owncloud.com', + 'mail_from_address' => 'demo@owncloud.com', + 'mail_smtpmode' => 'smtp', + 'mail_smtpsecure' => 'ssl', + 'mail_smtphost' => 'mx.owncloud.org', + 'mail_smtpauthtype' => 'NTLM', + 'mail_smtpauth' => 1, + 'mail_smtpport' => '25', + ]], + [[ + 'mail_domain' => 'owncloud.com', + 'mail_from_address' => 'demo@owncloud.com', + 'mail_smtpmode' => 'smtp', + 'mail_smtpsecure' => 'ssl', + 'mail_smtphost' => 'mx.owncloud.org', + 'mail_smtpauthtype' => 'NTLM', + 'mail_smtpauth' => null, + 'mail_smtpport' => '25', + 'mail_smtpname' => null, + 'mail_smtppassword' => null, + ]] ); - */ - $this->container['Config'] - ->expects($this->exactly(3)) - ->method('deleteSystemValue'); + */ // With authentication $response = $this->container['MailSettingsController']->setMailSettings( @@ -126,21 +137,13 @@ class MailSettingsControllerTest extends \Test\TestCase { ->method('t') ->will($this->returnValue('Saved')); - /** - * FIXME: Use this block once Jenkins uses PHPUnit >= 4.1 - */ - /* $this->container['Config'] - ->expects($this->exactly(2)) - ->method('setSystemValue') - ->withConsecutive( - array($this->equalTo('mail_smtpname'), $this->equalTo('UsernameToStore')), - array($this->equalTo('mail_smtppassword'), $this->equalTo('PasswordToStore')) - ); - */ - $this->container['Config'] - ->expects($this->exactly(2)) - ->method('setSystemValue'); + ->expects($this->once()) + ->method('setSystemValues') + ->with([ + 'mail_smtpname' => 'UsernameToStore', + 'mail_smtppassword' => 'PasswordToStore', + ]); $response = $this->container['MailSettingsController']->storeCredentials('UsernameToStore', 'PasswordToStore'); $expectedResponse = array('data' => array('message' =>'Saved'), 'status' => 'success');