Validate and standardize the phone number on saving
Signed-off-by: Joas Schilling <coding@schilljs.com>
This commit is contained in:
parent
570c1bf7c4
commit
efe79f2937
|
@ -35,6 +35,10 @@ declare(strict_types=1);
|
||||||
|
|
||||||
namespace OCA\Settings\Controller;
|
namespace OCA\Settings\Controller;
|
||||||
|
|
||||||
|
use libphonenumber\NumberParseException;
|
||||||
|
use libphonenumber\PhoneNumber;
|
||||||
|
use libphonenumber\PhoneNumberFormat;
|
||||||
|
use libphonenumber\PhoneNumberUtil;
|
||||||
use OC\Accounts\AccountManager;
|
use OC\Accounts\AccountManager;
|
||||||
use OC\AppFramework\Http;
|
use OC\AppFramework\Http;
|
||||||
use OC\Encryption\Exceptions\ModuleDoesNotExistsException;
|
use OC\Encryption\Exceptions\ModuleDoesNotExistsException;
|
||||||
|
@ -389,7 +393,7 @@ class UsersController extends Controller {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
$this->saveUserSettings($user, $data);
|
$data = $this->saveUserSettings($user, $data);
|
||||||
return new DataResponse(
|
return new DataResponse(
|
||||||
[
|
[
|
||||||
'status' => 'success',
|
'status' => 'success',
|
||||||
|
@ -420,6 +424,13 @@ class UsersController extends Controller {
|
||||||
'message' => $e->getMessage()
|
'message' => $e->getMessage()
|
||||||
],
|
],
|
||||||
]);
|
]);
|
||||||
|
} catch (\InvalidArgumentException $e) {
|
||||||
|
return new DataResponse([
|
||||||
|
'status' => 'error',
|
||||||
|
'data' => [
|
||||||
|
'message' => $e->getMessage()
|
||||||
|
],
|
||||||
|
]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
|
@ -427,9 +438,11 @@ class UsersController extends Controller {
|
||||||
*
|
*
|
||||||
* @param IUser $user
|
* @param IUser $user
|
||||||
* @param array $data
|
* @param array $data
|
||||||
|
* @return array
|
||||||
* @throws ForbiddenException
|
* @throws ForbiddenException
|
||||||
|
* @throws \InvalidArgumentException
|
||||||
*/
|
*/
|
||||||
protected function saveUserSettings(IUser $user, array $data): void {
|
protected function saveUserSettings(IUser $user, array $data): array {
|
||||||
// keep the user back-end up-to-date with the latest display name and email
|
// keep the user back-end up-to-date with the latest display name and email
|
||||||
// address
|
// address
|
||||||
$oldDisplayName = $user->getDisplayName();
|
$oldDisplayName = $user->getDisplayName();
|
||||||
|
@ -442,6 +455,7 @@ class UsersController extends Controller {
|
||||||
throw new ForbiddenException($this->l10n->t('Unable to change full name'));
|
throw new ForbiddenException($this->l10n->t('Unable to change full name'));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$oldEmailAddress = $user->getEMailAddress();
|
$oldEmailAddress = $user->getEMailAddress();
|
||||||
$oldEmailAddress = is_null($oldEmailAddress) ? '' : strtolower($oldEmailAddress);
|
$oldEmailAddress = is_null($oldEmailAddress) ? '' : strtolower($oldEmailAddress);
|
||||||
if (isset($data[IAccountManager::PROPERTY_EMAIL]['value'])
|
if (isset($data[IAccountManager::PROPERTY_EMAIL]['value'])
|
||||||
|
@ -454,7 +468,25 @@ class UsersController extends Controller {
|
||||||
}
|
}
|
||||||
$user->setEMailAddress($data[IAccountManager::PROPERTY_EMAIL]['value']);
|
$user->setEMailAddress($data[IAccountManager::PROPERTY_EMAIL]['value']);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (isset($data[AccountManager::PROPERTY_PHONE])) {
|
||||||
|
$phoneUtil = PhoneNumberUtil::getInstance();
|
||||||
|
try {
|
||||||
|
$phoneValue = $data[AccountManager::PROPERTY_PHONE]['value'];
|
||||||
|
$phoneNumber = $phoneUtil->parse($phoneValue, 'DE'); // FIXME need a reasonable default
|
||||||
|
if ($phoneNumber instanceof PhoneNumber && $phoneUtil->isValidNumber($phoneNumber)) {
|
||||||
|
$data[AccountManager::PROPERTY_PHONE]['value'] = $phoneUtil->format($phoneNumber, PhoneNumberFormat::E164);
|
||||||
|
} else {
|
||||||
|
throw new \InvalidArgumentException($this->l10n->t('Unable to set invalid phone number'));
|
||||||
|
}
|
||||||
|
} catch (NumberParseException $e) {
|
||||||
|
throw new \InvalidArgumentException($this->l10n->t('Unable to set invalid phone number'));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
$this->accountManager->updateUser($user, $data);
|
$this->accountManager->updateUser($user, $data);
|
||||||
|
|
||||||
|
return $data;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in New Issue