]> source.dussan.org Git - nextcloud-server.git/commitdiff
Allow to change account info via provisioning api 4221/head
authorJoas Schilling <coding@schilljs.com>
Wed, 5 Apr 2017 12:51:55 +0000 (14:51 +0200)
committerJoas Schilling <coding@schilljs.com>
Fri, 7 Apr 2017 10:50:47 +0000 (12:50 +0200)
Signed-off-by: Joas Schilling <coding@schilljs.com>
apps/provisioning_api/lib/Controller/UsersController.php
apps/provisioning_api/tests/Controller/UsersControllerTest.php
build/integration/features/bootstrap/Provisioning.php
build/integration/features/provisioning-v1.feature

index 9155d34276b75f3a4be74d8af728c8061879b092..cb4e4b329171d4f04a6056b21ee618398e4ab2a3 100644 (file)
@@ -290,12 +290,12 @@ class UsersController extends OCSController {
                // Find the data
                $data['id'] = $targetUserObject->getUID();
                $data['quota'] = $this->fillStorageInfo($userId);
-               $data['email'] = $targetUserObject->getEMailAddress();
-               $data['displayname'] = $targetUserObject->getDisplayName();
-               $data['phone'] = $userAccount[\OC\Accounts\AccountManager::PROPERTY_PHONE]['value'];
-               $data['address'] = $userAccount[\OC\Accounts\AccountManager::PROPERTY_ADDRESS]['value'];
-               $data['webpage'] = $userAccount[\OC\Accounts\AccountManager::PROPERTY_WEBSITE]['value'];
-               $data['twitter'] = $userAccount[\OC\Accounts\AccountManager::PROPERTY_TWITTER]['value'];
+               $data[AccountManager::PROPERTY_EMAIL] = $targetUserObject->getEMailAddress();
+               $data[AccountManager::PROPERTY_DISPLAYNAME] = $targetUserObject->getDisplayName();
+               $data[AccountManager::PROPERTY_PHONE] = $userAccount[AccountManager::PROPERTY_PHONE]['value'];
+               $data[AccountManager::PROPERTY_ADDRESS] = $userAccount[AccountManager::PROPERTY_ADDRESS]['value'];
+               $data[AccountManager::PROPERTY_WEBSITE] = $userAccount[AccountManager::PROPERTY_WEBSITE]['value'];
+               $data[AccountManager::PROPERTY_TWITTER] = $userAccount[AccountManager::PROPERTY_TWITTER]['value'];
                $data['groups'] = $gids;
 
                return $data;
@@ -327,8 +327,13 @@ class UsersController extends OCSController {
                if($userId === $currentLoggedInUser->getUID()) {
                        // Editing self (display, email)
                        $permittedFields[] = 'display';
-                       $permittedFields[] = 'email';
+                       $permittedFields[] = AccountManager::PROPERTY_DISPLAYNAME;
+                       $permittedFields[] = AccountManager::PROPERTY_EMAIL;
                        $permittedFields[] = 'password';
+                       $permittedFields[] = AccountManager::PROPERTY_PHONE;
+                       $permittedFields[] = AccountManager::PROPERTY_ADDRESS;
+                       $permittedFields[] = AccountManager::PROPERTY_WEBSITE;
+                       $permittedFields[] = AccountManager::PROPERTY_TWITTER;
                        // If admin they can edit their own quota
                        if($this->groupManager->isAdmin($currentLoggedInUser->getUID())) {
                                $permittedFields[] = 'quota';
@@ -340,9 +345,14 @@ class UsersController extends OCSController {
                        || $this->groupManager->isAdmin($currentLoggedInUser->getUID())) {
                                // They have permissions over the user
                                $permittedFields[] = 'display';
-                               $permittedFields[] = 'quota';
+                               $permittedFields[] = AccountManager::PROPERTY_DISPLAYNAME;
+                               $permittedFields[] = AccountManager::PROPERTY_EMAIL;
                                $permittedFields[] = 'password';
-                               $permittedFields[] = 'email';
+                               $permittedFields[] = AccountManager::PROPERTY_PHONE;
+                               $permittedFields[] = AccountManager::PROPERTY_ADDRESS;
+                               $permittedFields[] = AccountManager::PROPERTY_WEBSITE;
+                               $permittedFields[] = AccountManager::PROPERTY_TWITTER;
+                               $permittedFields[] = 'quota';
                        } else {
                                // No rights
                                throw new OCSException('', \OCP\API::RESPOND_UNAUTHORISED);
@@ -355,6 +365,7 @@ class UsersController extends OCSController {
                // Process the edit
                switch($key) {
                        case 'display':
+                       case AccountManager::PROPERTY_DISPLAYNAME:
                                $targetUser->setDisplayName($value);
                                break;
                        case 'quota':
@@ -381,13 +392,23 @@ class UsersController extends OCSController {
                        case 'password':
                                $targetUser->setPassword($value);
                                break;
-                       case 'email':
+                       case AccountManager::PROPERTY_EMAIL:
                                if(filter_var($value, FILTER_VALIDATE_EMAIL)) {
                                        $targetUser->setEMailAddress($value);
                                } else {
                                        throw new OCSException('', 102);
                                }
                                break;
+                       case AccountManager::PROPERTY_PHONE:
+                       case AccountManager::PROPERTY_ADDRESS:
+                       case AccountManager::PROPERTY_WEBSITE:
+                       case AccountManager::PROPERTY_TWITTER:
+                               $userAccount = $this->accountManager->getUser($targetUser);
+                               if ($userAccount[$key]['value'] !== $value) {
+                                       $userAccount[$key]['value'] = $value;
+                                       $this->accountManager->updateUser($targetUser, $userAccount);
+                               }
+                               break;
                        default:
                                throw new OCSException('', 103);
                }
index b5b63319d3534cba34486c18a940bb1cf6fb0f7b..2c85fe0483b8539ebfb84f9260113a4a3f5e705e 100644 (file)
@@ -734,7 +734,7 @@ class UsersControllerTest extends TestCase {
                        'displayname' => 'Demo User',
                        'phone' => 'phone',
                        'address' => 'address',
-                       'webpage' => 'website',
+                       'website' => 'website',
                        'twitter' => 'twitter',
                        'groups' => ['group0', 'group1', 'group2']
                ];
@@ -823,7 +823,7 @@ class UsersControllerTest extends TestCase {
                        'displayname' => 'Demo User',
                        'phone' => 'phone',
                        'address' => 'address',
-                       'webpage' => 'website',
+                       'website' => 'website',
                        'twitter' => 'twitter',
                        'groups' => []
                ];
@@ -952,7 +952,7 @@ class UsersControllerTest extends TestCase {
                        'displayname' => 'Subadmin User',
                        'phone' => 'phone',
                        'address' => 'address',
-                       'webpage' => 'website',
+                       'website' => 'website',
                        'twitter' => 'twitter',
                        'groups' => []
                ];
@@ -2636,7 +2636,7 @@ class UsersControllerTest extends TestCase {
                                        'displayname' => 'Demo User',
                                        'phone' => 'phone',
                                        'address' => 'address',
-                                       'webpage' => 'website',
+                                       'website' => 'website',
                                        'twitter' => 'twitter'
                                ]
                        );
@@ -2648,7 +2648,7 @@ class UsersControllerTest extends TestCase {
                        'email' => 'demo@owncloud.org',
                        'phone' => 'phone',
                        'address' => 'address',
-                       'webpage' => 'website',
+                       'website' => 'website',
                        'twitter' => 'twitter',
                        'display-name' => 'Demo User'
                ];
@@ -2696,7 +2696,7 @@ class UsersControllerTest extends TestCase {
                        'email' => 'demo@owncloud.org',
                        'phone' => 'phone',
                        'address' => 'address',
-                       'webpage' => 'website',
+                       'website' => 'website',
                        'twitter' => 'twitter',
                        'displayname' => 'Demo User'
                ];
index 2e17508120cdb26453e1bdeef88335d37ffd4748..94da63a653f0d3b17824874d635a0432f4f5df61 100644 (file)
@@ -121,6 +121,32 @@ trait Provisioning {
                $client->send($client->createRequest('GET', $url, $options2));
        }
 
+       /**
+        * @Then /^user "([^"]*)" has$/
+        *
+        * @param string $user
+        * @param \Behat\Gherkin\Node\TableNode|null $settings
+        */
+       public function userHasSetting($user, $settings) {
+               $fullUrl = $this->baseUrl . "v{$this->apiVersion}.php/cloud/users/$user";
+               $client = new Client();
+               $options = [];
+               $options['auth'] = $this->adminUser;
+               $options['headers'] = [
+                       'OCS-APIREQUEST' => 'true',
+               ];
+
+               $response = $client->send($client->createRequest("GET", $fullUrl, $options));
+               foreach ($settings->getRows() as $setting) {
+                       $value = json_decode(json_encode($response->xml()->data->{$setting[0]}), 1);
+                       if (isset($value[0])) {
+                               PHPUnit_Framework_Assert::assertEquals($setting[1], $value[0], "", 0.0, 10, true);
+                       } else {
+                               PHPUnit_Framework_Assert::assertEquals('', $setting[1]);
+                       }
+               }
+       }
+
        public function createUser($user) {
                $previous_user = $this->currentUser;
                $this->currentUser = "admin";
index ad9d901d0515cf0ae40f824ec4094a4a30e56614..555960b8a5507ab2e1ef9c114a59094e4a803f70 100644 (file)
@@ -32,6 +32,14 @@ Feature: provisioning
                        | password | 123456 |
                Then the OCS status code should be "102"
                And the HTTP status code should be "200"
+               And user "brand-new-user" has
+                       | id | brand-new-user |
+                       | displayname | brand-new-user |
+                       | email |  |
+                       | phone |  |
+                       | address |  |
+                       | website |  |
+                       | twitter |  |
 
        Scenario: Get an existing user
                Given As an "admin"
@@ -52,13 +60,48 @@ Feature: provisioning
                Given As an "admin"
                And user "brand-new-user" exists
                When sending "PUT" to "/cloud/users/brand-new-user" with
+                       | key | displayname |
+                       | value | Brand New User |
+               And the OCS status code should be "100"
+               And the HTTP status code should be "200"
+               And sending "PUT" to "/cloud/users/brand-new-user" with
                        | key | quota |
                        | value | 12MB |
+               And the OCS status code should be "100"
+               And the HTTP status code should be "200"
+               And sending "PUT" to "/cloud/users/brand-new-user" with
                        | key | email |
                        | value | brand-new-user@gmail.com |
-               Then the OCS status code should be "100"
+               And the OCS status code should be "100"
                And the HTTP status code should be "200"
-               And user "brand-new-user" exists
+               And sending "PUT" to "/cloud/users/brand-new-user" with
+                       | key | phone |
+                       | value | 0123 456 789 |
+               And the OCS status code should be "100"
+               And the HTTP status code should be "200"
+               And sending "PUT" to "/cloud/users/brand-new-user" with
+                       | key | address |
+                       | value | Foo Bar Town |
+               And the OCS status code should be "100"
+               And the HTTP status code should be "200"
+               And sending "PUT" to "/cloud/users/brand-new-user" with
+                       | key | website |
+                       | value | https://nextcloud.com |
+               And the OCS status code should be "100"
+               And the HTTP status code should be "200"
+               And sending "PUT" to "/cloud/users/brand-new-user" with
+                       | key | twitter |
+                       | value | Nextcloud |
+               And the OCS status code should be "100"
+               And the HTTP status code should be "200"
+               Then user "brand-new-user" has
+                       | id | brand-new-user |
+                       | displayname | Brand New User |
+                       | email | brand-new-user@gmail.com |
+                       | phone | 0123 456 789 |
+                       | address | Foo Bar Town |
+                       | website | https://nextcloud.com |
+                       | twitter | Nextcloud |
 
        Scenario: Create a group
                Given As an "admin"