From 6763637773f5b9f2993f65427be21ee04f192ea1 Mon Sep 17 00:00:00 2001
From: Joas Schilling <nickvergessen@owncloud.com>
Date: Thu, 30 Apr 2015 15:57:22 +0200
Subject: [PATCH] Add a command to list existing configs

---
 core/command/config/listconfigs.php | 103 ++++++++++++++++++++++++++++
 core/register_command.php           |   2 +
 2 files changed, 105 insertions(+)
 create mode 100644 core/command/config/listconfigs.php

diff --git a/core/command/config/listconfigs.php b/core/command/config/listconfigs.php
new file mode 100644
index 0000000000..d25495a55d
--- /dev/null
+++ b/core/command/config/listconfigs.php
@@ -0,0 +1,103 @@
+<?php
+/**
+ * @author Joas Schilling <nickvergessen@owncloud.com>
+ *
+ * @copyright Copyright (c) 2015, ownCloud, Inc.
+ * @license AGPL-3.0
+ *
+ * This code is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License, version 3,
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License, version 3,
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>
+ *
+ */
+
+namespace OC\Core\Command\Config;
+
+use OC\Core\Command\Base;
+use OC\SystemConfig;
+use OCP\IAppConfig;
+use Symfony\Component\Console\Input\InputArgument;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Output\OutputInterface;
+
+class ListConfigs extends Base {
+	/** * @var SystemConfig */
+	protected $systemConfig;
+
+	/** @var IAppConfig */
+	protected $appConfig;
+
+	/**
+	 * @param SystemConfig $systemConfig
+	 * @param IAppConfig $appConfig
+	 */
+	public function __construct(SystemConfig $systemConfig, IAppConfig $appConfig) {
+		parent::__construct();
+		$this->systemConfig = $systemConfig;
+		$this->appConfig = $appConfig;
+	}
+
+	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)',
+				'system'
+			)
+		;
+	}
+
+	protected function execute(InputInterface $input, OutputInterface $output) {
+		$app = $input->getArgument('app');
+		switch ($app) {
+			case 'system':
+				$configs = $this->getSystemConfigs();
+			break;
+
+			case 'all':
+				$apps = $this->appConfig->getApps();
+				$configs = [];
+				foreach ($apps as $appName) {
+					$configs[$appName] = $this->appConfig->getValues($appName, false);
+				}
+				$configs['system'] = $this->getSystemConfigs();
+			break;
+
+			default:
+				$configs = $this->appConfig->getValues($app, false);
+		}
+
+		$this->writeArrayInOutputFormat($input, $output, $configs);
+	}
+
+	/**
+	 * Get the system configs
+	 * @return array
+	 */
+	protected function getSystemConfigs() {
+		$keys = $this->systemConfig->getKeys();
+
+		$configs = [];
+		foreach ($keys as $key) {
+			$value = $this->systemConfig->getValue($key, new \Exception('Not set'));
+			if (!($value instanceof \Exception)) {
+				$configs[$key] = $value;
+			}
+		}
+
+		return $configs;
+	}
+}
diff --git a/core/register_command.php b/core/register_command.php
index 925d3d8ade..b4c3576bb4 100644
--- a/core/register_command.php
+++ b/core/register_command.php
@@ -40,6 +40,8 @@ if (\OC::$server->getConfig()->getSystemValue('installed', false)) {
 	$application->add(new OC\Core\Command\Background\WebCron(\OC::$server->getConfig()));
 	$application->add(new OC\Core\Command\Background\Ajax(\OC::$server->getConfig()));
 
+	$application->add(new OC\Core\Command\Config\ListConfigs(\OC::$server->getSystemConfig(), \OC::$server->getAppConfig()));
+
 	$application->add(new OC\Core\Command\Db\GenerateChangeScript());
 	$application->add(new OC\Core\Command\Db\ConvertType(\OC::$server->getConfig(), new \OC\DB\ConnectionFactory()));
 
-- 
GitLab