diff --git a/apps/user_ldap/appinfo/register_command.php b/apps/user_ldap/appinfo/register_command.php new file mode 100644 index 0000000000..57e0ccbdad --- /dev/null +++ b/apps/user_ldap/appinfo/register_command.php @@ -0,0 +1,11 @@ + + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ + +$application->add(new OCA\user_ldap\Command\showConfig()); +$application->add(new OCA\user_ldap\Command\setConfig()); +$application->add(new OCA\user_ldap\Command\testConfig()); diff --git a/apps/user_ldap/command/setconfig.php b/apps/user_ldap/command/setconfig.php new file mode 100644 index 0000000000..465537a350 --- /dev/null +++ b/apps/user_ldap/command/setconfig.php @@ -0,0 +1,69 @@ + + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ + +namespace OCA\user_ldap\Command; + +use Symfony\Component\Console\Command\Command; +use Symfony\Component\Console\Input\InputArgument; +use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Input\InputOption; +use Symfony\Component\Console\Output\OutputInterface; +use \OCA\user_ldap\lib\Helper; +use \OCA\user_ldap\lib\Configuration; + +class SetConfig extends Command { + + protected function configure() { + $this + ->setName('ldap:set-config') + ->setDescription('shows the LDAP configuration') + ->addArgument( + 'configID', + InputArgument::REQUIRED, + 'the configuration ID' + ) + ->addArgument( + 'configKey', + InputArgument::REQUIRED, + 'the configuration key' + ) + ->addArgument( + 'configValue', + InputArgument::REQUIRED, + 'the new configuration value' + ) + ; + } + + protected function execute(InputInterface $input, OutputInterface $output) { + $availableConfigs = Helper::getServerConfigurationPrefixes(); + $configID = $input->getArgument('configID'); + if(!in_array($configID, $availableConfigs)) { + $output->writeln("Invalid configID"); + return; + } + + $this->setValue( + $configID, + $input->getArgument('configKey'), + $input->getArgument('configValue') + ); + } + + /** + * save the configuration value as provided + * @param string configID + * @param string configKey + * @param string configValue + */ + protected function setValue($configID, $key, $value) { + $configHolder = new Configuration($configID); + $configHolder->$key = $value; + $configHolder->saveConfiguration(); + } +} diff --git a/apps/user_ldap/command/showconfig.php b/apps/user_ldap/command/showconfig.php new file mode 100644 index 0000000000..e15ec4a238 --- /dev/null +++ b/apps/user_ldap/command/showconfig.php @@ -0,0 +1,77 @@ + + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ + +namespace OCA\user_ldap\Command; + +use Symfony\Component\Console\Command\Command; +use Symfony\Component\Console\Input\InputArgument; +use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Input\InputOption; +use Symfony\Component\Console\Output\OutputInterface; +use \OCA\user_ldap\lib\Helper; +use \OCA\user_ldap\lib\Configuration; + +class ShowConfig extends Command { + + protected function configure() { + $this + ->setName('ldap:show-config') + ->setDescription('shows the LDAP configuration') + ->addArgument( + 'configID', + InputArgument::OPTIONAL, + 'will show the configuration of the specified id' + ) + ; + } + + protected function execute(InputInterface $input, OutputInterface $output) { + $availableConfigs = Helper::getServerConfigurationPrefixes(); + $configID = $input->getArgument('configID'); + if(!is_null($configID)) { + $configIDs[] = $configID; + if(!in_array($configIDs[0], $availableConfigs)) { + $output->writeln("Invalid configID"); + return; + } + } else { + $configIDs = $availableConfigs; + } + + $this->renderConfigs($configIDs, $output); + } + + /** + * prints the LDAP configuration(s) + * @param string[] configID(s) + * @param OutputInterface $output + */ + protected function renderConfigs($configIDs, $output) { + $ldapWrapper = new \OCA\user_ldap\lib\LDAP(); + foreach($configIDs as $id) { + $configHolder = new Configuration($id); + $configuration = $configHolder->getConfiguration(); + ksort($configuration); + + $table = $this->getHelperSet()->get('table'); + $table->setHeaders(array('Configuration', $id)); + $rows = array(); + foreach($configuration as $key => $value) { + if($key === 'ldapAgentPassword') { + $value = '***'; + } + if(is_array($value)) { + $value = implode(';', $value); + } + $rows[] = array($key, $value); + } + $table->setRows($rows); + $table->render($output); + } + } +} diff --git a/apps/user_ldap/command/testconfig.php b/apps/user_ldap/command/testconfig.php new file mode 100644 index 0000000000..3bf91458b5 --- /dev/null +++ b/apps/user_ldap/command/testconfig.php @@ -0,0 +1,75 @@ + + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ + +namespace OCA\user_ldap\Command; + +use Symfony\Component\Console\Command\Command; +use Symfony\Component\Console\Input\InputArgument; +use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Input\InputOption; +use Symfony\Component\Console\Output\OutputInterface; +use \OCA\user_ldap\lib\Helper; +use \OCA\user_ldap\lib\Connection; + +class TestConfig extends Command { + + protected function configure() { + $this + ->setName('ldap:test-config') + ->setDescription('shows the LDAP configuration') + ->addArgument( + 'configID', + InputArgument::REQUIRED, + 'the configuration ID' + ) + ; + } + + protected function execute(InputInterface $input, OutputInterface $output) { + $availableConfigs = Helper::getServerConfigurationPrefixes(); + $configID = $input->getArgument('configID'); + if(!in_array($configID, $availableConfigs)) { + $output->writeln("Invalid configID"); + return; + } + + $result = $this->testConfig($configID); + if($result === 0) { + $output->writeln('The configuration is valid and the connection could be established!'); + } else if($result === 1) { + $output->writeln('The configuration is invalid. Please have a look at the logs for further details.'); + } else if($result === 2) { + $output->writeln('The configuration is valid, but the Bind failed. Please check the server settings and credentials.'); + } else { + $output->writeln('Your LDAP server was kidnapped by aliens.'); + } + } + + /** + * tests the specified connection + * @param string configID + * @return int + */ + protected function testConfig($configID) { + $lw = new \OCA\user_ldap\lib\LDAP(); + $connection = new Connection($lw, $configID); + + //ensure validation is run before we attempt the bind + $connection->getConfiguration(); + + if(!$connection->setConfiguration(array( + 'ldap_configuration_active' => 1, + ))) { + return 1; + } + if($connection->bind()) { + return 0; + } + return 2; + } +} diff --git a/apps/user_ldap/lib/configuration.php b/apps/user_ldap/lib/configuration.php index 9c455929b4..4cb00561b3 100644 --- a/apps/user_ldap/lib/configuration.php +++ b/apps/user_ldap/lib/configuration.php @@ -272,7 +272,7 @@ class Configuration { if(empty($value)) { $value = ''; } else if (!is_array($value)) { - $value = preg_split('/\r\n|\r|\n/', $value); + $value = preg_split('/\r\n|\r|\n|;/', $value); if($value === false) { $value = ''; }