aboutsummaryrefslogtreecommitdiffstats
path: root/core/Command/Config/ListConfigs.php
diff options
context:
space:
mode:
Diffstat (limited to 'core/Command/Config/ListConfigs.php')
-rw-r--r--core/Command/Config/ListConfigs.php145
1 files changed, 145 insertions, 0 deletions
diff --git a/core/Command/Config/ListConfigs.php b/core/Command/Config/ListConfigs.php
new file mode 100644
index 00000000000..a7c195276eb
--- /dev/null
+++ b/core/Command/Config/ListConfigs.php
@@ -0,0 +1,145 @@
+<?php
+
+/**
+ * SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors
+ * SPDX-FileCopyrightText: 2016 ownCloud, Inc.
+ * SPDX-License-Identifier: AGPL-3.0-only
+ */
+namespace OC\Core\Command\Config;
+
+use OC\Config\ConfigManager;
+use OC\Core\Command\Base;
+use OC\SystemConfig;
+use OCP\IAppConfig;
+use Stecman\Component\Symfony\Console\BashCompletion\CompletionContext;
+use Symfony\Component\Console\Input\InputArgument;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Input\InputOption;
+use Symfony\Component\Console\Output\OutputInterface;
+
+class ListConfigs extends Base {
+ protected string $defaultOutputFormat = self::OUTPUT_FORMAT_JSON_PRETTY;
+
+ public function __construct(
+ protected SystemConfig $systemConfig,
+ protected IAppConfig $appConfig,
+ protected ConfigManager $configManager,
+ ) {
+ parent::__construct();
+ }
+
+ protected function configure() {
+ parent::configure();
+
+ $this
+ ->setName('config:list')
+ ->setDescription('List all configs')
+ ->addArgument(
+ 'app',
+ InputArgument::OPTIONAL,
+ 'Name of the app ("system" to get the config.php values, "all" for all apps and system)',
+ 'all'
+ )
+ ->addOption(
+ 'private',
+ null,
+ InputOption::VALUE_NONE,
+ 'Use this option when you want to include sensitive configs like passwords, salts, ...'
+ )
+ ->addOption('migrate', null, InputOption::VALUE_NONE, 'Rename config keys of all enabled apps, based on ConfigLexicon')
+ ;
+ }
+
+ protected function execute(InputInterface $input, OutputInterface $output): int {
+ $app = $input->getArgument('app');
+ $noSensitiveValues = !$input->getOption('private');
+
+ if ($input->getOption('migrate')) {
+ $this->configManager->migrateConfigLexiconKeys(($app === 'all') ? null : $app);
+ }
+
+ if (!is_string($app)) {
+ $output->writeln('<error>Invalid app value given</error>');
+ return 1;
+ }
+
+ switch ($app) {
+ case 'system':
+ $configs = [
+ 'system' => $this->getSystemConfigs($noSensitiveValues),
+ ];
+ break;
+
+ case 'all':
+ $apps = $this->appConfig->getApps();
+ $configs = [
+ 'system' => $this->getSystemConfigs($noSensitiveValues),
+ 'apps' => [],
+ ];
+ foreach ($apps as $appName) {
+ $configs['apps'][$appName] = $this->getAppConfigs($appName, $noSensitiveValues);
+ }
+ break;
+
+ default:
+ $configs = [
+ 'apps' => [$app => $this->getAppConfigs($app, $noSensitiveValues)],
+ ];
+ }
+
+ $this->writeArrayInOutputFormat($input, $output, $configs);
+ return 0;
+ }
+
+ /**
+ * Get the system configs
+ *
+ * @param bool $noSensitiveValues
+ * @return array
+ */
+ protected function getSystemConfigs(bool $noSensitiveValues): array {
+ $keys = $this->systemConfig->getKeys();
+
+ $configs = [];
+ foreach ($keys as $key) {
+ if ($noSensitiveValues) {
+ $value = $this->systemConfig->getFilteredValue($key, serialize(null));
+ } else {
+ $value = $this->systemConfig->getValue($key, serialize(null));
+ }
+
+ if ($value !== 'N;') {
+ $configs[$key] = $value;
+ }
+ }
+
+ return $configs;
+ }
+
+ /**
+ * Get the app configs
+ *
+ * @param string $app
+ * @param bool $noSensitiveValues
+ * @return array
+ */
+ protected function getAppConfigs(string $app, bool $noSensitiveValues) {
+ if ($noSensitiveValues) {
+ return $this->appConfig->getFilteredValues($app);
+ } else {
+ return $this->appConfig->getValues($app, false);
+ }
+ }
+
+ /**
+ * @param string $argumentName
+ * @param CompletionContext $context
+ * @return string[]
+ */
+ public function completeArgumentValues($argumentName, CompletionContext $context) {
+ if ($argumentName === 'app') {
+ return array_merge(['all', 'system'], \OC_App::getAllApps());
+ }
+ return [];
+ }
+}