Override config.php values through ENV variables (#26570)

* added functionality to override config.php values with 'OC_' prefixed environment variables

* use getenv to read environment variables since apache does not set $_ENV variables, fixed test

Signed-off-by: Morris Jobke <hey@morrisjobke.de>
This commit is contained in:
Philipp Schaffrath 2017-01-24 12:18:29 +01:00 committed by Morris Jobke
parent fa4107893d
commit 695a17804e
No known key found for this signature in database
GPG Key ID: 9CE5ED29E7FCD38A
2 changed files with 18 additions and 2 deletions

View File

@ -39,6 +39,9 @@ namespace OC;
* configuration file of ownCloud. * configuration file of ownCloud.
*/ */
class Config { class Config {
const ENV_PREFIX = 'OC_';
/** @var array Associative array ($key => $value) */ /** @var array Associative array ($key => $value) */
protected $cache = array(); protected $cache = array();
/** @var string */ /** @var string */
@ -71,15 +74,22 @@ class Config {
} }
/** /**
* Gets a value from config.php * Returns a config value
* *
* If it does not exist, $default will be returned. * gets its value from an `OC_` prefixed environment variable
* if it doesn't exist from config.php
* if this doesn't exist either, it will return the given `$default`
* *
* @param string $key key * @param string $key key
* @param mixed $default = null default value * @param mixed $default = null default value
* @return mixed the value or $default * @return mixed the value or $default
*/ */
public function getValue($key, $default = null) { public function getValue($key, $default = null) {
$envValue = getenv(self::ENV_PREFIX . $key);
if ($envValue) {
return $envValue;
}
if (isset($this->cache[$key])) { if (isset($this->cache[$key])) {
return $this->cache[$key]; return $this->cache[$key];
} }

View File

@ -48,6 +48,12 @@ class ConfigTest extends TestCase {
$this->assertSame(array('Appenzeller', 'Guinness', 'Kölsch'), $this->config->getValue('beers')); $this->assertSame(array('Appenzeller', 'Guinness', 'Kölsch'), $this->config->getValue('beers'));
} }
public function testGetValueReturnsEnvironmentValueIfSet() {
$this->assertEquals('bar', $this->config->getValue('foo'));
putenv('OC_foo=baz');
$this->assertEquals('baz', $this->config->getValue('foo'));
}
public function testSetValue() { public function testSetValue() {
$this->config->setValue('foo', 'moo'); $this->config->setValue('foo', 'moo');
$expectedConfig = $this->initialConfig; $expectedConfig = $this->initialConfig;