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.
*/
class Config {
const ENV_PREFIX = 'OC_';
/** @var array Associative array ($key => $value) */
protected $cache = array();
/** @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 mixed $default = null default value
* @return mixed the value or $default
*/
public function getValue($key, $default = null) {
$envValue = getenv(self::ENV_PREFIX . $key);
if ($envValue) {
return $envValue;
}
if (isset($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'));
}
public function testGetValueReturnsEnvironmentValueIfSet() {
$this->assertEquals('bar', $this->config->getValue('foo'));
putenv('OC_foo=baz');
$this->assertEquals('baz', $this->config->getValue('foo'));
}
public function testSetValue() {
$this->config->setValue('foo', 'moo');
$expectedConfig = $this->initialConfig;