getMessage()); } public static $params = [ OAuth2Protocol::OAuth2Protocol_ResponseType => [ OAuth2Protocol::OAuth2Protocol_ResponseType_OTP ], OAuth2Protocol::OAuth2Protocol_ClientId => [], OAuth2Protocol::OAuth2Protocol_Scope => [], OAuth2Protocol::OAuth2PasswordlessConnection => OAuth2Protocol::ValidOAuth2PasswordlessConnectionValues, OAuth2Protocol::OAuth2PasswordlessSend => OAuth2Protocol::ValidOAuth2PasswordlessSendValues, OAuth2Protocol::OAuth2Protocol_Nonce => [], ]; /** * @var array */ public static $optional_params = [ OAuth2Protocol::OAuth2Protocol_RedirectUri => [ [ OAuth2Protocol::OAuth2PasswordlessSend => OAuth2Protocol::OAuth2PasswordlessSendLink ] ], OAuth2Protocol::OAuth2PasswordlessEmail => [ [ OAuth2Protocol::OAuth2PasswordlessConnection => OAuth2Protocol::OAuth2PasswordlessConnectionEmail ] ], OAuth2Protocol::OAuth2PasswordlessPhoneNumber => [ [ OAuth2Protocol::OAuth2PasswordlessConnection => OAuth2Protocol::OAuth2PasswordlessConnectionSMS ] ], ]; /** * Validates current request * @return bool */ public function isValid() { $this->last_validation_error = ''; // validate mandatory params foreach (self::$params as $mandatory_param => $values) { $mandatory_val = $this->getParam($mandatory_param); if (empty($mandatory_val)) { $this->last_validation_error = sprintf("%s not set", $mandatory_param); return false; } if (count($values) > 0 && !in_array($mandatory_val, $values)) { $this->last_validation_error = sprintf("%s has not a valid value (%s)", $mandatory_param, implode(",", $values)); return false; } } // validate optional params foreach (self::$optional_params as $optional_param => $rules) { $optional_param_val = $this->getParam($optional_param); if (empty($optional_param_val) && count($rules)) continue; foreach ($rules as $dep_param => $dep_val) { $dep_param_cur_val = $this->getParam($dep_param); if ($dep_param_cur_val != $dep_val) continue; if (empty($optional_param_val)) { $this->last_validation_error = sprintf("%s not set.", $optional_param); return false; } } } return true; } public function getConnection(): string { return $this->getParam(OAuth2Protocol::OAuth2PasswordlessConnection); } public function getSend(): string { return $this->getParam(OAuth2Protocol::OAuth2PasswordlessSend); } public function getEmail(): ?string { return $this->getParam(OAuth2Protocol::OAuth2PasswordlessEmail); } public function getNonce(): ?string { return $this->getParam(OAuth2Protocol::OAuth2Protocol_Nonce); } public function getPhoneNumber(): ?string { return $this->getParam(OAuth2Protocol::OAuth2PasswordlessPhoneNumber); } }