diff --git a/src/Authentication/Exception/ValidationException.php b/src/Authentication/Exception/ValidationException.php index 463899c..faaa73d 100644 --- a/src/Authentication/Exception/ValidationException.php +++ b/src/Authentication/Exception/ValidationException.php @@ -4,6 +4,11 @@ class ValidationException extends AuthenticationException { + public static function missingPersonalCodeAndPhoneNumber() + { + return new static('Please enter personal code or phone number.'); + } + public static function invalidPersonalCode($personalCode, $chars = 11) { return new static( diff --git a/src/Authentication/MobileID/AuthenticationService.php b/src/Authentication/MobileID/AuthenticationService.php index 3f5fe40..83931ec 100644 --- a/src/Authentication/MobileID/AuthenticationService.php +++ b/src/Authentication/MobileID/AuthenticationService.php @@ -31,18 +31,19 @@ class AuthenticationService extends AbstractService * @param string $language * @param string $serviceName * @param string $displayMessage + * @param boolean $returnCertData + * @param boolean $returnRevocationData * @return AuthenticateResponse on successful query. * @throws AuthenticationException * @throws ServiceException * @throws ValidationException */ - public function mobileAuthenticate($personalCode, $phoneNumber, $language, $serviceName, $displayMessage) + public function mobileAuthenticate($personalCode, $phoneNumber, $language, $serviceName, $displayMessage, $returnCertData = false, $returnRevocationData = false) { $this->throwIfSoapNotInitialized(); $this->log(Logger::INFO, '')->log(Logger::INFO, 'SOAP::MobileAuthenticate start validation'); - $this->validatePersonalCode($personalCode); - $this->validatePhoneNumber($phoneNumber); + $this->validatePersonalCodeAndPhoneNumber($personalCode, $phoneNumber); $this->validateLanguage($language); $this->validateServiceName($serviceName); $this->validateDisplayMessage($displayMessage); @@ -50,14 +51,16 @@ public function mobileAuthenticate($personalCode, $phoneNumber, $language, $serv try { $data = [ - 'IDCode' => $personalCode, - 'CountryCode' => self::COUNTRY_CODE_ESTONIA, - 'PhoneNo' => $phoneNumber, - 'Language' => $language, - 'ServiceName' => $serviceName, - 'MessageToDisplay' => $displayMessage, - 'SPChallenge' => $this->generateRandomNumbers(20), - 'MessagingMode' => 'asynchClientServer' + 'IDCode' => $personalCode, + 'CountryCode' => self::COUNTRY_CODE_ESTONIA, + 'PhoneNo' => $phoneNumber, + 'Language' => $language, + 'ServiceName' => $serviceName, + 'MessageToDisplay' => $displayMessage, + 'SPChallenge' => $this->generateRandomNumbers(20), + 'MessagingMode' => 'asynchClientServer', + 'ReturnCertData' => ($returnCertData == true), + 'ReturnRevocationData' => ($returnRevocationData == true) ]; $this->log(Logger::INFO, $this->wsdl . ' SOAP::MobileAuthenticate request: ' . serialize($data)); @@ -126,6 +129,21 @@ protected function getHydrator() return (new ClassMethods())->setUnderscoreSeparatedKeys(false); } + // Validate that either personalCode or phoneNumber is present + protected function validatePersonalCodeAndPhoneNumber($personalCode, $phoneNumber) { + if (!isset($personalCode) && !isset($phoneNumber)) { + throw ValidationException::missingPersonalCodeAndPhoneNumber(); + } + + if (isset($personalCode)) { + $this->validatePersonalCode($personalCode); + } + + if (isset($phoneNumber)) { + $this->validatePhoneNumber($phoneNumber); + } + } + protected function validatePersonalCode($personalCode) { if (strlen($personalCode) !== 11 || !is_numeric($personalCode)) {