fix(config): Add missing handling for envCache in getKeys()

NC_ env variable overrides were not appearing in
the output of `occ config:list system` nor `occ
config:system:get xxx`. This was creating nearly
impossible to diagnose configuration/ behavior
disprepancies.

- Refactored readData() so that we aren't saving
  the entire environment in the envCache anymore
  (only those prefixed "NC_") and so that we save
  NC_ provided config values under their real
  key.
- Refactored getValue() to accommodate readData()
  refactor
- Fixed getKeys() to properly return
  envCache keys too

Environment provided config variables now appear
in `occ config:list system` as expected.

Environment provided config variables now appear
when queried via `occ config:system:get KEY`

envCache is now free of non-NC stuff.

Signed-off-by: Josh Richards <josh.t.richards@gmail.com>
This commit is contained in:
Josh Richards 2024-06-26 09:31:44 -04:00 committed by Josh
parent 7b60b989b0
commit 62192ca57a

View file

@ -49,7 +49,7 @@ class Config {
* @return array an array of key names
*/
public function getKeys() {
return array_keys($this->cache);
return array_merge(array_keys($this->cache), array_keys($this->envCache));
}
/**
@ -64,9 +64,8 @@ class Config {
* @return mixed the value or $default
*/
public function getValue($key, $default = null) {
$envKey = self::ENV_PREFIX . $key;
if (isset($this->envCache[$envKey])) {
return $this->envCache[$envKey];
if (isset($this->envCache[$key])) {
return $this->envCache[$key];
}
if (isset($this->cache[$key])) {
@ -226,7 +225,15 @@ class Config {
}
}
$this->envCache = getenv();
// grab any "NC_" environment variables
$envRaw = getenv();
// only save environment variables prefixed with "NC_" in the cache
foreach ($envRaw as $rawEnvKey => $rawEnvValue) {
if (str_starts_with($rawEnvKey, self::ENV_PREFIX)) {
$realKey = explode(self::ENV_PREFIX, $rawEnvKey)[1];
$this->envCache[$realKey] = $rawEnvValue;
}
}
}
/**