|
|
|
@ -17,6 +17,7 @@ use OCP\Config\Lexicon\Entry; |
|
|
|
|
use OCP\Config\Lexicon\ILexicon; |
|
|
|
|
use OCP\Config\Lexicon\Preset; |
|
|
|
|
use OCP\Config\Lexicon\Strictness; |
|
|
|
|
use OCP\Config\ValueType; |
|
|
|
|
use OCP\DB\Exception as DBException; |
|
|
|
|
use OCP\DB\QueryBuilder\IQueryBuilder; |
|
|
|
|
use OCP\Exceptions\AppConfigIncorrectTypeException; |
|
|
|
@ -1094,6 +1095,49 @@ class AppConfig implements IAppConfig { |
|
|
|
|
]; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* @inheritDoc |
|
|
|
|
* |
|
|
|
|
* @param string $app id of the app |
|
|
|
|
* @param string $key config key |
|
|
|
|
* |
|
|
|
|
* @return array{app: string, key: string, lazy?: bool, valueType?: ValueType, valueTypeName?: string, sensitive?: bool, default?: string, definition?: string, note?: string} |
|
|
|
|
* @since 32.0.0 |
|
|
|
|
*/ |
|
|
|
|
public function getKeyDetails(string $app, string $key): array { |
|
|
|
|
$this->assertParams($app, $key); |
|
|
|
|
try { |
|
|
|
|
$details = $this->getDetails($app, $key); |
|
|
|
|
} catch (AppConfigUnknownKeyException $e) { |
|
|
|
|
$details = [ |
|
|
|
|
'app' => $app, |
|
|
|
|
'key' => $key |
|
|
|
|
]; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** @var Entry $lexiconEntry */ |
|
|
|
|
try { |
|
|
|
|
$lazy = false; |
|
|
|
|
$this->matchAndApplyLexiconDefinition($app, $key, $lazy, lexiconEntry: $lexiconEntry); |
|
|
|
|
} catch (AppConfigTypeConflictException|AppConfigUnknownKeyException) { |
|
|
|
|
// can be ignored |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if ($lexiconEntry !== null) { |
|
|
|
|
$details = array_merge($details, [ |
|
|
|
|
'lazy' => $lexiconEntry->isLazy(), |
|
|
|
|
'valueType' => $lexiconEntry->getValueType(), |
|
|
|
|
'valueTypeName' => $lexiconEntry->getValueType()->name, |
|
|
|
|
'sensitive' => $lexiconEntry->isFlagged(self::FLAG_SENSITIVE), |
|
|
|
|
'default' => $lexiconEntry->getDefault($this->getLexiconPreset()), |
|
|
|
|
'definition' => $lexiconEntry->getDefinition(), |
|
|
|
|
'note' => $lexiconEntry->getNote(), |
|
|
|
|
]); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return array_filter($details); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* @param string $type |
|
|
|
|
* |
|
|
|
@ -1631,6 +1675,7 @@ class AppConfig implements IAppConfig { |
|
|
|
|
?bool &$lazy = null, |
|
|
|
|
int &$type = self::VALUE_MIXED, |
|
|
|
|
?string &$default = null, |
|
|
|
|
?Entry &$lexiconEntry = null, |
|
|
|
|
): bool { |
|
|
|
|
if (in_array($key, |
|
|
|
|
[ |
|
|
|
@ -1655,27 +1700,27 @@ class AppConfig implements IAppConfig { |
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** @var Entry $configValue */ |
|
|
|
|
$configValue = $configDetails['entries'][$key]; |
|
|
|
|
/** @var Entry $lexiconEntry */ |
|
|
|
|
$lexiconEntry = $configDetails['entries'][$key]; |
|
|
|
|
$type &= ~self::VALUE_SENSITIVE; |
|
|
|
|
|
|
|
|
|
$appConfigValueType = $configValue->getValueType()->toAppConfigFlag(); |
|
|
|
|
$appConfigValueType = $lexiconEntry->getValueType()->toAppConfigFlag(); |
|
|
|
|
if ($type === self::VALUE_MIXED) { |
|
|
|
|
$type = $appConfigValueType; // we overwrite if value was requested as mixed |
|
|
|
|
} elseif ($appConfigValueType !== $type) { |
|
|
|
|
throw new AppConfigTypeConflictException('The app config key ' . $app . '/' . $key . ' is typed incorrectly in relation to the config lexicon'); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
$lazy = $configValue->isLazy(); |
|
|
|
|
$lazy = $lexiconEntry->isLazy(); |
|
|
|
|
// only look for default if needed, default from Lexicon got priority |
|
|
|
|
if ($default !== null) { |
|
|
|
|
$default = $configValue->getDefault($this->getLexiconPreset()) ?? $default; |
|
|
|
|
$default = $lexiconEntry->getDefault($this->getLexiconPreset()) ?? $default; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if ($configValue->isFlagged(self::FLAG_SENSITIVE)) { |
|
|
|
|
if ($lexiconEntry->isFlagged(self::FLAG_SENSITIVE)) { |
|
|
|
|
$type |= self::VALUE_SENSITIVE; |
|
|
|
|
} |
|
|
|
|
if ($configValue->isDeprecated()) { |
|
|
|
|
if ($lexiconEntry->isDeprecated()) { |
|
|
|
|
$this->logger->notice('App config key ' . $app . '/' . $key . ' is set as deprecated.'); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|