LDAP PUT command now supports setting multiple keys at once
Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>
This commit is contained in:
parent
08b31fcb7d
commit
9ca4065ef5
|
@ -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.');
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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"
|
||||
|
|
Loading…
Reference in New Issue