feat(lexicon): moving out from unstable

Signed-off-by: Maxence Lange <maxence@artificial-owl.com>
This commit is contained in:
Maxence Lange 2025-07-16 12:46:45 -01:00
parent cb410cd368
commit 33bff30e1d
34 changed files with 444 additions and 443 deletions

View file

@ -8,30 +8,30 @@ declare(strict_types=1);
namespace OCA\Files_External;
use NCU\Config\Lexicon\ConfigLexiconEntry;
use NCU\Config\Lexicon\ConfigLexiconStrictness;
use NCU\Config\Lexicon\IConfigLexicon;
use NCU\Config\ValueType;
use OCP\Config\Lexicon\Entry;
use OCP\Config\Lexicon\ILexicon;
use OCP\Config\Lexicon\Strictness;
use OCP\Config\ValueType;
/**
* Config Lexicon for files_sharing.
*
* Please Add & Manage your Config Keys in that file and keep the Lexicon up to date!
*
* {@see IConfigLexicon}
* {@see ILexicon}
*/
class ConfigLexicon implements IConfigLexicon {
class ConfigLexicon implements ILexicon {
public const ALLOW_USER_MOUNTING = 'allow_user_mounting';
public const USER_MOUNTING_BACKENDS = 'user_mounting_backends';
public function getStrictness(): ConfigLexiconStrictness {
return ConfigLexiconStrictness::NOTICE;
public function getStrictness(): Strictness {
return Strictness::NOTICE;
}
public function getAppConfigs(): array {
return [
new ConfigLexiconEntry(self::ALLOW_USER_MOUNTING, ValueType::BOOL, false, 'allow users to mount their own external filesystems', true),
new ConfigLexiconEntry(self::USER_MOUNTING_BACKENDS, ValueType::STRING, '', 'list of mounting backends available for users', true),
new Entry(self::ALLOW_USER_MOUNTING, ValueType::BOOL, false, 'allow users to mount their own external filesystems', true),
new Entry(self::USER_MOUNTING_BACKENDS, ValueType::STRING, '', 'list of mounting backends available for users', true),
];
}

View file

@ -8,28 +8,28 @@ declare(strict_types=1);
namespace OCA\Files_Sharing\Config;
use NCU\Config\Lexicon\ConfigLexiconEntry;
use NCU\Config\Lexicon\ConfigLexiconStrictness;
use NCU\Config\Lexicon\IConfigLexicon;
use NCU\Config\ValueType;
use OCP\Config\Lexicon\Entry;
use OCP\Config\Lexicon\ILexicon;
use OCP\Config\Lexicon\Strictness;
use OCP\Config\ValueType;
/**
* Config Lexicon for files_sharing.
*
* Please Add & Manage your Config Keys in that file and keep the Lexicon up to date!
*
* {@see IConfigLexicon}
* {@see ILexicon}
*/
class ConfigLexicon implements IConfigLexicon {
class ConfigLexicon implements ILexicon {
public const SHOW_FEDERATED_AS_INTERNAL = 'show_federated_shares_as_internal';
public function getStrictness(): ConfigLexiconStrictness {
return ConfigLexiconStrictness::IGNORE;
public function getStrictness(): Strictness {
return Strictness::IGNORE;
}
public function getAppConfigs(): array {
return [
new ConfigLexiconEntry(self::SHOW_FEDERATED_AS_INTERNAL, ValueType::BOOL, false, 'shows federated shares as internal shares', true),
new Entry(self::SHOW_FEDERATED_AS_INTERNAL, ValueType::BOOL, false, 'shows federated shares as internal shares', true),
];
}

View file

@ -9,9 +9,9 @@ declare(strict_types=1);
namespace OCA\Theming\Tests\Migration;
use NCU\Config\IUserConfig;
use OCA\Theming\Migration\Version2006Date20240905111627;
use OCP\BackgroundJob\IJobList;
use OCP\Config\IUserConfig;
use OCP\IAppConfig;
use OCP\IDBConnection;
use OCP\IUserManager;

View file

@ -8,9 +8,9 @@ declare(strict_types=1);
*/
namespace OC\Core\Command\Config;
use NCU\Config\Lexicon\Preset as ConfigLexiconPreset;
use OC\Config\ConfigManager;
use OC\Core\Command\Base;
use OCP\Config\Lexicon\Preset as ConfigLexiconPreset;
use OCP\IConfig;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputInterface;

View file

@ -7,15 +7,6 @@ $baseDir = dirname(dirname($vendorDir));
return array(
'Composer\\InstalledVersions' => $vendorDir . '/composer/InstalledVersions.php',
'NCU\\Config\\Exceptions\\IncorrectTypeException' => $baseDir . '/lib/unstable/Config/Exceptions/IncorrectTypeException.php',
'NCU\\Config\\Exceptions\\TypeConflictException' => $baseDir . '/lib/unstable/Config/Exceptions/TypeConflictException.php',
'NCU\\Config\\Exceptions\\UnknownKeyException' => $baseDir . '/lib/unstable/Config/Exceptions/UnknownKeyException.php',
'NCU\\Config\\IUserConfig' => $baseDir . '/lib/unstable/Config/IUserConfig.php',
'NCU\\Config\\Lexicon\\ConfigLexiconEntry' => $baseDir . '/lib/unstable/Config/Lexicon/ConfigLexiconEntry.php',
'NCU\\Config\\Lexicon\\ConfigLexiconStrictness' => $baseDir . '/lib/unstable/Config/Lexicon/ConfigLexiconStrictness.php',
'NCU\\Config\\Lexicon\\IConfigLexicon' => $baseDir . '/lib/unstable/Config/Lexicon/IConfigLexicon.php',
'NCU\\Config\\Lexicon\\Preset' => $baseDir . '/lib/unstable/Config/Lexicon/Preset.php',
'NCU\\Config\\ValueType' => $baseDir . '/lib/unstable/Config/ValueType.php',
'NCU\\Federation\\ISignedCloudFederationProvider' => $baseDir . '/lib/unstable/Federation/ISignedCloudFederationProvider.php',
'NCU\\Security\\Signature\\Enum\\DigestAlgorithm' => $baseDir . '/lib/unstable/Security/Signature/Enum/DigestAlgorithm.php',
'NCU\\Security\\Signature\\Enum\\SignatoryStatus' => $baseDir . '/lib/unstable/Security/Signature/Enum/SignatoryStatus.php',
@ -275,6 +266,15 @@ return array(
'OCP\\Common\\Exception\\NotFoundException' => $baseDir . '/lib/public/Common/Exception/NotFoundException.php',
'OCP\\Config\\BeforePreferenceDeletedEvent' => $baseDir . '/lib/public/Config/BeforePreferenceDeletedEvent.php',
'OCP\\Config\\BeforePreferenceSetEvent' => $baseDir . '/lib/public/Config/BeforePreferenceSetEvent.php',
'OCP\\Config\\Exceptions\\IncorrectTypeException' => $baseDir . '/lib/public/Config/Exceptions/IncorrectTypeException.php',
'OCP\\Config\\Exceptions\\TypeConflictException' => $baseDir . '/lib/public/Config/Exceptions/TypeConflictException.php',
'OCP\\Config\\Exceptions\\UnknownKeyException' => $baseDir . '/lib/public/Config/Exceptions/UnknownKeyException.php',
'OCP\\Config\\IUserConfig' => $baseDir . '/lib/public/Config/IUserConfig.php',
'OCP\\Config\\Lexicon\\Entry' => $baseDir . '/lib/public/Config/Lexicon/Entry.php',
'OCP\\Config\\Lexicon\\ILexicon' => $baseDir . '/lib/public/Config/Lexicon/ILexicon.php',
'OCP\\Config\\Lexicon\\Preset' => $baseDir . '/lib/public/Config/Lexicon/Preset.php',
'OCP\\Config\\Lexicon\\Strictness' => $baseDir . '/lib/public/Config/Lexicon/Strictness.php',
'OCP\\Config\\ValueType' => $baseDir . '/lib/public/Config/ValueType.php',
'OCP\\Console\\ConsoleEvent' => $baseDir . '/lib/public/Console/ConsoleEvent.php',
'OCP\\Console\\ReservedOptions' => $baseDir . '/lib/public/Console/ReservedOptions.php',
'OCP\\Constants' => $baseDir . '/lib/public/Constants.php',

View file

@ -48,15 +48,6 @@ class ComposerStaticInit749170dad3f5e7f9ca158f5a9f04f6a2
public static $classMap = array (
'Composer\\InstalledVersions' => __DIR__ . '/..' . '/composer/InstalledVersions.php',
'NCU\\Config\\Exceptions\\IncorrectTypeException' => __DIR__ . '/../../..' . '/lib/unstable/Config/Exceptions/IncorrectTypeException.php',
'NCU\\Config\\Exceptions\\TypeConflictException' => __DIR__ . '/../../..' . '/lib/unstable/Config/Exceptions/TypeConflictException.php',
'NCU\\Config\\Exceptions\\UnknownKeyException' => __DIR__ . '/../../..' . '/lib/unstable/Config/Exceptions/UnknownKeyException.php',
'NCU\\Config\\IUserConfig' => __DIR__ . '/../../..' . '/lib/unstable/Config/IUserConfig.php',
'NCU\\Config\\Lexicon\\ConfigLexiconEntry' => __DIR__ . '/../../..' . '/lib/unstable/Config/Lexicon/ConfigLexiconEntry.php',
'NCU\\Config\\Lexicon\\ConfigLexiconStrictness' => __DIR__ . '/../../..' . '/lib/unstable/Config/Lexicon/ConfigLexiconStrictness.php',
'NCU\\Config\\Lexicon\\IConfigLexicon' => __DIR__ . '/../../..' . '/lib/unstable/Config/Lexicon/IConfigLexicon.php',
'NCU\\Config\\Lexicon\\Preset' => __DIR__ . '/../../..' . '/lib/unstable/Config/Lexicon/Preset.php',
'NCU\\Config\\ValueType' => __DIR__ . '/../../..' . '/lib/unstable/Config/ValueType.php',
'NCU\\Federation\\ISignedCloudFederationProvider' => __DIR__ . '/../../..' . '/lib/unstable/Federation/ISignedCloudFederationProvider.php',
'NCU\\Security\\Signature\\Enum\\DigestAlgorithm' => __DIR__ . '/../../..' . '/lib/unstable/Security/Signature/Enum/DigestAlgorithm.php',
'NCU\\Security\\Signature\\Enum\\SignatoryStatus' => __DIR__ . '/../../..' . '/lib/unstable/Security/Signature/Enum/SignatoryStatus.php',
@ -316,6 +307,15 @@ class ComposerStaticInit749170dad3f5e7f9ca158f5a9f04f6a2
'OCP\\Common\\Exception\\NotFoundException' => __DIR__ . '/../../..' . '/lib/public/Common/Exception/NotFoundException.php',
'OCP\\Config\\BeforePreferenceDeletedEvent' => __DIR__ . '/../../..' . '/lib/public/Config/BeforePreferenceDeletedEvent.php',
'OCP\\Config\\BeforePreferenceSetEvent' => __DIR__ . '/../../..' . '/lib/public/Config/BeforePreferenceSetEvent.php',
'OCP\\Config\\Exceptions\\IncorrectTypeException' => __DIR__ . '/../../..' . '/lib/public/Config/Exceptions/IncorrectTypeException.php',
'OCP\\Config\\Exceptions\\TypeConflictException' => __DIR__ . '/../../..' . '/lib/public/Config/Exceptions/TypeConflictException.php',
'OCP\\Config\\Exceptions\\UnknownKeyException' => __DIR__ . '/../../..' . '/lib/public/Config/Exceptions/UnknownKeyException.php',
'OCP\\Config\\IUserConfig' => __DIR__ . '/../../..' . '/lib/public/Config/IUserConfig.php',
'OCP\\Config\\Lexicon\\Entry' => __DIR__ . '/../../..' . '/lib/public/Config/Lexicon/Entry.php',
'OCP\\Config\\Lexicon\\ILexicon' => __DIR__ . '/../../..' . '/lib/public/Config/Lexicon/ILexicon.php',
'OCP\\Config\\Lexicon\\Preset' => __DIR__ . '/../../..' . '/lib/public/Config/Lexicon/Preset.php',
'OCP\\Config\\Lexicon\\Strictness' => __DIR__ . '/../../..' . '/lib/public/Config/Lexicon/Strictness.php',
'OCP\\Config\\ValueType' => __DIR__ . '/../../..' . '/lib/public/Config/ValueType.php',
'OCP\\Console\\ConsoleEvent' => __DIR__ . '/../../..' . '/lib/public/Console/ConsoleEvent.php',
'OCP\\Console\\ReservedOptions' => __DIR__ . '/../../..' . '/lib/public/Console/ReservedOptions.php',
'OCP\\Constants' => __DIR__ . '/../../..' . '/lib/public/Constants.php',

View file

@ -19,8 +19,7 @@ if ($issues) {
echo 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . str_replace('You are running '.PHP_VERSION.'.', '', implode(PHP_EOL, $issues)) . PHP_EOL.PHP_EOL;
}
}
trigger_error(
'Composer detected issues in your platform: ' . implode(' ', $issues),
E_USER_ERROR
throw new \RuntimeException(
'Composer detected issues in your platform: ' . implode(' ', $issues)
);
}

View file

@ -7,11 +7,11 @@
*/
namespace OC;
use NCU\Config\Exceptions\TypeConflictException;
use NCU\Config\IUserConfig;
use NCU\Config\ValueType;
use OC\Config\UserConfig;
use OCP\Cache\CappedMemoryCache;
use OCP\Config\Exceptions\TypeConflictException;
use OCP\Config\IUserConfig;
use OCP\Config\ValueType;
use OCP\IConfig;
use OCP\IDBConnection;
use OCP\PreConditionNotMetException;

View file

@ -11,12 +11,12 @@ namespace OC;
use InvalidArgumentException;
use JsonException;
use NCU\Config\Lexicon\ConfigLexiconEntry;
use NCU\Config\Lexicon\ConfigLexiconStrictness;
use NCU\Config\Lexicon\IConfigLexicon;
use NCU\Config\Lexicon\Preset;
use OC\AppFramework\Bootstrap\Coordinator;
use OC\Config\ConfigManager;
use OCP\Config\Lexicon\Entry;
use OCP\Config\Lexicon\ILexicon;
use OCP\Config\Lexicon\Preset;
use OCP\Config\Lexicon\Strictness;
use OCP\DB\Exception as DBException;
use OCP\DB\QueryBuilder\IQueryBuilder;
use OCP\Exceptions\AppConfigIncorrectTypeException;
@ -62,7 +62,7 @@ class AppConfig implements IAppConfig {
private array $valueTypes = []; // type for all config values
private bool $fastLoaded = false;
private bool $lazyLoaded = false;
/** @var array<string, array{entries: array<string, ConfigLexiconEntry>, aliases: array<string, string>, strictness: ConfigLexiconStrictness}> ['app_id' => ['strictness' => ConfigLexiconStrictness, 'entries' => ['config_key' => ConfigLexiconEntry[]]] */
/** @var array<string, array{entries: array<string, Entry>, aliases: array<string, string>, strictness: Strictness}> ['app_id' => ['strictness' => ConfigLexiconStrictness, 'entries' => ['config_key' => ConfigLexiconEntry[]]] */
private array $configLexiconDetails = [];
private bool $ignoreLexiconAliases = false;
private ?Preset $configLexiconPreset = null;
@ -1655,7 +1655,7 @@ class AppConfig implements IAppConfig {
return true;
}
/** @var ConfigLexiconEntry $configValue */
/** @var Entry $configValue */
$configValue = $configDetails['entries'][$key];
$type &= ~self::VALUE_SENSITIVE;
@ -1685,15 +1685,15 @@ class AppConfig implements IAppConfig {
/**
* manage ConfigLexicon behavior based on strictness set in IConfigLexicon
*
* @param ConfigLexiconStrictness|null $strictness
* @param Strictness|null $strictness
* @param string $line
*
* @return bool TRUE if conflict can be fully ignored, FALSE if action should be not performed
* @throws AppConfigUnknownKeyException if strictness implies exception
* @see IConfigLexicon::getStrictness()
* @see ILexicon::getStrictness()
*/
private function applyLexiconStrictness(
?ConfigLexiconStrictness $strictness,
?Strictness $strictness,
string $line = '',
): bool {
if ($strictness === null) {
@ -1701,12 +1701,12 @@ class AppConfig implements IAppConfig {
}
switch ($strictness) {
case ConfigLexiconStrictness::IGNORE:
case Strictness::IGNORE:
return true;
case ConfigLexiconStrictness::NOTICE:
case Strictness::NOTICE:
$this->logger->notice($line);
return true;
case ConfigLexiconStrictness::WARNING:
case Strictness::WARNING:
$this->logger->warning($line);
return false;
}
@ -1720,7 +1720,7 @@ class AppConfig implements IAppConfig {
* @param string $appId
* @internal
*
* @return array{entries: array<string, ConfigLexiconEntry>, aliases: array<string, string>, strictness: ConfigLexiconStrictness}
* @return array{entries: array<string, Entry>, aliases: array<string, string>, strictness: Strictness}
*/
public function getConfigDetailsFromLexicon(string $appId): array {
if (!array_key_exists($appId, $this->configLexiconDetails)) {
@ -1737,14 +1737,14 @@ class AppConfig implements IAppConfig {
$this->configLexiconDetails[$appId] = [
'entries' => $entries,
'aliases' => $aliases,
'strictness' => $configLexicon?->getStrictness() ?? ConfigLexiconStrictness::IGNORE
'strictness' => $configLexicon?->getStrictness() ?? Strictness::IGNORE
];
}
return $this->configLexiconDetails[$appId];
}
private function getLexiconEntry(string $appId, string $key): ?ConfigLexiconEntry {
private function getLexiconEntry(string $appId, string $key): ?Entry {
return $this->getConfigDetailsFromLexicon($appId)['entries'][$key] ?? null;
}

View file

@ -10,7 +10,6 @@ declare(strict_types=1);
namespace OC\AppFramework\Bootstrap;
use Closure;
use NCU\Config\Lexicon\IConfigLexicon;
use OC\Config\Lexicon\CoreConfigLexicon;
use OC\Support\CrashReport\Registry;
use OCP\AppFramework\App;
@ -23,6 +22,7 @@ use OCP\Calendar\Resource\IBackend as IResourceBackend;
use OCP\Calendar\Room\IBackend as IRoomBackend;
use OCP\Capabilities\ICapability;
use OCP\Collaboration\Reference\IReferenceProvider;
use OCP\Config\Lexicon\ILexicon;
use OCP\Dashboard\IManager;
use OCP\Dashboard\IWidget;
use OCP\EventDispatcher\IEventDispatcher;
@ -652,7 +652,7 @@ class RegistrationContext {
}
/**
* @psalm-param class-string<IConfigLexicon> $configLexiconClass
* @psalm-param class-string<ILexicon> $configLexiconClass
*/
public function registerConfigLexicon(string $appId, string $configLexiconClass): void {
$this->configLexiconClasses[$appId] = $configLexiconClass;
@ -1023,9 +1023,9 @@ class RegistrationContext {
*
* @param string $appId
*
* @return IConfigLexicon|null
* @return ILexicon|null
*/
public function getConfigLexicon(string $appId): ?IConfigLexicon {
public function getConfigLexicon(string $appId): ?ILexicon {
if (!array_key_exists($appId, $this->configLexiconClasses)) {
return null;
}

View file

@ -9,13 +9,13 @@ declare(strict_types=1);
namespace OC\Config;
use JsonException;
use NCU\Config\Exceptions\TypeConflictException;
use NCU\Config\IUserConfig;
use NCU\Config\Lexicon\ConfigLexiconEntry;
use NCU\Config\Lexicon\Preset;
use NCU\Config\ValueType;
use OC\AppConfig;
use OCP\App\IAppManager;
use OCP\Config\Exceptions\TypeConflictException;
use OCP\Config\IUserConfig;
use OCP\Config\Lexicon\Entry;
use OCP\Config\Lexicon\Preset;
use OCP\Config\ValueType;
use OCP\IAppConfig;
use OCP\IConfig;
use OCP\Server;
@ -50,10 +50,11 @@ class ConfigManager {
*
* This method should be mainly called during a new upgrade or when a new app is enabled.
*
* @see ConfigLexiconEntry
* @param string|null $appId when set to NULL the method will be executed for all enabled apps of the instance
*
* @internal
* @since 32.0.0
* @param string|null $appId when set to NULL the method will be executed for all enabled apps of the instance
* @see Entry
*/
public function migrateConfigLexiconKeys(?string $appId = null): void {
if ($appId === null) {
@ -166,7 +167,7 @@ class ConfigManager {
*
* @throws TypeConflictException if previous value does not fit the expected type
*/
private function migrateAppConfigValue(string $appId, ConfigLexiconEntry $entry): void {
private function migrateAppConfigValue(string $appId, Entry $entry): void {
$value = $this->appConfig->getValueMixed($appId, $entry->getRename(), lazy: null);
switch ($entry->getValueType()) {
case ValueType::STRING:
@ -196,7 +197,7 @@ class ConfigManager {
*
* @throws TypeConflictException if previous value does not fit the expected type
*/
private function migrateUserConfigValue(string $userId, string $appId, ConfigLexiconEntry $entry): void {
private function migrateUserConfigValue(string $userId, string $appId, Entry $entry): void {
$value = $this->userConfig->getValueMixed($userId, $appId, $entry->getRename(), lazy: null);
switch ($entry->getValueType()) {
case ValueType::STRING:
@ -237,7 +238,7 @@ class ConfigManager {
return (float)$value;
}
public function convertToBool(string $value, ?ConfigLexiconEntry $entry = null): bool {
public function convertToBool(string $value, ?Entry $entry = null): bool {
if (in_array(strtolower($value), ['true', '1', 'on', 'yes'])) {
$valueBool = true;
} elseif (in_array(strtolower($value), ['false', '0', 'off', 'no'])) {
@ -245,7 +246,7 @@ class ConfigManager {
} else {
throw new TypeConflictException('Value cannot be converted to boolean');
}
if ($entry?->hasOption(ConfigLexiconEntry::RENAME_INVERT_BOOLEAN) === true) {
if ($entry?->hasOption(Entry::RENAME_INVERT_BOOLEAN) === true) {
$valueBool = !$valueBool;
}

View file

@ -8,36 +8,36 @@ declare(strict_types=1);
namespace OC\Config\Lexicon;
use NCU\Config\Lexicon\ConfigLexiconEntry;
use NCU\Config\Lexicon\ConfigLexiconStrictness;
use NCU\Config\Lexicon\IConfigLexicon;
use NCU\Config\ValueType;
use OCP\Config\Lexicon\Entry;
use OCP\Config\Lexicon\ILexicon;
use OCP\Config\Lexicon\Strictness;
use OCP\Config\ValueType;
/**
* ConfigLexicon for 'core' app/user configs
*/
class CoreConfigLexicon implements IConfigLexicon {
public function getStrictness(): ConfigLexiconStrictness {
return ConfigLexiconStrictness::IGNORE;
class CoreConfigLexicon implements ILexicon {
public function getStrictness(): Strictness {
return Strictness::IGNORE;
}
/**
* @inheritDoc
* @return ConfigLexiconEntry[]
* @return Entry[]
*/
public function getAppConfigs(): array {
return [
new ConfigLexiconEntry('lastcron', ValueType::INT, 0, 'timestamp of last cron execution'),
new Entry('lastcron', ValueType::INT, 0, 'timestamp of last cron execution'),
];
}
/**
* @inheritDoc
* @return ConfigLexiconEntry[]
* @return Entry[]
*/
public function getUserConfigs(): array {
return [
new ConfigLexiconEntry('lang', ValueType::STRING, null, 'language'),
new Entry('lang', ValueType::STRING, null, 'language'),
];
}
}

View file

@ -11,15 +11,16 @@ namespace OC\Config;
use Generator;
use InvalidArgumentException;
use JsonException;
use NCU\Config\Exceptions\IncorrectTypeException;
use NCU\Config\Exceptions\TypeConflictException;
use NCU\Config\Exceptions\UnknownKeyException;
use NCU\Config\IUserConfig;
use NCU\Config\Lexicon\ConfigLexiconEntry;
use NCU\Config\Lexicon\ConfigLexiconStrictness;
use NCU\Config\Lexicon\Preset;
use NCU\Config\ValueType;
use OC\AppFramework\Bootstrap\Coordinator;
use OCP\Config\Exceptions\IncorrectTypeException;
use OCP\Config\Exceptions\TypeConflictException;
use OCP\Config\Exceptions\UnknownKeyException;
use OCP\Config\IUserConfig;
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\IResult;
use OCP\DB\QueryBuilder\IQueryBuilder;
@ -64,7 +65,7 @@ class UserConfig implements IUserConfig {
private array $fastLoaded = [];
/** @var array<string, boolean> ['user_id' => bool] */
private array $lazyLoaded = [];
/** @var array<string, array{entries: array<string, ConfigLexiconEntry>, aliases: array<string, string>, strictness: ConfigLexiconStrictness}> ['app_id' => ['strictness' => ConfigLexiconStrictness, 'entries' => ['config_key' => ConfigLexiconEntry[]]] */
/** @var array<string, array{entries: array<string, Entry>, aliases: array<string, string>, strictness: Strictness}> ['app_id' => ['strictness' => ConfigLexiconStrictness, 'entries' => ['config_key' => ConfigLexiconEntry[]]] */
private array $configLexiconDetails = [];
private bool $ignoreLexiconAliases = false;
private ?Preset $configLexiconPreset = null;
@ -1913,7 +1914,7 @@ class UserConfig implements IUserConfig {
return true;
}
/** @var ConfigLexiconEntry $configValue */
/** @var Entry $configValue */
$configValue = $configDetails['entries'][$key];
if ($type === ValueType::MIXED) {
// we overwrite if value was requested as mixed
@ -1954,7 +1955,7 @@ class UserConfig implements IUserConfig {
*
* The entry is converted to string to fit the expected type when managing default value
*/
private function getSystemDefault(string $appId, ConfigLexiconEntry $configValue): ?string {
private function getSystemDefault(string $appId, Entry $configValue): ?string {
$default = $this->config->getSystemValue('lexicon.default.userconfig', [])[$appId][$configValue->getKey()] ?? null;
if ($default === null) {
// no system default, using default default.
@ -1967,28 +1968,28 @@ class UserConfig implements IUserConfig {
/**
* manage ConfigLexicon behavior based on strictness set in IConfigLexicon
*
* @see IConfigLexicon::getStrictness()
* @param ConfigLexiconStrictness|null $strictness
* @param Strictness|null $strictness
* @param string $line
*
* @return bool TRUE if conflict can be fully ignored
* @throws UnknownKeyException
*@see ILexicon::getStrictness()
*/
private function applyLexiconStrictness(?ConfigLexiconStrictness $strictness, string $line = ''): bool {
private function applyLexiconStrictness(?Strictness $strictness, string $line = ''): bool {
if ($strictness === null) {
return true;
}
switch ($strictness) {
case ConfigLexiconStrictness::IGNORE:
case Strictness::IGNORE:
return true;
case ConfigLexiconStrictness::NOTICE:
case Strictness::NOTICE:
$this->logger->notice($line);
return true;
case ConfigLexiconStrictness::WARNING:
case Strictness::WARNING:
$this->logger->warning($line);
return false;
case ConfigLexiconStrictness::EXCEPTION:
case Strictness::EXCEPTION:
throw new UnknownKeyException($line);
}
@ -1999,9 +2000,10 @@ class UserConfig implements IUserConfig {
* extract details from registered $appId's config lexicon
*
* @param string $appId
* @internal
*
* @return array{entries: array<string, ConfigLexiconEntry>, aliases: array<string, string>, strictness: ConfigLexiconStrictness}
* @return array{entries: array<string, Entry>, aliases: array<string, string>, strictness: Strictness}
*@internal
*
*/
public function getConfigDetailsFromLexicon(string $appId): array {
if (!array_key_exists($appId, $this->configLexiconDetails)) {
@ -2018,14 +2020,14 @@ class UserConfig implements IUserConfig {
$this->configLexiconDetails[$appId] = [
'entries' => $entries,
'aliases' => $aliases,
'strictness' => $configLexicon?->getStrictness() ?? ConfigLexiconStrictness::IGNORE
'strictness' => $configLexicon?->getStrictness() ?? Strictness::IGNORE
];
}
return $this->configLexiconDetails[$appId];
}
private function getLexiconEntry(string $appId, string $key): ?ConfigLexiconEntry {
private function getLexiconEntry(string $appId, string $key): ?Entry {
return $this->getConfigDetailsFromLexicon($appId)['entries'][$key] ?? null;
}

View file

@ -8,7 +8,6 @@
namespace OC;
use bantu\IniGetWrapper\IniGetWrapper;
use NCU\Config\IUserConfig;
use NCU\Security\Signature\ISignatureManager;
use OC\Accounts\AccountManager;
use OC\App\AppManager;
@ -139,6 +138,7 @@ use OCP\BackgroundJob\IJobList;
use OCP\Collaboration\Reference\IReferenceManager;
use OCP\Command\IBus;
use OCP\Comments\ICommentsManager;
use OCP\Config\IUserConfig;
use OCP\Contacts\ContactsMenu\IActionFactory;
use OCP\Contacts\ContactsMenu\IContactsStore;
use OCP\Defaults;
@ -163,7 +163,6 @@ use OCP\Files\Storage\IStorageFactory;
use OCP\Files\Template\ITemplateManager;
use OCP\FilesMetadata\IFilesMetadataManager;
use OCP\FullTextSearch\IFullTextSearchManager;
use OCP\GlobalScale\IConfig;
use OCP\Group\ISubAdmin;
use OCP\Http\Client\IClientService;
use OCP\IAppConfig;

View file

@ -443,7 +443,7 @@ interface IRegistrationContext {
*
* @param string $configLexiconClass
*
* @psalm-param class-string<\NCU\Config\Lexicon\IConfigLexicon> $configLexiconClass
* @psalm-param class-string<\OCP\Config\Lexicon\ILexicon> $configLexiconClass
* @since 31.0.0
*/
public function registerConfigLexicon(string $configLexiconClass): void;

View file

@ -6,12 +6,12 @@ declare(strict_types=1);
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
namespace NCU\Config\Exceptions;
namespace OCP\Config\Exceptions;
use Exception;
/**
* @experimental 31.0.0
* @since 32.0.0
*/
class IncorrectTypeException extends Exception {
}

View file

@ -6,12 +6,12 @@ declare(strict_types=1);
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
namespace NCU\Config\Exceptions;
namespace OCP\Config\Exceptions;
use Exception;
/**
* @experimental 31.0.0
* @since 32.0.0
*/
class TypeConflictException extends Exception {
}

View file

@ -6,12 +6,12 @@ declare(strict_types=1);
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
namespace NCU\Config\Exceptions;
namespace OCP\Config\Exceptions;
use Exception;
/**
* @experimental 31.0.0
* @since 32.0.0
*/
class UnknownKeyException extends Exception {
}

View file

@ -6,11 +6,11 @@ declare(strict_types=1);
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
namespace NCU\Config;
namespace OCP\Config;
use Generator;
use NCU\Config\Exceptions\IncorrectTypeException;
use NCU\Config\Exceptions\UnknownKeyException;
use OCP\Config\Exceptions\IncorrectTypeException;
use OCP\Config\Exceptions\UnknownKeyException;
/**
* This class provides an easy way for apps to store user config in the
@ -27,15 +27,15 @@ use NCU\Config\Exceptions\UnknownKeyException;
* lazy loading. Use them wisely and only on parts of the code that are called
* during specific requests or actions to avoid loading the lazy values all the time.
*
* @experimental 31.0.0
* @since 32.0.0
*/
interface IUserConfig {
/**
* @experimental 31.0.0
* @since 32.0.0
*/
public const FLAG_SENSITIVE = 1; // value is sensitive
/**
* @experimental 31.0.0
* @since 32.0.0
*/
public const FLAG_INDEXED = 2; // value should be indexed
@ -49,7 +49,7 @@ interface IUserConfig {
*
* @return list<string> list of userIds
*
* @experimental 31.0.0
* @since 32.0.0
*/
public function getUserIds(string $appId = ''): array;
@ -63,7 +63,7 @@ interface IUserConfig {
*
* @return list<string> list of app ids
*
* @experimental 31.0.0
* @since 32.0.0
*/
public function getApps(string $userId): array;
@ -78,7 +78,7 @@ interface IUserConfig {
*
* @return list<string> list of stored config keys
*
* @experimental 31.0.0
* @since 32.0.0
*/
public function getKeys(string $userId, string $app): array;
@ -92,7 +92,7 @@ interface IUserConfig {
*
* @return bool TRUE if key exists
*
* @experimental 31.0.0
* @since 32.0.0
*/
public function hasKey(string $userId, string $app, string $key, ?bool $lazy = false): bool;
@ -107,7 +107,7 @@ interface IUserConfig {
* @return bool TRUE if value is sensitive
* @throws UnknownKeyException if config key is not known
*
* @experimental 31.0.0
* @since 32.0.0
*/
public function isSensitive(string $userId, string $app, string $key, ?bool $lazy = false): bool;
@ -127,7 +127,7 @@ interface IUserConfig {
* @return bool TRUE if value is sensitive
* @throws UnknownKeyException if config key is not known
*
* @experimental 31.0.0
* @since 32.0.0
*/
public function isIndexed(string $userId, string $app, string $key, ?bool $lazy = false): bool;
@ -144,7 +144,7 @@ interface IUserConfig {
* @throws UnknownKeyException if config key is not known
* @see IUserConfig for details about lazy loading
*
* @experimental 31.0.0
* @since 32.0.0
*/
public function isLazy(string $userId, string $app, string $key): bool;
@ -161,7 +161,7 @@ interface IUserConfig {
*
* @return array<string, string|int|float|bool|array> [key => value]
*
* @experimental 31.0.0
* @since 32.0.0
*/
public function getValues(string $userId, string $app, string $prefix = '', bool $filtered = false): array;
@ -176,7 +176,7 @@ interface IUserConfig {
*
* @return array<string, string|int|float|bool|array> [key => value]
*
* @experimental 31.0.0
* @since 32.0.0
*/
public function getAllValues(string $userId, bool $filtered = false): array;
@ -191,7 +191,7 @@ interface IUserConfig {
*
* @return array<string, string|int|float|bool|array> [appId => value]
*
* @experimental 31.0.0
* @since 32.0.0
*/
public function getValuesByApps(string $userId, string $key, bool $lazy = false, ?ValueType $typedAs = null): array;
@ -208,7 +208,7 @@ interface IUserConfig {
*
* @return array<string, string|int|float|bool|array> [userId => value]
*
* @experimental 31.0.0
* @since 32.0.0
*/
public function getValuesByUsers(string $app, string $key, ?ValueType $typedAs = null, ?array $userIds = null): array;
@ -225,7 +225,7 @@ interface IUserConfig {
*
* @return Generator<string>
*
* @experimental 31.0.0
* @since 32.0.0
*/
public function searchUsersByValueString(string $app, string $key, string $value, bool $caseInsensitive = false): Generator;
@ -241,7 +241,7 @@ interface IUserConfig {
*
* @return Generator<string>
*
* @experimental 31.0.0
* @since 32.0.0
*/
public function searchUsersByValueInt(string $app, string $key, int $value): Generator;
@ -257,7 +257,7 @@ interface IUserConfig {
*
* @return Generator<string>
*
* @experimental 31.0.0
* @since 32.0.0
*/
public function searchUsersByValues(string $app, string $key, array $values): Generator;
@ -273,7 +273,7 @@ interface IUserConfig {
*
* @return Generator<string>
*
* @experimental 31.0.0
* @since 32.0.0
*/
public function searchUsersByValueBool(string $app, string $key, bool $value): Generator;
@ -290,7 +290,7 @@ interface IUserConfig {
*
* @return string stored config value or $default if not set in database
*
* @experimental 31.0.0
* @since 32.0.0
*
* @see IUserConfig for explanation about lazy loading
* @see getValueInt()
@ -313,7 +313,7 @@ interface IUserConfig {
*
* @return int stored config value or $default if not set in database
*
* @experimental 31.0.0
* @since 32.0.0
*
* @see IUserConfig for explanation about lazy loading
* @see getValueString()
@ -336,7 +336,7 @@ interface IUserConfig {
*
* @return float stored config value or $default if not set in database
*
* @experimental 31.0.0
* @since 32.0.0
*
* @see IUserConfig for explanation about lazy loading
* @see getValueString()
@ -359,7 +359,7 @@ interface IUserConfig {
*
* @return bool stored config value or $default if not set in database
*
* @experimental 31.0.0
* @since 32.0.0
*
* @see IUserPrefences for explanation about lazy loading
* @see getValueString()
@ -382,7 +382,7 @@ interface IUserConfig {
*
* @return array stored config value or $default if not set in database
*
* @experimental 31.0.0
* @since 32.0.0
*
* @see IUserConfig for explanation about lazy loading
* @see getValueString()
@ -407,7 +407,7 @@ interface IUserConfig {
* @throws UnknownKeyException if config key is not known
* @throws IncorrectTypeException if config value type is not known
*
* @experimental 31.0.0
* @since 32.0.0
*/
public function getValueType(string $userId, string $app, string $key, ?bool $lazy = null): ValueType;
@ -426,7 +426,7 @@ interface IUserConfig {
* @throws UnknownKeyException if config key is not known
* @throws IncorrectTypeException if config value type is not known
*
* @experimental 31.0.0
* @since 32.0.0
*/
public function getValueFlags(string $userId, string $app, string $key, bool $lazy = false): int;
@ -447,7 +447,7 @@ interface IUserConfig {
*
* @return bool TRUE if value was different, therefor updated in database
*
* @experimental 31.0.0
* @since 32.0.0
*
* @see IUserConfig for explanation about lazy loading
* @see setValueInt()
@ -479,7 +479,7 @@ interface IUserConfig {
*
* @return bool TRUE if value was different, therefor updated in database
*
* @experimental 31.0.0
* @since 32.0.0
*
* @see IUserConfig for explanation about lazy loading
* @see setValueString()
@ -506,7 +506,7 @@ interface IUserConfig {
*
* @return bool TRUE if value was different, therefor updated in database
*
* @experimental 31.0.0
* @since 32.0.0
*
* @see IUserConfig for explanation about lazy loading
* @see setValueString()
@ -532,7 +532,7 @@ interface IUserConfig {
*
* @return bool TRUE if value was different, therefor updated in database
*
* @experimental 31.0.0
* @since 32.0.0
*
* @see IUserConfig for explanation about lazy loading
* @see setValueString()
@ -559,7 +559,7 @@ interface IUserConfig {
*
* @return bool TRUE if value was different, therefor updated in database
*
* @experimental 31.0.0
* @since 32.0.0
*
* @see IUserConfig for explanation about lazy loading
* @see setValueString()
@ -581,7 +581,7 @@ interface IUserConfig {
*
* @return bool TRUE if database update were necessary
*
* @experimental 31.0.0
* @since 32.0.0
*/
public function updateSensitive(string $userId, string $app, string $key, bool $sensitive): bool;
@ -594,7 +594,7 @@ interface IUserConfig {
* @param string $key config key
* @param bool $sensitive TRUE to set as sensitive, FALSE to unset
*
* @experimental 31.0.0
* @since 32.0.0
*/
public function updateGlobalSensitive(string $app, string $key, bool $sensitive): void;
@ -611,7 +611,7 @@ interface IUserConfig {
*
* @return bool TRUE if database update were necessary
*
* @experimental 31.0.0
* @since 32.0.0
*/
public function updateIndexed(string $userId, string $app, string $key, bool $indexed): bool;
@ -624,7 +624,7 @@ interface IUserConfig {
* @param string $key config key
* @param bool $indexed TRUE to set as indexed, FALSE to unset
*
* @experimental 31.0.0
* @since 32.0.0
*/
public function updateGlobalIndexed(string $app, string $key, bool $indexed): void;
@ -638,7 +638,7 @@ interface IUserConfig {
*
* @return bool TRUE if database update was necessary
*
* @experimental 31.0.0
* @since 32.0.0
*/
public function updateLazy(string $userId, string $app, string $key, bool $lazy): bool;
@ -651,7 +651,7 @@ interface IUserConfig {
* @param string $key config key
* @param bool $lazy TRUE to set as lazy loaded, FALSE to unset
*
* @experimental 31.0.0
* @since 32.0.0
*/
public function updateGlobalLazy(string $app, string $key, bool $lazy): void;
@ -677,7 +677,7 @@ interface IUserConfig {
* @return array
* @throws UnknownKeyException if config key is not known in database
*
* @experimental 31.0.0
* @since 32.0.0
*/
public function getDetails(string $userId, string $app, string $key): array;
@ -688,7 +688,7 @@ interface IUserConfig {
* @param string $app id of the app
* @param string $key config key
*
* @experimental 31.0.0
* @since 32.0.0
*/
public function deleteUserConfig(string $userId, string $app, string $key): void;
@ -698,7 +698,7 @@ interface IUserConfig {
* @param string $app id of the app
* @param string $key config key
*
* @experimental 31.0.0
* @since 32.0.0
*/
public function deleteKey(string $app, string $key): void;
@ -707,7 +707,7 @@ interface IUserConfig {
*
* @param string $app id of the app
*
* @experimental 31.0.0
* @since 32.0.0
*/
public function deleteApp(string $app): void;
@ -716,7 +716,7 @@ interface IUserConfig {
*
* @param string $userId id of the user
*
* @experimental 31.0.0
* @since 32.0.0
*/
public function deleteAllUserConfig(string $userId): void;
@ -728,7 +728,7 @@ interface IUserConfig {
* @param string $userId id of the user
* @param bool $reload set to TRUE to refill cache instantly after clearing it
*
* @experimental 31.0.0
* @since 32.0.0
*/
public function clearCache(string $userId, bool $reload = false): void;
@ -736,7 +736,7 @@ interface IUserConfig {
* Clear the cache for all users.
* The cache will be rebuilt only the next time a user config is requested.
*
* @experimental 31.0.0
* @since 32.0.0
*/
public function clearCacheAll(): void;
}

View file

@ -6,19 +6,19 @@ declare(strict_types=1);
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
namespace NCU\Config\Lexicon;
namespace OCP\Config\Lexicon;
use Closure;
use NCU\Config\ValueType;
use OCP\Config\ValueType;
/**
* Model that represent config values within an app config lexicon.
*
* @see IConfigLexicon
* @experimental 31.0.0
* @see ILexicon
* @since 32.0.0
*/
class ConfigLexiconEntry {
/** @experimental 32.0.0 */
class Entry {
/** @since 32.0.0 */
public const RENAME_INVERT_BOOLEAN = 1;
private string $definition = '';
@ -33,7 +33,7 @@ class ConfigLexiconEntry {
* @param string|null $rename previous config key to migrate config value from
* @param bool $deprecated set config key as deprecated
*
* @experimental 31.0.0
* @since 32.0.0
* @psalm-suppress PossiblyInvalidCast
* @psalm-suppress RiskyCast
*/
@ -63,7 +63,7 @@ class ConfigLexiconEntry {
* returns the config key
*
* @return string config key
* @experimental 31.0.0
* @since 32.0.0
*/
public function getKey(): string {
return $this->key;
@ -73,7 +73,7 @@ class ConfigLexiconEntry {
* get expected type for config value
*
* @return ValueType
* @experimental 31.0.0
* @since 32.0.0
*/
public function getValueType(): ValueType {
return $this->type;
@ -82,7 +82,7 @@ class ConfigLexiconEntry {
/**
* @param string $default
* @return string
* @experimental 31.0.0
* @since 32.0.0
*/
private function convertFromString(string $default): string {
return $default;
@ -91,7 +91,7 @@ class ConfigLexiconEntry {
/**
* @param int $default
* @return string
* @experimental 31.0.0
* @since 32.0.0
*/
private function convertFromInt(int $default): string {
return (string)$default;
@ -100,7 +100,7 @@ class ConfigLexiconEntry {
/**
* @param float $default
* @return string
* @experimental 31.0.0
* @since 32.0.0
*/
private function convertFromFloat(float $default): string {
return (string)$default;
@ -109,7 +109,7 @@ class ConfigLexiconEntry {
/**
* @param bool $default
* @return string
* @experimental 31.0.0
* @since 32.0.0
*/
private function convertFromBool(bool $default): string {
return ($default) ? '1' : '0';
@ -118,7 +118,7 @@ class ConfigLexiconEntry {
/**
* @param array $default
* @return string
* @experimental 31.0.0
* @since 32.0.0
*/
private function convertFromArray(array $default): string {
return json_encode($default);
@ -128,7 +128,7 @@ class ConfigLexiconEntry {
* returns default value
*
* @return string|null NULL if no default is set
* @experimental 31.0.0
* @since 32.0.0
*/
public function getDefault(Preset $preset): ?string {
if ($this->default !== null) {
@ -156,7 +156,7 @@ class ConfigLexiconEntry {
* @param string|int|float|bool|array $entry
*
* @return string
* @experimental 31.0.0
* @since 32.0.0
* @psalm-suppress PossiblyInvalidCast arrays are managed pre-cast
* @psalm-suppress RiskyCast
*/
@ -180,7 +180,7 @@ class ConfigLexiconEntry {
* returns definition
*
* @return string
* @experimental 31.0.0
* @since 32.0.0
*/
public function getDefinition(): string {
return $this->definition;
@ -191,7 +191,7 @@ class ConfigLexiconEntry {
*
* @see IAppConfig for details on lazy config values
* @return bool TRUE if config value is lazy
* @experimental 31.0.0
* @since 32.0.0
*/
public function isLazy(): bool {
return $this->lazy;
@ -202,7 +202,7 @@ class ConfigLexiconEntry {
*
* @see IAppConfig for details on sensitive config values
* @return int bitflag about the config value
* @experimental 31.0.0
* @since 32.0.0
*/
public function getFlags(): int {
return $this->flags;
@ -212,7 +212,7 @@ class ConfigLexiconEntry {
* @param int $flag
*
* @return bool TRUE is config value bitflag contains $flag
* @experimental 31.0.0
* @since 32.0.0
*/
public function isFlagged(int $flag): bool {
return (($flag & $this->getFlags()) === $flag);
@ -223,14 +223,14 @@ class ConfigLexiconEntry {
* link to an old config key.
*
* @return string|null not NULL if value can be imported from a previous key
* @experimental 32.0.0
* @since 32.0.0
*/
public function getRename(): ?string {
return $this->rename;
}
/**
* @experimental 32.0.0
* @since 32.0.0
* @return bool TRUE if $option was set during the creation of the entry.
*/
public function hasOption(int $option): bool {
@ -241,7 +241,7 @@ class ConfigLexiconEntry {
* returns if config key is set as deprecated
*
* @return bool TRUE if config si deprecated
* @experimental 31.0.0
* @since 32.0.0
*/
public function isDeprecated(): bool {
return $this->deprecated;

View file

@ -6,39 +6,39 @@ declare(strict_types=1);
* SPDX-License-Identifier: AGPL-3.0-only
*/
namespace NCU\Config\Lexicon;
namespace OCP\Config\Lexicon;
/**
* This interface needs to be implemented if you want to define a config lexicon for your application
* The config lexicon is used to avoid conflicts and problems when storing/retrieving config values
*
* @experimental 31.0.0
* @since 32.0.0
*/
interface IConfigLexicon {
interface ILexicon {
/**
* Define the expected behavior when using config
* keys not set within your application config lexicon.
*
* @see ConfigLexiconStrictness
* @return ConfigLexiconStrictness
* @experimental 31.0.0
* @return Strictness
* @since 32.0.0
*@see Strictness
*/
public function getStrictness(): ConfigLexiconStrictness;
public function getStrictness(): Strictness;
/**
* define the list of entries of your application config lexicon, related to AppConfig.
*
* @return ConfigLexiconEntry[]
* @experimental 31.0.0
* @return Entry[]
* @since 32.0.0
*/
public function getAppConfigs(): array;
/**
* define the list of entries of your application config lexicon, related to UserPreferences.
*
* @return ConfigLexiconEntry[]
* @experimental 31.0.0
* @return Entry[]
* @since 32.0.0
*/
public function getUserConfigs(): array;
}

View file

@ -6,12 +6,12 @@ declare(strict_types=1);
* SPDX-License-Identifier: AGPL-3.0-only
*/
namespace NCU\Config\Lexicon;
namespace OCP\Config\Lexicon;
/**
* list of preset to handle the default behavior of the instance
*
* @see ConfigLexiconEntry::preset
* @see Entry::preset
*
* - **Preset::LARGE** - Large size organisation (> 50k accounts)
* - **Preset::MEDIUM** - Medium size organisation (> 100 accounts)
@ -22,25 +22,25 @@ namespace NCU\Config\Lexicon;
* - **Preset::FAMILY** - Family
* - **Preset::PRIVATE** - Private
*
* @experimental 32.0.0
* @since 32.0.0
*/
enum Preset: int {
/** @experimental 32.0.0 */
/** @since 32.0.0 */
case LARGE = 8;
/** @experimental 32.0.0 */
/** @since 32.0.0 */
case MEDIUM = 7;
/** @experimental 32.0.0 */
/** @since 32.0.0 */
case SMALL = 6;
/** @experimental 32.0.0 */
/** @since 32.0.0 */
case SHARED = 5;
/** @experimental 32.0.0 */
/** @since 32.0.0 */
case EDUCATION = 4;
/** @experimental 32.0.0 */
/** @since 32.0.0 */
case CLUB = 3;
/** @experimental 32.0.0 */
/** @since 32.0.0 */
case FAMILY = 2;
/** @experimental 32.0.0 */
/** @since 32.0.0 */
case PRIVATE = 1;
/** @experimental 32.0.0 */
/** @since 32.0.0 */
case NONE = 0;
}

View file

@ -0,0 +1,30 @@
<?php
declare(strict_types=1);
/**
* SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors
* SPDX-License-Identifier: AGPL-3.0-only
*/
namespace OCP\Config\Lexicon;
/**
* Strictness regarding using not-listed config keys
*
* - **Strictness::IGNORE** - fully ignore
* - **Strictness::NOTICE** - ignore and report
* - **Strictness::WARNING** - silently block (returns $default) and report
* - **Strictness::EXCEPTION** - block (throws exception) and report
*
* @since 32.0.0
*/
enum Strictness {
/** @since 32.0.0 */
case IGNORE; // fully ignore
/** @since 32.0.0 */
case NOTICE; // ignore and report
/** @since 32.0.0 */
case WARNING; // silently block (returns $default) and report
/** @since 32.0.0 */
case EXCEPTION; // block (throws exception) and report
}

View file

@ -6,40 +6,40 @@ declare(strict_types=1);
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
namespace NCU\Config;
namespace OCP\Config;
use NCU\Config\Exceptions\IncorrectTypeException;
use OCP\Config\Exceptions\IncorrectTypeException;
use OCP\IAppConfig;
use UnhandledMatchError;
/**
* Listing of available value type for typed config value
*
* @experimental 31.0.0
* @since 32.0.0
*/
enum ValueType: int {
/**
* @experimental 31.0.0
* @since 32.0.0
*/
case MIXED = 0;
/**
* @experimental 31.0.0
* @since 32.0.0
*/
case STRING = 1;
/**
* @experimental 31.0.0
* @since 32.0.0
*/
case INT = 2;
/**
* @experimental 31.0.0
* @since 32.0.0
*/
case FLOAT = 3;
/**
* @experimental 31.0.0
* @since 32.0.0
*/
case BOOL = 4;
/**
* @experimental 31.0.0
* @since 32.0.0
*/
case ARRAY = 5;
@ -51,7 +51,7 @@ enum ValueType: int {
* @return self
* @throws IncorrectTypeException
*
* @experimental 31.0.0
* @since 32.0.0
*/
public static function fromStringDefinition(string $definition): self {
try {
@ -74,7 +74,7 @@ enum ValueType: int {
* @return string
* @throws IncorrectTypeException
*
* @experimental 31.0.0
* @since 32.0.0
*/
public function getDefinition(): string {
try {
@ -97,7 +97,7 @@ enum ValueType: int {
* @return int
* @throws IncorrectTypeException
*
* @experimental 31.0.0
* @since 32.0.0
*/
public function toAppConfigFlag(): int {
try {

View file

@ -1,30 +0,0 @@
<?php
declare(strict_types=1);
/**
* SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors
* SPDX-License-Identifier: AGPL-3.0-only
*/
namespace NCU\Config\Lexicon;
/**
* Strictness regarding using not-listed config keys
*
* - **ConfigLexiconStrictness::IGNORE** - fully ignore
* - **ConfigLexiconStrictness::NOTICE** - ignore and report
* - **ConfigLexiconStrictness::WARNING** - silently block (returns $default) and report
* - **ConfigLexiconStrictness::EXCEPTION** - block (throws exception) and report
*
* @experimental 31.0.0
*/
enum ConfigLexiconStrictness {
/** @experimental 31.0.0 */
case IGNORE; // fully ignore
/** @experimental 31.0.0 */
case NOTICE; // ignore and report
/** @experimental 31.0.0 */
case WARNING; // silently block (returns $default) and report
/** @experimental 31.0.0 */
case EXCEPTION; // block (throws exception) and report
}

View file

@ -7,13 +7,13 @@ declare(strict_types=1);
*/
namespace Tests\lib\Config;
use NCU\Config\Exceptions\TypeConflictException;
use NCU\Config\Exceptions\UnknownKeyException;
use NCU\Config\IUserConfig;
use NCU\Config\Lexicon\Preset;
use OC\AppConfig;
use OC\AppFramework\Bootstrap\Coordinator;
use OC\Config\ConfigManager;
use OCP\Config\Exceptions\TypeConflictException;
use OCP\Config\Exceptions\UnknownKeyException;
use OCP\Config\IUserConfig;
use OCP\Config\Lexicon\Preset;
use OCP\Exceptions\AppConfigTypeConflictException;
use OCP\Exceptions\AppConfigUnknownKeyException;
use OCP\IAppConfig;
@ -38,9 +38,9 @@ class LexiconTest extends TestCase {
$bootstrapCoordinator = Server::get(Coordinator::class);
$bootstrapCoordinator->getRegistrationContext()?->registerConfigLexicon(TestConfigLexicon_I::APPID, TestConfigLexicon_I::class);
$bootstrapCoordinator->getRegistrationContext()?->registerConfigLexicon(TestConfigLexicon_N::APPID, TestConfigLexicon_N::class);
$bootstrapCoordinator->getRegistrationContext()?->registerConfigLexicon(TestConfigLexicon_W::APPID, TestConfigLexicon_W::class);
$bootstrapCoordinator->getRegistrationContext()?->registerConfigLexicon(TestConfigLexicon_E::APPID, TestConfigLexicon_E::class);
$bootstrapCoordinator->getRegistrationContext()?->registerConfigLexicon(TestLexicon_N::APPID, TestLexicon_N::class);
$bootstrapCoordinator->getRegistrationContext()?->registerConfigLexicon(TestLexicon_W::APPID, TestLexicon_W::class);
$bootstrapCoordinator->getRegistrationContext()?->registerConfigLexicon(TestLexicon_E::APPID, TestLexicon_E::class);
$this->appConfig = Server::get(IAppConfig::class);
$this->userConfig = Server::get(IUserConfig::class);
@ -51,35 +51,35 @@ class LexiconTest extends TestCase {
parent::tearDown();
$this->appConfig->deleteApp(TestConfigLexicon_I::APPID);
$this->appConfig->deleteApp(TestConfigLexicon_N::APPID);
$this->appConfig->deleteApp(TestConfigLexicon_W::APPID);
$this->appConfig->deleteApp(TestConfigLexicon_E::APPID);
$this->appConfig->deleteApp(TestLexicon_N::APPID);
$this->appConfig->deleteApp(TestLexicon_W::APPID);
$this->appConfig->deleteApp(TestLexicon_E::APPID);
$this->userConfig->deleteApp(TestConfigLexicon_I::APPID);
$this->userConfig->deleteApp(TestConfigLexicon_N::APPID);
$this->userConfig->deleteApp(TestConfigLexicon_W::APPID);
$this->userConfig->deleteApp(TestConfigLexicon_E::APPID);
$this->userConfig->deleteApp(TestLexicon_N::APPID);
$this->userConfig->deleteApp(TestLexicon_W::APPID);
$this->userConfig->deleteApp(TestLexicon_E::APPID);
}
public function testAppLexiconSetCorrect() {
$this->assertSame(true, $this->appConfig->setValueString(TestConfigLexicon_E::APPID, 'key1', 'new_value'));
$this->assertSame(true, $this->appConfig->isLazy(TestConfigLexicon_E::APPID, 'key1'));
$this->assertSame(true, $this->appConfig->isSensitive(TestConfigLexicon_E::APPID, 'key1'));
$this->appConfig->deleteKey(TestConfigLexicon_E::APPID, 'key1');
$this->assertSame(true, $this->appConfig->setValueString(TestLexicon_E::APPID, 'key1', 'new_value'));
$this->assertSame(true, $this->appConfig->isLazy(TestLexicon_E::APPID, 'key1'));
$this->assertSame(true, $this->appConfig->isSensitive(TestLexicon_E::APPID, 'key1'));
$this->appConfig->deleteKey(TestLexicon_E::APPID, 'key1');
}
public function testAppLexiconGetCorrect() {
$this->assertSame('abcde', $this->appConfig->getValueString(TestConfigLexicon_E::APPID, 'key1', 'default'));
$this->assertSame('abcde', $this->appConfig->getValueString(TestLexicon_E::APPID, 'key1', 'default'));
}
public function testAppLexiconSetIncorrectValueType() {
$this->expectException(AppConfigTypeConflictException::class);
$this->appConfig->setValueInt(TestConfigLexicon_E::APPID, 'key1', -1);
$this->appConfig->setValueInt(TestLexicon_E::APPID, 'key1', -1);
}
public function testAppLexiconGetIncorrectValueType() {
$this->expectException(AppConfigTypeConflictException::class);
$this->appConfig->getValueInt(TestConfigLexicon_E::APPID, 'key1');
$this->appConfig->getValueInt(TestLexicon_E::APPID, 'key1');
}
public function testAppLexiconIgnore() {
@ -88,45 +88,45 @@ class LexiconTest extends TestCase {
}
public function testAppLexiconNotice() {
$this->appConfig->setValueString(TestConfigLexicon_N::APPID, 'key_notice', 'new_value');
$this->assertSame('new_value', $this->appConfig->getValueString(TestConfigLexicon_N::APPID, 'key_notice', ''));
$this->appConfig->setValueString(TestLexicon_N::APPID, 'key_notice', 'new_value');
$this->assertSame('new_value', $this->appConfig->getValueString(TestLexicon_N::APPID, 'key_notice', ''));
}
public function testAppLexiconWarning() {
$this->appConfig->setValueString(TestConfigLexicon_W::APPID, 'key_warning', 'new_value');
$this->assertSame('', $this->appConfig->getValueString(TestConfigLexicon_W::APPID, 'key_warning', ''));
$this->appConfig->setValueString(TestLexicon_W::APPID, 'key_warning', 'new_value');
$this->assertSame('', $this->appConfig->getValueString(TestLexicon_W::APPID, 'key_warning', ''));
}
public function testAppLexiconSetException() {
$this->expectException(AppConfigUnknownKeyException::class);
$this->appConfig->setValueString(TestConfigLexicon_E::APPID, 'key_exception', 'new_value');
$this->assertSame('', $this->appConfig->getValueString(TestConfigLexicon_E::APPID, 'key3', ''));
$this->appConfig->setValueString(TestLexicon_E::APPID, 'key_exception', 'new_value');
$this->assertSame('', $this->appConfig->getValueString(TestLexicon_E::APPID, 'key3', ''));
}
public function testAppLexiconGetException() {
$this->expectException(AppConfigUnknownKeyException::class);
$this->appConfig->getValueString(TestConfigLexicon_E::APPID, 'key_exception');
$this->appConfig->getValueString(TestLexicon_E::APPID, 'key_exception');
}
public function testUserLexiconSetCorrect() {
$this->assertSame(true, $this->userConfig->setValueString('user1', TestConfigLexicon_E::APPID, 'key1', 'new_value'));
$this->assertSame(true, $this->userConfig->isLazy('user1', TestConfigLexicon_E::APPID, 'key1'));
$this->assertSame(true, $this->userConfig->isSensitive('user1', TestConfigLexicon_E::APPID, 'key1'));
$this->userConfig->deleteKey(TestConfigLexicon_E::APPID, 'key1');
$this->assertSame(true, $this->userConfig->setValueString('user1', TestLexicon_E::APPID, 'key1', 'new_value'));
$this->assertSame(true, $this->userConfig->isLazy('user1', TestLexicon_E::APPID, 'key1'));
$this->assertSame(true, $this->userConfig->isSensitive('user1', TestLexicon_E::APPID, 'key1'));
$this->userConfig->deleteKey(TestLexicon_E::APPID, 'key1');
}
public function testUserLexiconGetCorrect() {
$this->assertSame('abcde', $this->userConfig->getValueString('user1', TestConfigLexicon_E::APPID, 'key1', 'default'));
$this->assertSame('abcde', $this->userConfig->getValueString('user1', TestLexicon_E::APPID, 'key1', 'default'));
}
public function testUserLexiconSetIncorrectValueType() {
$this->expectException(TypeConflictException::class);
$this->userConfig->setValueInt('user1', TestConfigLexicon_E::APPID, 'key1', -1);
$this->userConfig->setValueInt('user1', TestLexicon_E::APPID, 'key1', -1);
}
public function testUserLexiconGetIncorrectValueType() {
$this->expectException(TypeConflictException::class);
$this->userConfig->getValueInt('user1', TestConfigLexicon_E::APPID, 'key1');
$this->userConfig->getValueInt('user1', TestLexicon_E::APPID, 'key1');
}
public function testUserLexiconIgnore() {
@ -135,24 +135,24 @@ class LexiconTest extends TestCase {
}
public function testUserLexiconNotice() {
$this->userConfig->setValueString('user1', TestConfigLexicon_N::APPID, 'key_notice', 'new_value');
$this->assertSame('new_value', $this->userConfig->getValueString('user1', TestConfigLexicon_N::APPID, 'key_notice', ''));
$this->userConfig->setValueString('user1', TestLexicon_N::APPID, 'key_notice', 'new_value');
$this->assertSame('new_value', $this->userConfig->getValueString('user1', TestLexicon_N::APPID, 'key_notice', ''));
}
public function testUserLexiconWarning() {
$this->userConfig->setValueString('user1', TestConfigLexicon_W::APPID, 'key_warning', 'new_value');
$this->assertSame('', $this->userConfig->getValueString('user1', TestConfigLexicon_W::APPID, 'key_warning', ''));
$this->userConfig->setValueString('user1', TestLexicon_W::APPID, 'key_warning', 'new_value');
$this->assertSame('', $this->userConfig->getValueString('user1', TestLexicon_W::APPID, 'key_warning', ''));
}
public function testUserLexiconSetException() {
$this->expectException(UnknownKeyException::class);
$this->userConfig->setValueString('user1', TestConfigLexicon_E::APPID, 'key_exception', 'new_value');
$this->assertSame('', $this->userConfig->getValueString('user1', TestConfigLexicon_E::APPID, 'key5', ''));
$this->userConfig->setValueString('user1', TestLexicon_E::APPID, 'key_exception', 'new_value');
$this->assertSame('', $this->userConfig->getValueString('user1', TestLexicon_E::APPID, 'key5', ''));
}
public function testUserLexiconGetException() {
$this->expectException(UnknownKeyException::class);
$this->userConfig->getValueString('user1', TestConfigLexicon_E::APPID, 'key_exception');
$this->userConfig->getValueString('user1', TestLexicon_E::APPID, 'key_exception');
}
public function testAppConfigLexiconRenameSetNewValue() {
@ -207,25 +207,25 @@ class LexiconTest extends TestCase {
public function testAppConfigLexiconPreset() {
$this->configManager->setLexiconPreset(Preset::FAMILY);
$this->assertSame('family', $this->appConfig->getValueString(TestConfigLexicon_E::APPID, 'key3'));
$this->assertSame('family', $this->appConfig->getValueString(TestLexicon_E::APPID, 'key3'));
}
public function testAppConfigLexiconPresets() {
$this->configManager->setLexiconPreset(Preset::MEDIUM);
$this->assertSame('club+medium', $this->appConfig->getValueString(TestConfigLexicon_E::APPID, 'key3'));
$this->assertSame('club+medium', $this->appConfig->getValueString(TestLexicon_E::APPID, 'key3'));
$this->configManager->setLexiconPreset(Preset::FAMILY);
$this->assertSame('family', $this->appConfig->getValueString(TestConfigLexicon_E::APPID, 'key3'));
$this->assertSame('family', $this->appConfig->getValueString(TestLexicon_E::APPID, 'key3'));
}
public function testUserConfigLexiconPreset() {
$this->configManager->setLexiconPreset(Preset::FAMILY);
$this->assertSame('family', $this->userConfig->getValueString('user1', TestConfigLexicon_E::APPID, 'key3'));
$this->assertSame('family', $this->userConfig->getValueString('user1', TestLexicon_E::APPID, 'key3'));
}
public function testUserConfigLexiconPresets() {
$this->configManager->setLexiconPreset(Preset::MEDIUM);
$this->assertSame('club+medium', $this->userConfig->getValueString('user1', TestConfigLexicon_E::APPID, 'key3'));
$this->assertSame('club+medium', $this->userConfig->getValueString('user1', TestLexicon_E::APPID, 'key3'));
$this->configManager->setLexiconPreset(Preset::FAMILY);
$this->assertSame('family', $this->userConfig->getValueString('user1', TestConfigLexicon_E::APPID, 'key3'));
$this->assertSame('family', $this->userConfig->getValueString('user1', TestLexicon_E::APPID, 'key3'));
}
}

View file

@ -1,49 +0,0 @@
<?php
declare(strict_types=1);
/**
* SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors
* SPDX-License-Identifier: AGPL-3.0-only
*/
namespace Tests\lib\Config;
use NCU\Config\IUserConfig;
use NCU\Config\Lexicon\ConfigLexiconEntry;
use NCU\Config\Lexicon\ConfigLexiconStrictness;
use NCU\Config\Lexicon\IConfigLexicon;
use NCU\Config\Lexicon\Preset;
use NCU\Config\ValueType;
use OCP\IAppConfig;
class TestConfigLexicon_E implements IConfigLexicon {
public const APPID = 'lexicon_test_e';
public function getStrictness(): ConfigLexiconStrictness {
return ConfigLexiconStrictness::EXCEPTION;
}
public function getAppConfigs(): array {
return [
new ConfigLexiconEntry('key1', ValueType::STRING, 'abcde', 'test key', true, IAppConfig::FLAG_SENSITIVE),
new ConfigLexiconEntry('key2', ValueType::INT, 12345, 'test key', false),
new ConfigLexiconEntry('key3', ValueType::STRING, fn (Preset $p): string => match ($p) {
Preset::FAMILY => 'family',
Preset::CLUB, Preset::MEDIUM => 'club+medium',
default => 'none',
}, 'test key'),
];
}
public function getUserConfigs(): array {
return [
new ConfigLexiconEntry('key1', ValueType::STRING, 'abcde', 'test key', true, IUserConfig::FLAG_SENSITIVE),
new ConfigLexiconEntry('key2', ValueType::INT, 12345, 'test key', false),
new ConfigLexiconEntry('key3', ValueType::STRING, fn (Preset $p): string => match ($p) {
Preset::FAMILY => 'family',
Preset::CLUB, Preset::MEDIUM => 'club+medium',
default => 'none',
}, 'test key'),
];
}
}

View file

@ -8,33 +8,33 @@ declare(strict_types=1);
namespace Tests\lib\Config;
use NCU\Config\IUserConfig;
use NCU\Config\Lexicon\ConfigLexiconEntry;
use NCU\Config\Lexicon\ConfigLexiconStrictness;
use NCU\Config\Lexicon\IConfigLexicon;
use NCU\Config\ValueType;
use OCP\Config\IUserConfig;
use OCP\Config\Lexicon\Entry;
use OCP\Config\Lexicon\ILexicon;
use OCP\Config\Lexicon\Strictness;
use OCP\Config\ValueType;
use OCP\IAppConfig;
class TestConfigLexicon_I implements IConfigLexicon {
class TestConfigLexicon_I implements ILexicon {
public const APPID = 'lexicon_test_i';
public function getStrictness(): ConfigLexiconStrictness {
return ConfigLexiconStrictness::IGNORE;
public function getStrictness(): Strictness {
return Strictness::IGNORE;
}
public function getAppConfigs(): array {
return [
new ConfigLexiconEntry('key1', ValueType::STRING, 'abcde', 'test key', true, IAppConfig::FLAG_SENSITIVE),
new ConfigLexiconEntry('key2', ValueType::INT, 12345, 'test key', false),
new ConfigLexiconEntry('key3', ValueType::INT, 12345, 'test key', true, rename: 'old_key3'),
new ConfigLexiconEntry('key4', ValueType::BOOL, 12345, 'test key', true, rename: 'old_key4', options: ConfigLexiconEntry::RENAME_INVERT_BOOLEAN),
new Entry('key1', ValueType::STRING, 'abcde', 'test key', true, IAppConfig::FLAG_SENSITIVE),
new Entry('key2', ValueType::INT, 12345, 'test key', false),
new Entry('key3', ValueType::INT, 12345, 'test key', true, rename: 'old_key3'),
new Entry('key4', ValueType::BOOL, 12345, 'test key', true, rename: 'old_key4', options: Entry::RENAME_INVERT_BOOLEAN),
];
}
public function getUserConfigs(): array {
return [
new ConfigLexiconEntry('key1', ValueType::STRING, 'abcde', 'test key', true, IUserConfig::FLAG_SENSITIVE),
new ConfigLexiconEntry('key2', ValueType::INT, 12345, 'test key', false)
new Entry('key1', ValueType::STRING, 'abcde', 'test key', true, IUserConfig::FLAG_SENSITIVE),
new Entry('key2', ValueType::INT, 12345, 'test key', false)
];
}

View file

@ -1,39 +0,0 @@
<?php
declare(strict_types=1);
/**
* SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors
* SPDX-License-Identifier: AGPL-3.0-only
*/
namespace Tests\lib\Config;
use NCU\Config\IUserConfig;
use NCU\Config\Lexicon\ConfigLexiconEntry;
use NCU\Config\Lexicon\ConfigLexiconStrictness;
use NCU\Config\Lexicon\IConfigLexicon;
use NCU\Config\ValueType;
use OCP\IAppConfig;
class TestConfigLexicon_N implements IConfigLexicon {
public const APPID = 'lexicon_test_n';
public function getStrictness(): ConfigLexiconStrictness {
return ConfigLexiconStrictness::NOTICE;
}
public function getAppConfigs(): array {
return [
new ConfigLexiconEntry('key1', ValueType::STRING, 'abcde', 'test key', true, IAppConfig::FLAG_SENSITIVE),
new ConfigLexiconEntry('key2', ValueType::INT, 12345, 'test key', false)
];
}
public function getUserConfigs(): array {
return [
new ConfigLexiconEntry('key1', ValueType::STRING, 'abcde', 'test key', true, IUserConfig::FLAG_SENSITIVE),
new ConfigLexiconEntry('key2', ValueType::INT, 12345, 'test key', false)
];
}
}

View file

@ -1,39 +0,0 @@
<?php
declare(strict_types=1);
/**
* SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors
* SPDX-License-Identifier: AGPL-3.0-only
*/
namespace Tests\lib\Config;
use NCU\Config\IUserConfig;
use NCU\Config\Lexicon\ConfigLexiconEntry;
use NCU\Config\Lexicon\ConfigLexiconStrictness;
use NCU\Config\Lexicon\IConfigLexicon;
use NCU\Config\ValueType;
use OCP\IAppConfig;
class TestConfigLexicon_W implements IConfigLexicon {
public const APPID = 'lexicon_test_w';
public function getStrictness(): ConfigLexiconStrictness {
return ConfigLexiconStrictness::WARNING;
}
public function getAppConfigs(): array {
return [
new ConfigLexiconEntry('key1', ValueType::STRING, 'abcde', 'test key', true, IAppConfig::FLAG_SENSITIVE),
new ConfigLexiconEntry('key2', ValueType::INT, 12345, 'test key', false)
];
}
public function getUserConfigs(): array {
return [
new ConfigLexiconEntry('key1', ValueType::STRING, 'abcde', 'test key', true, IUserConfig::FLAG_SENSITIVE),
new ConfigLexiconEntry('key2', ValueType::INT, 12345, 'test key', false) ];
}
}

View file

@ -0,0 +1,49 @@
<?php
declare(strict_types=1);
/**
* SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors
* SPDX-License-Identifier: AGPL-3.0-only
*/
namespace Tests\lib\Config;
use OCP\Config\IUserConfig;
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\IAppConfig;
class TestLexicon_E implements ILexicon {
public const APPID = 'lexicon_test_e';
public function getStrictness(): Strictness {
return Strictness::EXCEPTION;
}
public function getAppConfigs(): array {
return [
new Entry('key1', ValueType::STRING, 'abcde', 'test key', true, IAppConfig::FLAG_SENSITIVE),
new Entry('key2', ValueType::INT, 12345, 'test key', false),
new Entry('key3', ValueType::STRING, fn (Preset $p): string => match ($p) {
Preset::FAMILY => 'family',
Preset::CLUB, Preset::MEDIUM => 'club+medium',
default => 'none',
}, 'test key'),
];
}
public function getUserConfigs(): array {
return [
new Entry('key1', ValueType::STRING, 'abcde', 'test key', true, IUserConfig::FLAG_SENSITIVE),
new Entry('key2', ValueType::INT, 12345, 'test key', false),
new Entry('key3', ValueType::STRING, fn (Preset $p): string => match ($p) {
Preset::FAMILY => 'family',
Preset::CLUB, Preset::MEDIUM => 'club+medium',
default => 'none',
}, 'test key'),
];
}
}

View file

@ -0,0 +1,39 @@
<?php
declare(strict_types=1);
/**
* SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors
* SPDX-License-Identifier: AGPL-3.0-only
*/
namespace Tests\lib\Config;
use OCP\Config\IUserConfig;
use OCP\Config\Lexicon\Entry;
use OCP\Config\Lexicon\ILexicon;
use OCP\Config\Lexicon\Strictness;
use OCP\Config\ValueType;
use OCP\IAppConfig;
class TestLexicon_N implements ILexicon {
public const APPID = 'lexicon_test_n';
public function getStrictness(): Strictness {
return Strictness::NOTICE;
}
public function getAppConfigs(): array {
return [
new Entry('key1', ValueType::STRING, 'abcde', 'test key', true, IAppConfig::FLAG_SENSITIVE),
new Entry('key2', ValueType::INT, 12345, 'test key', false)
];
}
public function getUserConfigs(): array {
return [
new Entry('key1', ValueType::STRING, 'abcde', 'test key', true, IUserConfig::FLAG_SENSITIVE),
new Entry('key2', ValueType::INT, 12345, 'test key', false)
];
}
}

View file

@ -0,0 +1,39 @@
<?php
declare(strict_types=1);
/**
* SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors
* SPDX-License-Identifier: AGPL-3.0-only
*/
namespace Tests\lib\Config;
use OCP\Config\IUserConfig;
use OCP\Config\Lexicon\Entry;
use OCP\Config\Lexicon\ILexicon;
use OCP\Config\Lexicon\Strictness;
use OCP\Config\ValueType;
use OCP\IAppConfig;
class TestLexicon_W implements ILexicon {
public const APPID = 'lexicon_test_w';
public function getStrictness(): Strictness {
return Strictness::WARNING;
}
public function getAppConfigs(): array {
return [
new Entry('key1', ValueType::STRING, 'abcde', 'test key', true, IAppConfig::FLAG_SENSITIVE),
new Entry('key2', ValueType::INT, 12345, 'test key', false)
];
}
public function getUserConfigs(): array {
return [
new Entry('key1', ValueType::STRING, 'abcde', 'test key', true, IUserConfig::FLAG_SENSITIVE),
new Entry('key2', ValueType::INT, 12345, 'test key', false) ];
}
}

View file

@ -7,11 +7,11 @@ declare(strict_types=1);
*/
namespace Test\lib\Config;
use NCU\Config\Exceptions\TypeConflictException;
use NCU\Config\Exceptions\UnknownKeyException;
use NCU\Config\IUserConfig;
use NCU\Config\ValueType;
use OC\Config\UserConfig;
use OCP\Config\Exceptions\TypeConflictException;
use OCP\Config\Exceptions\UnknownKeyException;
use OCP\Config\IUserConfig;
use OCP\Config\ValueType;
use OCP\IConfig;
use OCP\IDBConnection;
use OCP\Security\ICrypto;