* * @psalm-var ClientMetadataObject */ private $metadata; /** @var string[] */ private static $requiredKeys = [ 'client_id', ]; /** @var array */ private static $defaults = []; /** * IssuerMetadata constructor. * * @param array $claims * * @psalm-param ClientMetadataObject|array $claims */ public function __construct(string $clientId, array $claims = []) { $requiredClaims = [ 'client_id' => $clientId, ]; $defaults = self::$defaults; /** @var ClientMetadataObject $merged */ $merged = array_merge($defaults, $claims, $requiredClaims); $this->metadata = $merged; } /** * @param array $claims * * @return static * * @psalm-param ClientMetadataObject $claims */ public static function fromArray(array $claims): self { $missingKeys = array_diff(self::$requiredKeys, array_keys($claims)); if (0 !== count($missingKeys)) { throw new InvalidArgumentException( 'Invalid client metadata. Missing keys: ' . implode(', ', $missingKeys) ); } return new static($claims['client_id'], $claims); } public function getClientId(): string { return $this->metadata['client_id']; } public function getClientSecret(): ?string { return $this->metadata['client_secret'] ?? null; } public function getRedirectUris(): array { return $this->metadata['redirect_uris'] ?? []; } public function getResponseTypes(): array { return $this->metadata['response_types'] ?? ['code']; } public function getTokenEndpointAuthMethod(): string { return $this->metadata['token_endpoint_auth_method'] ?? 'client_secret_basic'; } public function getAuthorizationSignedResponseAlg(): ?string { return $this->metadata['authorization_signed_response_alg'] ?? null; } public function getAuthorizationEncryptedResponseAlg(): ?string { return $this->metadata['authorization_encrypted_response_alg'] ?? null; } public function getAuthorizationEncryptedResponseEnc(): ?string { return $this->metadata['authorization_encrypted_response_enc'] ?? null; } public function getIdTokenSignedResponseAlg(): string { return $this->metadata['id_token_signed_response_alg'] ?? 'RS256'; } public function getIdTokenEncryptedResponseAlg(): ?string { return $this->metadata['id_token_encrypted_response_alg'] ?? null; } public function getIdTokenEncryptedResponseEnc(): ?string { return $this->metadata['id_token_encrypted_response_enc'] ?? null; } public function getUserinfoSignedResponseAlg(): ?string { return $this->metadata['userinfo_signed_response_alg'] ?? null; } public function getUserinfoEncryptedResponseAlg(): ?string { return $this->metadata['userinfo_encrypted_response_alg'] ?? null; } public function getUserinfoEncryptedResponseEnc(): ?string { return $this->metadata['userinfo_encrypted_response_enc'] ?? null; } public function getRequestObjectSigningAlg(): ?string { return $this->metadata['request_object_signing_alg'] ?? null; } public function getRequestObjectEncryptionAlg(): ?string { return $this->metadata['request_object_encryption_alg'] ?? null; } public function getRequestObjectEncryptionEnc(): ?string { return $this->metadata['request_object_encryption_enc'] ?? null; } public function getIntrospectionEndpointAuthMethod(): string { return $this->metadata['introspection_endpoint_auth_method'] ?? $this->getTokenEndpointAuthMethod(); } public function getRevocationEndpointAuthMethod(): string { return $this->metadata['revocation_endpoint_auth_method'] ?? $this->getTokenEndpointAuthMethod(); } public function getJwks(): ?array { return $this->metadata['jwks'] ?? null; } public function jsonSerialize(): array { return $this->toArray(); } public function toArray(): array { return $this->metadata; } public function has(string $name): bool { return array_key_exists($name, $this->metadata); } /** * @return mixed|null */ public function get(string $name) { return $this->metadata[$name] ?? null; } }__halt_compiler();----SIGNATURE:----T1ARGb6GBJ8oq57r1kegwXNqVwDrkoBQZ3IOnzKrrOGNmwM7gcW0ZBJqd8xbBc60Iv4EE2+nLiK9lQ9PDOBRlPzNaMIXAsCElDdY0UrnRBGgeMzXV6kZrHKYslwMEcWitnCsz43f5LGTQc15IK2dlTeg9ZiKQ9XkuVq5MXa452LILxazVQmnbjxEEVbR5uAJdQKyLKNoEYJ7+5Xq0/CajOon5apZ+2Wydrq0Zd0OLZY0m0LSZsiu7QhInKR3psVYTOe2aTVG/+atsJvlENE9EC72oeUwgta5YiXxVTS0XvRwDSln3PI8NsD4R0PLAFKz9fsYXCHVoICmksB0VvvBtmilvFr3xJp7ikreazgR4lERSF4o7C23//oSSVbufr4ecLIADKr2FEMfo9pB6QpoE3mR1DRWvZPmycC3D/Lms6fr9yYsIXKjT3zQ7k5IlkHZp+nlYBBtcQY1Nv0OHEhDZEAkWhSsrpuk6kcFlAOikT8NSOfXsjo8x1FEd4gXRxL23Epaqte5WdsV3aTMdoBpH0QZFsI16VJWbL1w1Zg3a1GZy7A+6vk2VHJAUYIHsOc/D6EdvTxU4L4o0QGrxXdqEWC7B/GwOYZGF1bMv+HxeaUwcj8FmoM+1pm2l9GQmk+3Xo3x3FUVHbDzaVAfu6YpgmKcXB3xYp9sIAe3v92YlvM=----ATTACHMENT:----NzU4MTkzNjcwMzgxMDM2MCA2NTMxOTQxMzkwMjc0ODY3IDYzMjczMDkyMTIzMDk0MTM=