diff options
author | Arthur Schiwon <blizzz@arthur-schiwon.de> | 2021-06-11 13:34:53 +0200 |
---|---|---|
committer | backportbot[bot] <backportbot[bot]@users.noreply.github.com> | 2021-06-30 05:15:48 +0000 |
commit | 4398cf85c121db105a65dede2542f7074c3e76c1 (patch) | |
tree | 33323a68ffa4c0d932a5310d9728d9c3e234af2f | |
parent | e74f5aeec27d943ba7ba276190bf2846bf49ee71 (diff) | |
download | nextcloud-server-4398cf85c121db105a65dede2542f7074c3e76c1.tar.gz nextcloud-server-4398cf85c121db105a65dede2542f7074c3e76c1.zip |
prov api reports additional emails on getUser
Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>
-rw-r--r-- | apps/provisioning_api/lib/Controller/AUserData.php | 14 | ||||
-rw-r--r-- | apps/provisioning_api/tests/Controller/UsersControllerTest.php | 9 | ||||
-rw-r--r-- | lib/private/Accounts/AccountManager.php | 28 | ||||
-rw-r--r-- | tests/lib/Accounts/AccountManagerTest.php | 1 |
4 files changed, 47 insertions, 5 deletions
diff --git a/apps/provisioning_api/lib/Controller/AUserData.php b/apps/provisioning_api/lib/Controller/AUserData.php index c4fa537c2df..8069fcb4da5 100644 --- a/apps/provisioning_api/lib/Controller/AUserData.php +++ b/apps/provisioning_api/lib/Controller/AUserData.php @@ -150,6 +150,20 @@ abstract class AUserData extends OCSController { if ($includeScopes) { $data[IAccountManager::PROPERTY_EMAIL . self::SCOPE_SUFFIX] = $userAccount->getProperty(IAccountManager::PROPERTY_EMAIL)->getScope(); } + + $additionalEmails = $additionalEmailScopes = []; + $emailCollection = $userAccount->getPropertyCollection(IAccountManager::COLLECTION_EMAIL); + foreach ($emailCollection->getProperties() as $property) { + $additionalEmails[] = $property->getValue(); + if ($includeScopes) { + $additionalEmailScopes = $property->getScope(); + } + } + $data[IAccountManager::COLLECTION_EMAIL] = $additionalEmails; + if ($includeScopes) { + $data[IAccountManager::COLLECTION_EMAIL . self::SCOPE_SUFFIX] = $additionalEmailScopes; + } + $data[IAccountManager::PROPERTY_DISPLAYNAME] = $targetUserObject->getDisplayName(); if ($includeScopes) { $data[IAccountManager::PROPERTY_DISPLAYNAME . self::SCOPE_SUFFIX] = $userAccount->getProperty(IAccountManager::PROPERTY_DISPLAYNAME)->getScope(); diff --git a/apps/provisioning_api/tests/Controller/UsersControllerTest.php b/apps/provisioning_api/tests/Controller/UsersControllerTest.php index 742335a919a..f9feda60213 100644 --- a/apps/provisioning_api/tests/Controller/UsersControllerTest.php +++ b/apps/provisioning_api/tests/Controller/UsersControllerTest.php @@ -1071,7 +1071,8 @@ class UsersControllerTest extends TestCase { 'backendCapabilities' => [ 'setDisplayName' => true, 'setPassword' => true, - ] + ], + 'additional_mail' => [], ]; $this->assertEquals($expected, $this->invokePrivate($this->api, 'getUserData', ['UID'])); } @@ -1198,7 +1199,8 @@ class UsersControllerTest extends TestCase { 'backendCapabilities' => [ 'setDisplayName' => true, 'setPassword' => true, - ] + ], + 'additional_mail' => [], ]; $this->assertEquals($expected, $this->invokePrivate($this->api, 'getUserData', ['UID'])); } @@ -1363,7 +1365,8 @@ class UsersControllerTest extends TestCase { 'backendCapabilities' => [ 'setDisplayName' => false, 'setPassword' => false, - ] + ], + 'additional_mail' => [], ]; $this->assertEquals($expected, $this->invokePrivate($this->api, 'getUserData', ['UID'])); } diff --git a/lib/private/Accounts/AccountManager.php b/lib/private/Accounts/AccountManager.php index 4d75c94346b..ddc4e7c2fb0 100644 --- a/lib/private/Accounts/AccountManager.php +++ b/lib/private/Accounts/AccountManager.php @@ -39,6 +39,7 @@ use libphonenumber\PhoneNumberUtil; use OCA\Settings\BackgroundJobs\VerifyUserData; use OCP\Accounts\IAccount; use OCP\Accounts\IAccountManager; +use OCP\Accounts\IAccountPropertyCollection; use OCP\BackgroundJob\IJobList; use OCP\DB\QueryBuilder\IQueryBuilder; use OCP\IConfig; @@ -400,10 +401,13 @@ class AccountManager implements IAccountManager { */ protected function addMissingDefaultValues(array $userData) { foreach ($userData as $key => $value) { - if (!isset($userData[$key]['verified'])) { + if (!isset($userData[$key]['verified']) && !$this->isCollection($key)) { $userData[$key]['verified'] = self::NOT_VERIFIED; } } + if (!isset($userData[IAccountManager::COLLECTION_EMAIL])) { + $userData[IAccountManager::COLLECTION_EMAIL] = []; + } return $userData; } @@ -582,13 +586,33 @@ class AccountManager implements IAccountManager { 'scope' => self::SCOPE_LOCAL, 'verified' => self::NOT_VERIFIED, ], + self::COLLECTION_EMAIL => [], ]; } + private function arrayDataToCollection(string $collectionName, array $data): IAccountPropertyCollection { + $collection = new AccountPropertyCollection($collectionName); + foreach ($data as $propertyData) { + $p = new AccountProperty( + $collectionName, + $propertyData['value'] ?? '', + $propertyData['scope'] ?? self::SCOPE_LOCAL, + $propertyData['verified'] ?? self::NOT_VERIFIED, + '' + ); + $collection->addProperty($p); + } + return $collection; + } + private function parseAccountData(IUser $user, $data): Account { $account = new Account($user); foreach ($data as $property => $accountData) { - $account->setProperty($property, $accountData['value'] ?? '', $accountData['scope'] ?? self::SCOPE_LOCAL, $accountData['verified'] ?? self::NOT_VERIFIED); + if ($this->isCollection($property)) { + $account->setPropertyCollection($this->arrayDataToCollection($property, $accountData)); + } else { + $account->setProperty($property, $accountData['value'] ?? '', $accountData['scope'] ?? self::SCOPE_LOCAL, $accountData['verified'] ?? self::NOT_VERIFIED); + } } return $account; } diff --git a/tests/lib/Accounts/AccountManagerTest.php b/tests/lib/Accounts/AccountManagerTest.php index ea82bd04f3f..18f34b454f6 100644 --- a/tests/lib/Accounts/AccountManagerTest.php +++ b/tests/lib/Accounts/AccountManagerTest.php @@ -464,6 +464,7 @@ class AccountManagerTest extends TestCase { $expected = [ 'key1' => ['value' => 'value1', 'verified' => '0'], 'key2' => ['value' => 'value1', 'verified' => '0'], + 'additional_mail' => [] ]; $result = $this->invokePrivate($this->accountManager, 'addMissingDefaultValues', [$input]); |