Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/server.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArthur Schiwon <blizzz@arthur-schiwon.de>2021-09-01 15:04:57 +0300
committerArthur Schiwon <blizzz@arthur-schiwon.de>2021-09-09 20:23:04 +0300
commit4461b9e870d9d97e1cf83f2adfdeb09cd57c3e18 (patch)
treeedc83a0cb3ea74137df13008b0d3fdeabb85dbef /apps/provisioning_api
parent0dee717c94468afeb139d9e8d9322b5fd26974b6 (diff)
enable the user to set a primary (notification) email address (backend)
- specific getters and setters on IUser and implementation - new notify_email field in provisioning API Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>
Diffstat (limited to 'apps/provisioning_api')
-rw-r--r--apps/provisioning_api/lib/Controller/AUserData.php18
-rw-r--r--apps/provisioning_api/lib/Controller/UsersController.php66
2 files changed, 57 insertions, 27 deletions
diff --git a/apps/provisioning_api/lib/Controller/AUserData.php b/apps/provisioning_api/lib/Controller/AUserData.php
index e358d282061..83ad887be77 100644
--- a/apps/provisioning_api/lib/Controller/AUserData.php
+++ b/apps/provisioning_api/lib/Controller/AUserData.php
@@ -54,6 +54,13 @@ use OCP\User\Backend\ISetPasswordBackend;
abstract class AUserData extends OCSController {
public const SCOPE_SUFFIX = 'Scope';
+ public const USER_FIELD_DISPLAYNAME = 'display';
+ public const USER_FIELD_LANGUAGE = 'language';
+ public const USER_FIELD_LOCALE = 'locale';
+ public const USER_FIELD_PASSWORD = 'password';
+ public const USER_FIELD_QUOTA = 'quota';
+ public const USER_FIELD_NOTIFICATION_EMAIL = 'notify_email';
+
/** @var IUserManager */
protected $userManager;
/** @var IConfig */
@@ -139,7 +146,7 @@ abstract class AUserData extends OCSController {
$data['lastLogin'] = $targetUserObject->getLastLogin() * 1000;
$data['backend'] = $targetUserObject->getBackendClassName();
$data['subadmin'] = $this->getUserSubAdminGroupsData($targetUserObject->getUID());
- $data['quota'] = $this->fillStorageInfo($targetUserObject->getUID());
+ $data[self::USER_FIELD_QUOTA] = $this->fillStorageInfo($targetUserObject->getUID());
try {
if ($includeScopes) {
@@ -187,8 +194,9 @@ abstract class AUserData extends OCSController {
}
$data['groups'] = $gids;
- $data['language'] = $this->l10nFactory->getUserLanguage($targetUserObject);
- $data['locale'] = $this->config->getUserValue($targetUserObject->getUID(), 'core', 'locale');
+ $data[self::USER_FIELD_LANGUAGE] = $this->l10nFactory->getUserLanguage($targetUserObject);
+ $data[self::USER_FIELD_LOCALE] = $this->config->getUserValue($targetUserObject->getUID(), 'core', 'locale');
+ $data[self::USER_FIELD_NOTIFICATION_EMAIL] = $targetUserObject->getPrimaryEMailAddress();
$backend = $targetUserObject->getBackend();
$data['backendCapabilities'] = [
@@ -238,7 +246,7 @@ abstract class AUserData extends OCSController {
'used' => $storage['used'],
'total' => $storage['total'],
'relative' => $storage['relative'],
- 'quota' => $storage['quota'],
+ self::USER_FIELD_QUOTA => $storage['quota'],
];
} catch (NotFoundException $ex) {
// User fs is not setup yet
@@ -251,7 +259,7 @@ abstract class AUserData extends OCSController {
$quota = OC_Helper::computerFileSize($quota);
}
$data = [
- 'quota' => $quota !== false ? $quota : 'none',
+ self::USER_FIELD_QUOTA => $quota !== false ? $quota : 'none',
'used' => 0
];
}
diff --git a/apps/provisioning_api/lib/Controller/UsersController.php b/apps/provisioning_api/lib/Controller/UsersController.php
index aae34975c25..e91d234809c 100644
--- a/apps/provisioning_api/lib/Controller/UsersController.php
+++ b/apps/provisioning_api/lib/Controller/UsersController.php
@@ -42,6 +42,7 @@ declare(strict_types=1);
*/
namespace OCA\Provisioning_API\Controller;
+use InvalidArgumentException;
use libphonenumber\NumberParseException;
use libphonenumber\PhoneNumber;
use libphonenumber\PhoneNumberFormat;
@@ -418,15 +419,15 @@ class UsersController extends AUserData {
}
if ($displayName !== '') {
- $this->editUser($userid, 'display', $displayName);
+ $this->editUser($userid, self::USER_FIELD_DISPLAYNAME, $displayName);
}
if ($quota !== '') {
- $this->editUser($userid, 'quota', $quota);
+ $this->editUser($userid, self::USER_FIELD_QUOTA, $quota);
}
if ($language !== '') {
- $this->editUser($userid, 'language', $language);
+ $this->editUser($userid, self::USER_FIELD_LANGUAGE, $language);
}
// Send new user mail only if a mail is set
@@ -466,7 +467,7 @@ class UsersController extends AUserData {
]
);
throw $e;
- } catch (\InvalidArgumentException $e) {
+ } catch (InvalidArgumentException $e) {
$this->logger->error('Failed addUser attempt with invalid argument exeption.',
[
'app' => 'ocs_api',
@@ -676,7 +677,7 @@ class UsersController extends AUserData {
try {
$targetProperty->setScope($value);
$this->accountManager->updateAccount($userAccount);
- } catch (\InvalidArgumentException $e) {
+ } catch (InvalidArgumentException $e) {
throw new OCSException('', 102);
}
} else {
@@ -717,7 +718,7 @@ class UsersController extends AUserData {
if ($this->config->getSystemValue('allow_user_to_change_display_name', true) !== false) {
if ($targetUser->getBackend() instanceof ISetDisplayNameBackend
|| $targetUser->getBackend()->implementsActions(Backend::SET_DISPLAYNAME)) {
- $permittedFields[] = 'display';
+ $permittedFields[] = self::USER_FIELD_DISPLAYNAME;
$permittedFields[] = IAccountManager::PROPERTY_DISPLAYNAME;
}
$permittedFields[] = IAccountManager::PROPERTY_EMAIL;
@@ -728,15 +729,16 @@ class UsersController extends AUserData {
$permittedFields[] = IAccountManager::COLLECTION_EMAIL;
- $permittedFields[] = 'password';
+ $permittedFields[] = self::USER_FIELD_PASSWORD;
+ $permittedFields[] = self::USER_FIELD_NOTIFICATION_EMAIL;
if ($this->config->getSystemValue('force_language', false) === false ||
$this->groupManager->isAdmin($currentLoggedInUser->getUID())) {
- $permittedFields[] = 'language';
+ $permittedFields[] = self::USER_FIELD_LANGUAGE;
}
if ($this->config->getSystemValue('force_locale', false) === false ||
$this->groupManager->isAdmin($currentLoggedInUser->getUID())) {
- $permittedFields[] = 'locale';
+ $permittedFields[] = self::USER_FIELD_LOCALE;
}
$permittedFields[] = IAccountManager::PROPERTY_PHONE;
@@ -752,7 +754,7 @@ class UsersController extends AUserData {
// If admin they can edit their own quota
if ($this->groupManager->isAdmin($currentLoggedInUser->getUID())) {
- $permittedFields[] = 'quota';
+ $permittedFields[] = self::USER_FIELD_QUOTA;
}
} else {
// Check if admin / subadmin
@@ -762,19 +764,19 @@ class UsersController extends AUserData {
// They have permissions over the user
if ($targetUser->getBackend() instanceof ISetDisplayNameBackend
|| $targetUser->getBackend()->implementsActions(Backend::SET_DISPLAYNAME)) {
- $permittedFields[] = 'display';
+ $permittedFields[] = self::USER_FIELD_DISPLAYNAME;
$permittedFields[] = IAccountManager::PROPERTY_DISPLAYNAME;
}
$permittedFields[] = IAccountManager::PROPERTY_EMAIL;
$permittedFields[] = IAccountManager::COLLECTION_EMAIL;
- $permittedFields[] = 'password';
- $permittedFields[] = 'language';
- $permittedFields[] = 'locale';
+ $permittedFields[] = self::USER_FIELD_PASSWORD;
+ $permittedFields[] = self::USER_FIELD_LANGUAGE;
+ $permittedFields[] = self::USER_FIELD_LOCALE;
$permittedFields[] = IAccountManager::PROPERTY_PHONE;
$permittedFields[] = IAccountManager::PROPERTY_ADDRESS;
$permittedFields[] = IAccountManager::PROPERTY_WEBSITE;
$permittedFields[] = IAccountManager::PROPERTY_TWITTER;
- $permittedFields[] = 'quota';
+ $permittedFields[] = self::USER_FIELD_QUOTA;
} else {
// No rights
throw new OCSException('', OCSController::RESPOND_NOT_FOUND);
@@ -786,11 +788,11 @@ class UsersController extends AUserData {
}
// Process the edit
switch ($key) {
- case 'display':
+ case self::USER_FIELD_DISPLAYNAME:
case IAccountManager::PROPERTY_DISPLAYNAME:
$targetUser->setDisplayName($value);
break;
- case 'quota':
+ case self::USER_FIELD_QUOTA:
$quota = $value;
if ($quota !== 'none' && $quota !== 'default') {
if (is_numeric($quota)) {
@@ -820,7 +822,7 @@ class UsersController extends AUserData {
}
$targetUser->setQuota($quota);
break;
- case 'password':
+ case self::USER_FIELD_PASSWORD:
try {
if (!$targetUser->canChangePassword()) {
throw new OCSException('Setting the password is not supported by the users backend', 103);
@@ -830,19 +832,39 @@ class UsersController extends AUserData {
throw new OCSException($e->getMessage(), 103);
}
break;
- case 'language':
+ case self::USER_FIELD_LANGUAGE:
$languagesCodes = $this->l10nFactory->findAvailableLanguages();
if (!in_array($value, $languagesCodes, true) && $value !== 'en') {
throw new OCSException('Invalid language', 102);
}
$this->config->setUserValue($targetUser->getUID(), 'core', 'lang', $value);
break;
- case 'locale':
+ case self::USER_FIELD_LOCALE:
if (!$this->l10nFactory->localeExists($value)) {
throw new OCSException('Invalid locale', 102);
}
$this->config->setUserValue($targetUser->getUID(), 'core', 'locale', $value);
break;
+ case self::USER_FIELD_NOTIFICATION_EMAIL:
+ $success = false;
+ if ($value === '' || filter_var($value, FILTER_VALIDATE_EMAIL)) {
+ try {
+ $targetUser->setPrimaryEMailAddress($value);
+ $success = true;
+ } catch (InvalidArgumentException $e) {
+ $this->logger->info(
+ 'Cannot set primary email, because provided address is not verified',
+ [
+ 'app' => 'provisioning_api',
+ 'exception' => $e,
+ ]
+ );
+ }
+ }
+ if (!$success) {
+ throw new OCSException('', 102);
+ }
+ break;
case IAccountManager::PROPERTY_EMAIL:
if (filter_var($value, FILTER_VALIDATE_EMAIL) || $value === '') {
$targetUser->setEMailAddress($value);
@@ -878,7 +900,7 @@ class UsersController extends AUserData {
if ($userProperty->getName() === IAccountManager::PROPERTY_PHONE) {
$this->knownUserService->deleteByContactUserId($targetUser->getUID());
}
- } catch (\InvalidArgumentException $e) {
+ } catch (InvalidArgumentException $e) {
throw new OCSException('Invalid ' . $e->getMessage(), 102);
}
}
@@ -901,7 +923,7 @@ class UsersController extends AUserData {
try {
$userProperty->setScope($value);
$this->accountManager->updateAccount($userAccount);
- } catch (\InvalidArgumentException $e) {
+ } catch (InvalidArgumentException $e) {
throw new OCSException('Invalid ' . $e->getMessage(), 102);
}
}