diff options
author | Joas Schilling <coding@schilljs.com> | 2020-12-02 16:03:08 +0100 |
---|---|---|
committer | Joas Schilling <coding@schilljs.com> | 2020-12-07 14:19:38 +0100 |
commit | 9e04e6f99ad7a8d78b0bf09a414ed0f1aac3e5db (patch) | |
tree | e79332d8dcff97d096dc3513426964294bae89f0 /lib/private | |
parent | fe9c46e595cba2d8e52db13cf15848a1f9d6f141 (diff) | |
download | nextcloud-server-9e04e6f99ad7a8d78b0bf09a414ed0f1aac3e5db.tar.gz nextcloud-server-9e04e6f99ad7a8d78b0bf09a414ed0f1aac3e5db.zip |
Also translate the phone number when coming in via the accounts manager API directly
Signed-off-by: Joas Schilling <coding@schilljs.com>
Diffstat (limited to 'lib/private')
-rw-r--r-- | lib/private/Accounts/AccountManager.php | 28 |
1 files changed, 26 insertions, 2 deletions
diff --git a/lib/private/Accounts/AccountManager.php b/lib/private/Accounts/AccountManager.php index 39921dae9db..4f4a146bdd9 100644 --- a/lib/private/Accounts/AccountManager.php +++ b/lib/private/Accounts/AccountManager.php @@ -30,6 +30,10 @@ namespace OC\Accounts; +use libphonenumber\NumberParseException; +use libphonenumber\PhoneNumber; +use libphonenumber\PhoneNumberFormat; +use libphonenumber\PhoneNumberUtil; use OCA\Settings\BackgroundJobs\VerifyUserData; use OCP\Accounts\IAccount; use OCP\Accounts\IAccountManager; @@ -85,11 +89,29 @@ class AccountManager implements IAccountManager { * update user record * * @param IUser $user - * @param $data + * @param array $data + * @return array The potentially modified data (e.g. phone numbers are converted to E.164 format) + * @throws \InvalidArgumentException Message is the property that was invalid */ - public function updateUser(IUser $user, $data) { + public function updateUser(IUser $user, array $data): array { $userData = $this->getUser($user); $updated = true; + + if (isset($data[self::PROPERTY_PHONE])) { + $phoneUtil = PhoneNumberUtil::getInstance(); + try { + $phoneValue = $data[self::PROPERTY_PHONE]['value']; + $phoneNumber = $phoneUtil->parse($phoneValue, 'DE'); // FIXME need a reasonable default + if ($phoneNumber instanceof PhoneNumber && $phoneUtil->isValidNumber($phoneNumber)) { + $data[self::PROPERTY_PHONE]['value'] = $phoneUtil->format($phoneNumber, PhoneNumberFormat::E164); + } else { + throw new \InvalidArgumentException(self::PROPERTY_PHONE); + } + } catch (NumberParseException $e) { + throw new \InvalidArgumentException(self::PROPERTY_PHONE); + } + } + if (empty($userData)) { $this->insertNewUser($user, $data); } elseif ($userData !== $data) { @@ -107,6 +129,8 @@ class AccountManager implements IAccountManager { new GenericEvent($user, $data) ); } + + return $data; } /** |