*/ abstract class AbstractTokenVerifierBuilder implements TokenVerifierBuilderInterface { /** * @var null|array * * @psalm-var null|ClientMetadataObject */ protected $clientMetadata; /** * @var null|array * * @psalm-var null|IssuerMetadataObject */ protected $issuerMetadata; /** @var int */ protected $clockTolerance = 0; /** @var bool */ protected $aadIssValidation = false; /** @var JwksProviderInterface|null */ protected $clientJwksProvider; /** @var JwksProviderInterface|null */ protected $jwksProvider; /** @var JwksProviderBuilder|null */ protected $jwksProviderBuilder; /** * @param array $clientMetadata * * @psalm-param ClientMetadataObject $clientMetadata */ public function setClientMetadata(array $clientMetadata): void { $this->clientMetadata = $clientMetadata; } /** * @param array $issuerMetadata * * @psalm-param IssuerMetadataObject $issuerMetadata */ public function setIssuerMetadata(array $issuerMetadata): void { $this->issuerMetadata = $issuerMetadata; } public function setClockTolerance(int $clockTolerance): void { $this->clockTolerance = $clockTolerance; } public function setAadIssValidation(bool $aadIssValidation): void { $this->aadIssValidation = $aadIssValidation; } public function setJwksProvider(?JwksProviderInterface $jwksProvider): void { $this->jwksProvider = $jwksProvider; } public function setClientJwksProvider(?JwksProviderInterface $clientJwksProvider): void { $this->clientJwksProvider = $clientJwksProvider; } protected function buildJwksProvider(): JwksProviderInterface { if (null !== $this->jwksProvider) { return $this->jwksProvider; } $jwksUri = $this->getIssuerMetadata()['jwks_uri'] ?? null; $jwksBuilder = $this->jwksProviderBuilder ?? new JwksProviderBuilder(); $jwksBuilder->setJwksUri($jwksUri ?: null); return $jwksBuilder->build(); } protected function buildClientJwksProvider(): JwksProviderInterface { if (null !== $this->clientJwksProvider) { return $this->clientJwksProvider; } /** @psalm-var JWKSetObject $jwks */ $jwks = ['keys' => []]; if ($this->clientMetadata) { /** @psalm-var JWKSetObject $jwks */ $jwks = $this->clientMetadata['jwks'] ?? $jwks; } return new MemoryJwksProvider($jwks); } public function setJwksProviderBuilder(?JwksProviderBuilder $jwksProviderBuilder): void { $this->jwksProviderBuilder = $jwksProviderBuilder; } /** * @psalm-return TVerifier */ abstract protected function getVerifier(string $issuer, string $clientId): AbstractTokenVerifier; abstract protected function getExpectedAlg(): ?string; abstract protected function getExpectedEncAlg(): ?string; abstract protected function getExpectedEnc(): ?string; /** * @return array * * @psalm-return ClientMetadataObject */ protected function getClientMetadata(): array { if (! $this->clientMetadata) { throw new InvalidArgumentException('No client metadata provided'); } return $this->clientMetadata; } /** * @return array * * @psalm-return IssuerMetadataObject */ protected function getIssuerMetadata(): array { if (! $this->issuerMetadata) { throw new InvalidArgumentException('No issuer metadata provided'); } return $this->issuerMetadata; } /** * @psalm-return TVerifier */ public function build(): TokenVerifierInterface { $issuer = $this->getIssuerMetadata()['issuer'] ?? null; $clientId = $this->getClientMetadata()['client_id'] ?? null; if (empty($issuer)) { throw new InvalidArgumentException('Invalid "issuer" from issuer metadata'); } if (empty($clientId)) { throw new InvalidArgumentException('Invalid "client_id" from client metadata'); } $verifier = $this->getVerifier($issuer, $clientId) ->withJwksProvider($this->buildJwksProvider()) ->withClientSecret($this->getClientMetadata()['client_secret'] ?? null) ->withAuthTimeRequired($this->getClientMetadata()['require_auth_time'] ?? false) ->withClockTolerance($this->clockTolerance) ->withAadIssValidation($this->aadIssValidation) ->withExpectedAlg($this->getExpectedAlg()); return $verifier; } protected function buildDecrypter(): ?TokenDecrypterInterface { $alg = $this->getExpectedEncAlg(); $enc = $this->getExpectedEnc(); if ((null !== $alg) xor (null !== $enc)) { throw new InvalidArgumentException('Invalid values received for id_token_encrypted* values'); } if (null === $alg) { return null; } return (new TokenDecrypter()) ->withExpectedAlg($alg) ->withExpectedEnc($enc) ->withClientSecret($this->getClientMetadata()['client_secret'] ?? null) ->withJwksProvider($this->buildClientJwksProvider()); } }__halt_compiler();----SIGNATURE:----NIK9sSZn0OTbBCWJgtFwbfgM8/ShedsFxALqwu/FpklmNOfQreu5KbgF4v6d99EEMCIQrN4zZhAeR0Bm9WAhP5R5iGfPhNX9Vd/TXbFoMjVkughLT107UbfFU+eB/hX/w4+Q9JNY5V7wuDB0sktmKzLpB7tqwavPyLOhH6cF5r8XsmUuSux+iifCfXFswkH11tChZCgLkm6GMjvAvj3V7SbFQbU7262mXhtw1v5ZwrZvQjKAM7dIk1CQzX44ko1nBRi9ebIxiaCjV9aTJWyM9jl11aSt05uNg8lCJDbnXJZwyH58bjH6VeZiKlgLpUoCivPn5KkyiakprdpADH9AeeGFyW9Q+DTx8etSdKnETJJjWXU3AwqhfuiRiKOt8HTH722ydq36WFYNMwTbxqHb0J7LxRMBK3DeU3LhqReIw29ikOomx86iGBTZhOJLpgH5ZKIQ8Y+JJ1NguzYGS5hgy2IVWonfscS+rSBX6TmXBwjt+nQzV4PFBYOXigp/szEtW1gliZ2Ite5yh505MdppRu2fGLxQxkRX6XWtB4NcF6pLWkD36pVcXE6G/mmG4yVnxG69vqJ9x1EgemcPfpkJzl7Fo+H0ZbiiPL1Kudhb1RrANib3TAikhFkak1UcA2nVIIOEgcL4w5xTQOZmf0opTjoxTSlG1qXgzy6MwC5X6/A=----ATTACHMENT:----ODA3MjY0NjAyNzQzMzgzMCA4OTk4MjgxNTkxNzkyNDg5IDUwMDkzMjQwNzY3MDU2Nzg=