aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArthur Schiwon <blizzz@arthur-schiwon.de>2021-06-11 13:34:53 +0200
committerbackportbot[bot] <backportbot[bot]@users.noreply.github.com>2021-06-30 05:15:48 +0000
commit4398cf85c121db105a65dede2542f7074c3e76c1 (patch)
tree33323a68ffa4c0d932a5310d9728d9c3e234af2f
parente74f5aeec27d943ba7ba276190bf2846bf49ee71 (diff)
downloadnextcloud-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.php14
-rw-r--r--apps/provisioning_api/tests/Controller/UsersControllerTest.php9
-rw-r--r--lib/private/Accounts/AccountManager.php28
-rw-r--r--tests/lib/Accounts/AccountManagerTest.php1
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]);