LDAP OCS Api for create config
Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>
This commit is contained in:
parent
012708e1ba
commit
689df9a843
6 changed files with 177 additions and 19 deletions
|
@ -36,3 +36,10 @@ $this->create('user_ldap_ajax_testConfiguration', 'ajax/testConfiguration.php')
|
|||
->actionInclude('user_ldap/ajax/testConfiguration.php');
|
||||
$this->create('user_ldap_ajax_wizard', 'ajax/wizard.php')
|
||||
->actionInclude('user_ldap/ajax/wizard.php');
|
||||
|
||||
$application = new \OCP\AppFramework\App('user_ldap');
|
||||
$application->registerRoutes($this, [
|
||||
'ocs' => [
|
||||
['name' => 'ConfigAPI#create', 'url' => '/api/v1/config', 'verb' => 'POST'],
|
||||
]
|
||||
]);
|
||||
|
|
|
@ -29,6 +29,7 @@ use OCA\User_LDAP\Configuration;
|
|||
use OCA\User_LDAP\Helper;
|
||||
use Symfony\Component\Console\Command\Command;
|
||||
use Symfony\Component\Console\Input\InputInterface;
|
||||
use Symfony\Component\Console\Input\InputOption;
|
||||
use Symfony\Component\Console\Output\OutputInterface;
|
||||
|
||||
class CreateEmptyConfig extends Command {
|
||||
|
@ -47,29 +48,24 @@ class CreateEmptyConfig extends Command {
|
|||
$this
|
||||
->setName('ldap:create-empty-config')
|
||||
->setDescription('creates an empty LDAP configuration')
|
||||
->addOption(
|
||||
'only-print-prefix',
|
||||
'p',
|
||||
InputOption::VALUE_NONE,
|
||||
'outputs only the prefix'
|
||||
)
|
||||
;
|
||||
}
|
||||
|
||||
protected function execute(InputInterface $input, OutputInterface $output) {
|
||||
$configPrefix = $this->getNewConfigurationPrefix();
|
||||
$output->writeln("Created new configuration with configID '{$configPrefix}'");
|
||||
|
||||
$configPrefix = $this->helper->getNextServerConfigurationPrefix();
|
||||
$configHolder = new Configuration($configPrefix);
|
||||
$configHolder->saveConfiguration();
|
||||
}
|
||||
|
||||
protected function getNewConfigurationPrefix() {
|
||||
$serverConnections = $this->helper->getServerConfigurationPrefixes();
|
||||
|
||||
// first connection uses no prefix
|
||||
if(sizeof($serverConnections) == 0) {
|
||||
return '';
|
||||
$prose = '';
|
||||
if(!$input->getOption('only-print-prefix')) {
|
||||
$prose = 'Created new configuration with configID ';
|
||||
}
|
||||
|
||||
sort($serverConnections);
|
||||
$lastKey = array_pop($serverConnections);
|
||||
$lastNumber = intval(str_replace('s', '', $lastKey));
|
||||
$nextPrefix = 's' . str_pad($lastNumber + 1, 2, '0', STR_PAD_LEFT);
|
||||
return $nextPrefix;
|
||||
$output->writeln($prose . "{$configPrefix}");
|
||||
}
|
||||
}
|
||||
|
|
|
@ -393,9 +393,12 @@ class Configuration {
|
|||
* @return bool
|
||||
*/
|
||||
protected function saveValue($varName, $value) {
|
||||
return \OCP\Config::setAppValue('user_ldap',
|
||||
$this->configPrefix.$varName,
|
||||
$value);
|
||||
\OC::$server->getConfig()->setAppValue(
|
||||
'user_ldap',
|
||||
$this->configPrefix.$varName,
|
||||
$value
|
||||
);
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
126
apps/user_ldap/lib/Controller/ConfigAPIController.php
Normal file
126
apps/user_ldap/lib/Controller/ConfigAPIController.php
Normal file
|
@ -0,0 +1,126 @@
|
|||
<?php
|
||||
/**
|
||||
* @copyright Copyright (c) 2017 Arthur Schiwon <blizzz@arthur-schiwon.de>
|
||||
*
|
||||
* @author Arthur Schiwon <blizzz@arthur-schiwon.de>
|
||||
*
|
||||
* @license GNU AGPL version 3 or any later version
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as
|
||||
* published by the Free Software Foundation, either version 3 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* 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
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
namespace OCA\User_LDAP\Controller;
|
||||
|
||||
use OC\CapabilitiesManager;
|
||||
use OC\Core\Controller\OCSController;
|
||||
use OC\Security\Bruteforce\Throttler;
|
||||
use OC\Security\IdentityProof\Manager;
|
||||
use OCA\User_LDAP\Configuration;
|
||||
use OCA\User_LDAP\Helper;
|
||||
use OCP\AppFramework\Http\DataResponse;
|
||||
use OCP\AppFramework\OCS\OCSException;
|
||||
use OCP\ILogger;
|
||||
use OCP\IRequest;
|
||||
use OCP\IUserManager;
|
||||
use OCP\IUserSession;
|
||||
|
||||
class ConfigAPIController extends OCSController {
|
||||
|
||||
/** @var Helper */
|
||||
private $ldapHelper;
|
||||
|
||||
/** @var ILogger */
|
||||
private $logger;
|
||||
|
||||
public function __construct(
|
||||
$appName,
|
||||
IRequest $request,
|
||||
CapabilitiesManager $capabilitiesManager,
|
||||
IUserSession $userSession,
|
||||
IUserManager $userManager,
|
||||
Throttler $throttler,
|
||||
Manager $keyManager,
|
||||
Helper $ldapHelper,
|
||||
ILogger $logger
|
||||
) {
|
||||
parent::__construct(
|
||||
$appName,
|
||||
$request,
|
||||
$capabilitiesManager,
|
||||
$userSession,
|
||||
$userManager,
|
||||
$throttler,
|
||||
$keyManager
|
||||
);
|
||||
|
||||
|
||||
$this->ldapHelper = $ldapHelper;
|
||||
$this->logger = $logger;
|
||||
}
|
||||
|
||||
/**
|
||||
* creates a new (empty) configuration and returns the resulting prefix
|
||||
*
|
||||
* Example: curl -X POST -H "OCS-APIREQUEST: true" -u $admin:$password \
|
||||
* https://nextcloud.server/ocs/v1.php/apps/user_ldap/api/v1/config
|
||||
*
|
||||
* results in:
|
||||
*
|
||||
* <?xml version="1.0"?>
|
||||
* <ocs>
|
||||
* <meta>
|
||||
* <status>ok</status>
|
||||
* <statuscode>100</statuscode>
|
||||
* <message>OK</message>
|
||||
* <totalitems></totalitems>
|
||||
* <itemsperpage></itemsperpage>
|
||||
* </meta>
|
||||
* <data>
|
||||
* <prefix>s40</prefix>
|
||||
* </data>
|
||||
* </ocs>
|
||||
*
|
||||
* Failing example: if an exception is thrown (e.g. Database connection lost)
|
||||
* the detailed error will be logged. The output will then look like:
|
||||
*
|
||||
* <?xml version="1.0"?>
|
||||
* <ocs>
|
||||
* <meta>
|
||||
* <status>failure</status>
|
||||
* <statuscode>999</statuscode>
|
||||
* <message>An issue occurred when creating the new config.</message>
|
||||
* <totalitems></totalitems>
|
||||
* <itemsperpage></itemsperpage>
|
||||
* </meta>
|
||||
* <data/>
|
||||
* </ocs>
|
||||
*
|
||||
* For JSON output provide the format=json parameter
|
||||
*
|
||||
* @return DataResponse
|
||||
* @throws OCSException
|
||||
*/
|
||||
public function create() {
|
||||
try {
|
||||
$configPrefix = $this->ldapHelper->getNextServerConfigurationPrefix();
|
||||
$configHolder = new Configuration($configPrefix);
|
||||
$configHolder->saveConfiguration();
|
||||
} catch (\Exception $e) {
|
||||
$this->logger->logException($e);
|
||||
throw new OCSException('An issue occurred when creating the new config.');
|
||||
}
|
||||
return new DataResponse(['prefix' => $configPrefix]);
|
||||
}
|
||||
}
|
|
@ -105,6 +105,25 @@ class Helper {
|
|||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* return the next available configuration prefix
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getNextServerConfigurationPrefix() {
|
||||
$serverConnections = $this->getServerConfigurationPrefixes();
|
||||
|
||||
if(count($serverConnections) === 0) {
|
||||
return 's01';
|
||||
}
|
||||
|
||||
sort($serverConnections);
|
||||
$lastKey = array_pop($serverConnections);
|
||||
$lastNumber = intval(str_replace('s', '', $lastKey));
|
||||
$nextPrefix = 's' . str_pad($lastNumber + 1, 2, '0', STR_PAD_LEFT);
|
||||
return $nextPrefix;
|
||||
}
|
||||
|
||||
private function getServersConfig($value) {
|
||||
$regex = '/' . $value . '$/S';
|
||||
|
||||
|
|
7
build/integration/features/ldap-ocs.feature
Normal file
7
build/integration/features/ldap-ocs.feature
Normal file
|
@ -0,0 +1,7 @@
|
|||
Feature: LDAP
|
||||
|
||||
Scenario: Creating an new, empty configuration
|
||||
Given As an "admin"
|
||||
When sending "POST" to "/apps/user_ldap/api/v1/config"
|
||||
Then the OCS status code should be "100"
|
||||
And the HTTP status code should be "200"
|
Loading…
Reference in a new issue