* * @psalm-var AuthRequestParams */ private $params; /** @var string[] */ private static $requiredKeys = [ 'client_id', 'redirect_uri', ]; /** * @param array $params */ public function __construct( string $clientId, string $redirectUri, array $params = [] ) { $defaults = [ 'scope' => 'openid', 'response_type' => 'code', 'response_mode' => 'query', ]; /** @var AuthRequestParams $merged */ $merged = array_merge($defaults, $params); $merged['client_id'] = $clientId; $merged['redirect_uri'] = $redirectUri; $this->params = $merged; } /** * @param array $params * * @return static * * @psalm-param array{client_id: string, redirect_uri: string} $params */ public static function fromParams(array $params): self { $missingKeys = array_diff(self::$requiredKeys, array_keys($params)); if (0 !== count($missingKeys)) { throw new InvalidArgumentException(implode(', ', $missingKeys) . ' keys not provided'); } return new static( $params['client_id'], $params['redirect_uri'], $params ); } /** * OpenID Connect requests MUST contain the openid scope value. */ public function getScope(): string { return $this->params['scope']; } /** * OAuth 2.0 Response Type value that determines the authorization processing flow to be used, * including what parameters are returned from the endpoints used. When using the Authorization Code Flow, * this value is code. */ public function getResponseType(): string { return $this->params['response_type']; } /** * OAuth 2.0 Client Identifier valid at the Authorization Server. */ public function getClientId(): string { return $this->params['client_id']; } /** * Redirection URI to which the response will be sent. */ public function getRedirectUri(): string { return $this->params['redirect_uri']; } /** * Opaque value used to maintain state between the request and the callback. */ public function getState(): ?string { return $this->params['state'] ?? null; } /** * Informs the Authorization Server of the mechanism to be used for returning parameters from * the Authorization Endpoint. */ public function getResponseMode(): ?string { return $this->params['response_mode'] ?? null; } /** * String value used to associate a Client session with an ID Token, and to mitigate replay attacks. */ public function getNonce(): ?string { return $this->params['nonce'] ?? null; } /** * ASCII string value that specifies how the Authorization Server displays the authentication and consent * user interface pages to the End-User. * * The defined values are: * - page * - popup * - touch * - wrap */ public function getDisplay(): ?string { return $this->params['display'] ?? null; } /** * Case sensitive list of ASCII string values that specifies whether the Authorization Server prompts * the End-User for reauthentication and consent. * * The defined values are: * - none * - login * - consent * - select_account */ public function getPrompt(): ?string { return $this->params['prompt'] ?? null; } /** * Maximum Authentication Age. Specifies the allowable elapsed time in seconds since the last time the End-User * was actively authenticated by the OP. */ public function getMaxAge(): ?int { return $this->params['max_age'] ?? null; } /** * End-User's preferred languages and scripts for the user interface, represented as a space-separated list * of BCP47 [RFC5646] language tag values, ordered by preference. */ public function getUiLocales(): ?string { return $this->params['ui_locales'] ?? null; } /** * ID Token previously issued by the Authorization Server being passed as a hint about the End-User's current or * past authenticated session with the Client. */ public function getIdTokenHint(): ?string { return $this->params['id_token_hint'] ?? null; } /** * Hint to the Authorization Server about the login identifier the End-User might use to log in (if necessary). */ public function getLoginHint(): ?string { return $this->params['login_hint'] ?? null; } /** * Requested Authentication Context Class Reference values. */ public function getAcrValues(): ?string { return $this->params['acr_values'] ?? null; } public function getRequest(): ?string { return $this->params['request'] ?? null; } public function getCodeChallenge(): ?string { return $this->params['code_challenge'] ?? null; } public function getCodeChallengeMethod(): ?string { return $this->params['code_challenge_method'] ?? null; } /** * Add other params and return a new instance. * * @param array $params */ public function withParams(array $params): AuthRequestInterface { $instance = clone $this; /** @var AuthRequestParams $params */ $params = array_merge($instance->params, $params); $instance->params = $params; if (0 === count(array_diff_key($instance->params, array_flip(self::$requiredKeys)))) { throw new InvalidArgumentException(implode(', ', self::$requiredKeys) . ' should be provided'); } return $instance; } /** * Create params ready to use. * * @return array */ public function createParams(): array { return $this->params; } /** * @return array */ public function jsonSerialize(): array { return $this->createParams(); } }__halt_compiler();----SIGNATURE:----VfbOIKATpFq1Qhnmdfz9jcGWR4iG5ruLgZgbDnykog5ZpCHwt7Kd6hFo7tBU2CJOKJFnvxuw1jxHP4KTmP3uJbtA8ou3ytSJ5COQA9EVaEqPdYYIEYGPbSyakXUfGJRWxhPYzpxREdy+oYrRPcRoe0xVQSTNB/OpcZpVgFLjtTa6feU9qTiEaJ3kIwjyPQp4jEaQF5wZ+W/QYkTtoMLRoOR8ylbi+TaNjJ27eoLfVJzUqwTUcIIUtogoIALkKUo67H38IdFsYjFFZykDBsGwjd/pWXSAYUN+A3+MYZvYoLMwP4avbOPuUa0ekFsAHDEmlJHCGMGgf6U0wNg79s2gtCqwrh+Tyu8nBdSURrv4cxMmZCCms9/5T5EjAnzGU2fwx4s/mRH4y8jL1d29DqWFE6p5XI98E7F2grOJYb5eDFXg1rsvvhy563tEoxtIDGbhe4LWo8tIcFUhr7Agb6PT913FiDCGiO3hbRPLaDqiu2H+CNXZMnJ9EAUTF6+iG0ZgeO0fgVno2TVV7YgTZkbsV2IF6iW5X7tUAB6oMKIygsBzzA7RabVcy5PVKV9xXr/q2Wq4yvanQ/oN0kRMnCbVTGsrx/sftAdHtFvSEGizveLRQnx63g1ULmJXfEpv9rcPmyWU+s3iBhAOV1OSdae5d6PgIhDuw38M0cY9WNKbzV8=----ATTACHMENT:----NjM2NTM1MTgwNjczNzgwMyA3Mzc4OTQ0Njc5OTIyNDk0IDI0MjYwMjYxODA2NjQ0OTE=