summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--apps/provisioning_api/appinfo/routes.php2
-rw-r--r--apps/provisioning_api/lib/Controller/UsersController.php19
-rw-r--r--build/integration/features/bootstrap/Provisioning.php30
-rw-r--r--build/integration/features/provisioning-v1.feature26
4 files changed, 75 insertions, 2 deletions
diff --git a/apps/provisioning_api/appinfo/routes.php b/apps/provisioning_api/appinfo/routes.php
index 6982a8ba288..2375e70a57e 100644
--- a/apps/provisioning_api/appinfo/routes.php
+++ b/apps/provisioning_api/appinfo/routes.php
@@ -53,7 +53,7 @@ return [
['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'],
diff --git a/apps/provisioning_api/lib/Controller/UsersController.php b/apps/provisioning_api/lib/Controller/UsersController.php
index eeed61f6703..6237ca04a9b 100644
--- a/apps/provisioning_api/lib/Controller/UsersController.php
+++ b/apps/provisioning_api/lib/Controller/UsersController.php
@@ -543,7 +543,24 @@ class UsersController extends AUserData {
* @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('', OCSController::RESPOND_NOT_FOUND);
diff --git a/build/integration/features/bootstrap/Provisioning.php b/build/integration/features/bootstrap/Provisioning.php
index cbe11403ba8..d613986df60 100644
--- a/build/integration/features/bootstrap/Provisioning.php
+++ b/build/integration/features/bootstrap/Provisioning.php
@@ -178,6 +178,36 @@ trait Provisioning {
}
/**
+ * @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$/
*
* @param string $user
diff --git a/build/integration/features/provisioning-v1.feature b/build/integration/features/provisioning-v1.feature
index 307440b4e4f..e56c86a2d4f 100644
--- a/build/integration/features/provisioning-v1.feature
+++ b/build/integration/features/provisioning-v1.feature
@@ -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