diff options
author | Arthur Schiwon <blizzz@arthur-schiwon.de> | 2017-01-19 11:09:04 +0100 |
---|---|---|
committer | Arthur Schiwon <blizzz@arthur-schiwon.de> | 2017-01-19 11:09:04 +0100 |
commit | 01d469dfea5c3a3db4ddd449b322f3f9f5ae98b9 (patch) | |
tree | 6159aedc9f7feba01dd3d503ff61605ee2a83708 | |
parent | 18a75bec0d87b847790e0c5b695e3d02993ca710 (diff) | |
download | nextcloud-server-01d469dfea5c3a3db4ddd449b322f3f9f5ae98b9.tar.gz nextcloud-server-01d469dfea5c3a3db4ddd449b322f3f9f5ae98b9.zip |
add LDAP OCS Api for modifying a configuration
Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>
-rw-r--r-- | apps/user_ldap/appinfo/routes.php | 1 | ||||
-rw-r--r-- | apps/user_ldap/lib/Controller/ConfigAPIController.php | 69 | ||||
-rw-r--r-- | build/integration/features/bootstrap/LDAPContext.php | 19 | ||||
-rw-r--r-- | build/integration/ldap_features/ldap-ocs.feature | 23 |
4 files changed, 101 insertions, 11 deletions
diff --git a/apps/user_ldap/appinfo/routes.php b/apps/user_ldap/appinfo/routes.php index c80d6af76eb..f08ec195add 100644 --- a/apps/user_ldap/appinfo/routes.php +++ b/apps/user_ldap/appinfo/routes.php @@ -41,6 +41,7 @@ $application = new \OCP\AppFramework\App('user_ldap'); $application->registerRoutes($this, [ 'ocs' => [ ['name' => 'ConfigAPI#create', 'url' => '/api/v1/config', 'verb' => 'POST'], + ['name' => 'ConfigAPI#modify', 'url' => '/api/v1/config/{configID}', 'verb' => 'PUT'], ['name' => 'ConfigAPI#delete', 'url' => '/api/v1/config/{configID}', 'verb' => 'DELETE'], ] ]); diff --git a/apps/user_ldap/lib/Controller/ConfigAPIController.php b/apps/user_ldap/lib/Controller/ConfigAPIController.php index bfdce302af5..8aeb771608d 100644 --- a/apps/user_ldap/lib/Controller/ConfigAPIController.php +++ b/apps/user_ldap/lib/Controller/ConfigAPIController.php @@ -145,7 +145,7 @@ class ConfigAPIController extends OCSController { * <data/> * </ocs> * - * @param $configID + * @param string $configID * @return DataResponse * @throws OCSBadRequestException * @throws OCSException @@ -158,10 +158,7 @@ class ConfigAPIController extends OCSController { } try { - $prefixes = $this->ldapHelper->getServerConfigurationPrefixes(); - if(!in_array($configID, $prefixes)) { - throw new OCSNotFoundException('Config ID not found'); - } + $this->ensureConfigIDExists($configID); if(!$this->ldapHelper->deleteServerConfiguration($configID)) { throw new OCSException('Could not delete configuration'); } @@ -174,4 +171,66 @@ class ConfigAPIController extends OCSController { return new DataResponse(); } + + /** + * modifies a configuration + * + * Example: + * curl -X PUT -d "key=ldapHost&value=ldaps://my.ldap.server" \ + * -H "OCS-APIREQUEST: true" -u $admin:$password \ + * https://nextcloud.server/ocs/v1.php/apps/user_ldap/api/v1/config/s60 + * + * <?xml version="1.0"?> + * <ocs> + * <meta> + * <status>ok</status> + * <statuscode>100</statuscode> + * <message>OK</message> + * <totalitems></totalitems> + * <itemsperpage></itemsperpage> + * </meta> + * <data/> + * </ocs> + * + * @param string $configID + * @param string $key + * @param string $value + * @return DataResponse + * @throws OCSException + */ + public function modify($configID, $key, $value) { + $this->ensureConfigIDExists($configID); + + try { + $config = new Configuration($configID); + + $configKeys = $config->getConfigTranslationArray(); + if(!isset($configKeys[$key]) && !in_array($key, $configKeys, true)) { + throw new OCSBadRequestException('Invalid config key'); + } + + $config->$key = $value; + $config->saveConfiguration(); + } catch(OCSException $e) { + throw $e; + } catch (\Exception $e) { + $this->logger->logException($e); + throw new OCSException('An issue occurred when modifying the config.'); + } + + return new DataResponse(); + } + + /** + * if the given config ID is not available, an exception is thrown + * + * @param string $configID + * @throws OCSNotFoundException + */ + private function ensureConfigIDExists($configID) { + $prefixes = $this->ldapHelper->getServerConfigurationPrefixes(); + if(!in_array($configID, $prefixes)) { + throw new OCSNotFoundException('Config ID not found'); + } + } } diff --git a/build/integration/features/bootstrap/LDAPContext.php b/build/integration/features/bootstrap/LDAPContext.php index 92e21715cd4..3a66641685a 100644 --- a/build/integration/features/bootstrap/LDAPContext.php +++ b/build/integration/features/bootstrap/LDAPContext.php @@ -40,9 +40,9 @@ class LDAPContext implements Context { } /** - * @Given /^creating a configuration at "([^"]*)"$/ + * @Given /^creating an LDAP configuration at "([^"]*)"$/ */ - public function creatingAConfigurationAt($apiUrl) { + public function creatingAnLDAPConfigurationAt($apiUrl) { $this->apiUrl = $apiUrl; $this->sendingToWith('POST', $this->apiUrl, null); $configElements = $this->response->xml()->data[0]->configID; @@ -50,9 +50,20 @@ class LDAPContext implements Context { } /** - * @When /^deleting the configuration$/ + * @When /^deleting the LDAP configuration$/ */ - public function deletingTheConfiguration() { + public function deletingTheLDAPConfiguration() { $this->sendingToWith('DELETE', $this->apiUrl . '/' . $this->configID, null); } + + /** + * @When /^setting "([^"]*)" of the LDAP configuration to "([^"]*)"$/ + */ + public function settingOfTheLDAPConfigurationTo($key, $value) { + $this->sendingToWith( + 'PUT', + $this->apiUrl . '/' . $this->configID, + new \Behat\Gherkin\Node\TableNode([['key', $key], ['value', $value]]) + ); + } } diff --git a/build/integration/ldap_features/ldap-ocs.feature b/build/integration/ldap_features/ldap-ocs.feature index 8498ce2094b..7d3a4fd9491 100644 --- a/build/integration/ldap_features/ldap-ocs.feature +++ b/build/integration/ldap_features/ldap-ocs.feature @@ -21,7 +21,26 @@ Feature: LDAP Scenario: Create and delete a configuration Given As an "admin" - And creating a configuration at "/apps/user_ldap/api/v1/config" - When deleting the configuration + And creating an LDAP configuration at "/apps/user_ldap/api/v1/config" + When deleting the LDAP configuration Then the OCS status code should be "100" And the HTTP status code should be "200" + + Scenario: Create and modify a configuration + Given As an "admin" + And creating an LDAP configuration at "/apps/user_ldap/api/v1/config" + When setting "ldapHost" of the LDAP configuration to "ldaps://my.ldap.server" + Then the OCS status code should be "100" + And the HTTP status code should be "200" + # Testing an invalid config key + When setting "crack0r" of the LDAP configuration to "foobar" + Then the OCS status code should be "400" + And the HTTP status code should be "200" + + Scenario: Modiying a non-existing configuration + Given As an "admin" + When sending "PUT" to "/apps/user_ldap/api/v1/config/s666" with + | key | ldapHost | + | value | ldaps://my.ldap.server | + Then the OCS status code should be "404" + And the HTTP status code should be "200" |