Skip to content

Commit

Permalink
Merge pull request #27195 from nextcloud/backport/27188/stable21
Browse files Browse the repository at this point in the history
[stable21] Fix the get editable fields endpoint without a user id
  • Loading branch information
nickvergessen authored May 31, 2021
2 parents 4bf9b3a + 533eb89 commit 94ec3e1
Show file tree
Hide file tree
Showing 4 changed files with 75 additions and 2 deletions.
2 changes: 1 addition & 1 deletion apps/provisioning_api/appinfo/routes.php
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@
['root' => '/cloud', 'name' => 'Users#getUser', 'url' => '/users/{userId}', 'verb' => 'GET'],
['root' => '/cloud', 'name' => 'Users#getCurrentUser', 'url' => '/user', 'verb' => 'GET'],
['root' => '/cloud', 'name' => 'Users#getEditableFields', 'url' => '/user/fields', 'verb' => 'GET'],
['root' => '/cloud', 'name' => 'Users#getEditableFields', 'url' => '/user/fields/{userId}', 'verb' => 'GET'],
['root' => '/cloud', 'name' => 'Users#getEditableFieldsForUser', 'url' => '/user/fields/{userId}', 'verb' => 'GET'],
['root' => '/cloud', 'name' => 'Users#editUser', 'url' => '/users/{userId}', 'verb' => 'PUT'],
['root' => '/cloud', 'name' => 'Users#wipeUserDevices', 'url' => '/users/{userId}/wipe', 'verb' => 'POST'],
['root' => '/cloud', 'name' => 'Users#deleteUser', 'url' => '/users/{userId}', 'verb' => 'DELETE'],
Expand Down
19 changes: 18 additions & 1 deletion apps/provisioning_api/lib/Controller/UsersController.php
Original file line number Diff line number Diff line change
Expand Up @@ -531,7 +531,24 @@ public function getCurrentUser(): DataResponse {
* @return DataResponse
* @throws OCSException
*/
public function getEditableFields(?string $userId = null): DataResponse {
public function getEditableFields(): DataResponse {
$currentLoggedInUser = $this->userSession->getUser();
if (!$currentLoggedInUser instanceof IUser) {
throw new OCSException('', OCSController::RESPOND_NOT_FOUND);
}

return $this->getEditableFieldsForUser($currentLoggedInUser->getUID());
}

/**
* @NoAdminRequired
* @NoSubAdminRequired
*
* @param string $userId
* @return DataResponse
* @throws OCSException
*/
public function getEditableFieldsForUser(string $userId): DataResponse {
$currentLoggedInUser = $this->userSession->getUser();
if (!$currentLoggedInUser instanceof IUser) {
throw new OCSException('', \OCP\API::RESPOND_NOT_FOUND);
Expand Down
30 changes: 30 additions & 0 deletions build/integration/features/bootstrap/Provisioning.php
Original file line number Diff line number Diff line change
Expand Up @@ -177,6 +177,36 @@ public function userHasSetting($user, $settings) {
}
}

/**
* @Then /^user "([^"]*)" has editable fields$/
*
* @param string $user
* @param \Behat\Gherkin\Node\TableNode|null $fields
*/
public function userHasEditableFields($user, $fields) {
$fullUrl = $this->baseUrl . "v{$this->apiVersion}.php/cloud/user/fields";
if ($user !== 'self') {
$fullUrl .= '/' . $user;
}
$client = new Client();
$options = [];
if ($this->currentUser === 'admin') {
$options['auth'] = $this->adminUser;
} else {
$options['auth'] = [$this->currentUser, $this->regularUser];
}
$options['headers'] = [
'OCS-APIREQUEST' => 'true',
];

$response = $client->get($fullUrl, $options);
$fieldsArray = json_decode(json_encode(simplexml_load_string($response->getBody())->data->element), 1);

$expectedFields = $fields->getRows();
$expectedFields = $this->simplifyArray($expectedFields);
Assert::assertEquals($expectedFields, $fieldsArray);
}

/**
* @Then /^search users by phone for region "([^"]*)" with$/
*
Expand Down
26 changes: 26 additions & 0 deletions build/integration/features/provisioning-v1.feature
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,32 @@ Feature: provisioning
| brand-new-user |
| admin |

Scenario: Get editable fields
Given As an "admin"
And user "brand-new-user" exists
Then user "brand-new-user" has editable fields
| displayname |
| email |
| phone |
| address |
| website |
| twitter |
Given As an "brand-new-user"
Then user "brand-new-user" has editable fields
| displayname |
| email |
| phone |
| address |
| website |
| twitter |
Then user "self" has editable fields
| displayname |
| email |
| phone |
| address |
| website |
| twitter |

Scenario: Edit a user
Given As an "admin"
And user "brand-new-user" exists
Expand Down

0 comments on commit 94ec3e1

Please sign in to comment.