LDAP PUT command now supports setting multiple keys at once

Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>
This commit is contained in:
Arthur Schiwon 2017-01-20 21:57:12 +01:00
parent 08b31fcb7d
commit 9ca4065ef5
No known key found for this signature in database
GPG key ID: 7424F1874854DF23
3 changed files with 42 additions and 37 deletions

View file

@ -133,7 +133,7 @@ class ConfigAPIController extends OCSController {
* <ocs>
* <meta>
* <status>ok</status>
* <statuscode>100</statuscode>
* <statuscode>200</statuscode>
* <message>OK</message>
* </meta>
* <data/>
@ -170,7 +170,7 @@ class ConfigAPIController extends OCSController {
* modifies a configuration
*
* Example:
* curl -X PUT -d "key=ldapHost&value=ldaps://my.ldap.server" \
* curl -X PUT -d "configData[ldapHost]=ldaps://my.ldap.server&configData[ldapPort]=636" \
* -H "OCS-APIREQUEST: true" -u $admin:$password \
* https://nextcloud.server/ocs/v2.php/apps/user_ldap/api/v1/config/s60
*
@ -178,33 +178,35 @@ class ConfigAPIController extends OCSController {
* <ocs>
* <meta>
* <status>ok</status>
* <statuscode>100</statuscode>
* <statuscode>200</statuscode>
* <message>OK</message>
* </meta>
* <data/>
* </ocs>
*
* @param string $configID
* @param string $key
* @param string $value
* @param array $configData
* @return DataResponse
* @throws OCSException
*/
public function modify($configID, $key, $value) {
public function modify($configID, $configData) {
$this->ensureConfigIDExists($configID);
try {
$config = new Configuration($configID);
if(!is_array($configData)) {
throw new OCSBadRequestException('configData is not properly set');
}
$configKeys = $config->getConfigTranslationArray();
if(!isset($configKeys[$key]) && !in_array($key, $configKeys, true)) {
throw new OCSBadRequestException('Invalid config key');
try {
$configuration = new Configuration($configID);
$configKeys = $configuration->getConfigTranslationArray();
foreach ($configKeys as $i => $key) {
if(isset($configData[$key])) {
$configuration->$key = $configData[$key];
}
}
$config->$key = $value;
$config->saveConfiguration();
} catch(OCSException $e) {
throw $e;
$configuration->saveConfiguration();
} catch (\Exception $e) {
$this->logger->logException($e);
throw new OCSException('An issue occurred when modifying the config.');

View file

@ -23,6 +23,7 @@
*/
use Behat\Behat\Context\Context;
use Behat\Gherkin\Node\TableNode;
class LDAPContext implements Context {
use BasicStructure;
@ -56,17 +57,6 @@ class LDAPContext implements Context {
$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]])
);
}
/**
* @Given /^the response should contain a tag "([^"]*)" with value "([^"]*)"$/
*/
@ -85,4 +75,11 @@ class LDAPContext implements Context {
null
);
}
/**
* @Given /^setting the LDAP configuration to$/
*/
public function settingTheLDAPConfigurationTo(TableNode $configData) {
$this->sendingToWith('PUT', $this->apiUrl . '/' . $this->configID, $configData);
}
}

View file

@ -31,28 +31,33 @@ Feature: LDAP
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"
When setting the LDAP configuration to
| configData[ldapHost] | ldaps://my.ldap.server |
Then the OCS status code should be "200"
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 "400"
Scenario: Modifying 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 |
| configData[ldapHost] | ldaps://my.ldap.server |
Then the OCS status code should be "404"
And the HTTP status code should be "404"
Scenario: Modifying an existing configuration with malformed configData
Given As an "admin"
And creating an LDAP configuration at "/apps/user_ldap/api/v1/config"
When setting the LDAP configuration to
| configData | ldapHost=ldaps://my.ldap.server |
Then the OCS status code should be "400"
And the HTTP status code should be "400"
Scenario: create, modify and get a configuration
Given As an "admin"
And creating an LDAP configuration at "/apps/user_ldap/api/v1/config"
And setting "ldapHost" of the LDAP configuration to "ldaps://my.ldap.server"
And setting "ldapLoginFilter" of the LDAP configuration to "(&(|(objectclass=inetOrgPerson))(uid=%uid))"
And setting "ldapAgentPassword" of the LDAP configuration to "psst,secret"
And setting the LDAP configuration to
| configData[ldapHost] | ldaps://my.ldap.server |
| configData[ldapLoginFilter] | (&(\|(objectclass=inetOrgPerson))(uid=%uid)) |
| configData[ldapAgentPassword] | psst,secret |
When getting the LDAP configuration with showPassword "0"
Then the OCS status code should be "200"
And the HTTP status code should be "200"
@ -63,7 +68,8 @@ Feature: LDAP
Scenario: receiving password in plain text
Given As an "admin"
And creating an LDAP configuration at "/apps/user_ldap/api/v1/config"
And setting "ldapAgentPassword" of the LDAP configuration to "psst,secret"
And setting the LDAP configuration to
| configData[ldapAgentPassword] | psst,secret |
When getting the LDAP configuration with showPassword "1"
Then the OCS status code should be "200"
And the HTTP status code should be "200"