aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArthur Schiwon <blizzz@arthur-schiwon.de>2017-01-19 11:09:04 +0100
committerArthur Schiwon <blizzz@arthur-schiwon.de>2017-01-19 11:09:04 +0100
commit01d469dfea5c3a3db4ddd449b322f3f9f5ae98b9 (patch)
tree6159aedc9f7feba01dd3d503ff61605ee2a83708
parent18a75bec0d87b847790e0c5b695e3d02993ca710 (diff)
downloadnextcloud-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.php1
-rw-r--r--apps/user_ldap/lib/Controller/ConfigAPIController.php69
-rw-r--r--build/integration/features/bootstrap/LDAPContext.php19
-rw-r--r--build/integration/ldap_features/ldap-ocs.feature23
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"