diff --git a/lib/private/Config.php b/lib/private/Config.php index 3cff3ca960d7..385b2496a0c3 100644 --- a/lib/private/Config.php +++ b/lib/private/Config.php @@ -38,6 +38,9 @@ * configuration file of ownCloud. */ class Config { + + const ENV_PREFIX = 'OC_'; + /** @var array Associative array ($key => $value) */ protected $cache = array(); /** @var string */ @@ -70,15 +73,22 @@ public function getKeys() { } /** - * 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]; } diff --git a/tests/lib/ConfigTest.php b/tests/lib/ConfigTest.php index 74dcdc192ceb..f7add114aa8a 100644 --- a/tests/lib/ConfigTest.php +++ b/tests/lib/ConfigTest.php @@ -48,6 +48,12 @@ public function testGetValue() { $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;