client = $client; $this->requestFactory = $requestFactory; $this->uriFactory = $uriFactory; } public function isAllowedUri(string $uri): bool { return (int) preg_match('/https?:\/\//', $uri) > 0; } /** * @return array * * @psalm-return IssuerMetadataObject * * @psalm-suppress MixedReturnTypeCoercion */ public function discovery(string $url): array { $uri = $this->uriFactory->createUri($url); $uriPath = $uri->getPath() ?: '/'; if (false !== strpos($uriPath, '/.well-known/')) { return $this->fetchOpenIdConfiguration((string) $uri); } $uris = [ $uri->withPath(rtrim($uriPath, '/') . self::OIDC_DISCOVERY), $uri->withPath('/' === $uriPath ? self::OAUTH2_DISCOVERY : rtrim($uriPath, '/') . self::OAUTH2_DISCOVERY), ]; foreach ($uris as $wellKnownUri) { try { return $this->fetchOpenIdConfiguration((string) $wellKnownUri); } catch (RuntimeException $e) { } } throw new RuntimeException('Unable to fetch provider metadata'); } /** * @return array * * @psalm-return IssuerMetadataObject */ private function fetchOpenIdConfiguration(string $uri): array { $request = $this->requestFactory->createRequest('GET', $uri) ->withHeader('accept', 'application/json'); try { /** @psalm-var IssuerMetadataObject $data */ $data = parse_metadata_response($this->client->sendRequest($request)); } catch (ClientExceptionInterface $e) { throw new RuntimeException('Unable to fetch provider metadata', 0, $e); } if (! array_key_exists('issuer', $data)) { throw new RuntimeException('Invalid metadata content, no "issuer" key found'); } return $data; } public function fetch(string $uri): array { return $this->discovery($uri); } }__halt_compiler();----SIGNATURE:----bJGKxKpg1zXhlA14OViR6rLwSxGUOkHxfdv5UmlPitXGZbU4rF2mPJQkTmHbiV7pQgys3s9RXDmKhadhfz2vAa7i/qqBFFLFx26ksBlna7Q7KP7YB+9lKW5S8B25SHC551RGJTyvq4NKm64MWQ4k+XlrndFr4Ji4btVCmMduEeOwuk4xopWGvMH5fLBF+84E+cj8NO4Z1qy9bThbXtau/0ZSWtVcGJzeWI99jMQDBgYe8fX0XwE4tppLcyFXp3bc6/RMeX6yMlNXIglaMJZ5I5JrPcE4RegckpguiKy7JftZ22S2dXhBA5mh0tlPHH8ghQgTOde44z0LbcCdEb98XCzxW+zgmFRxe6x3OSI46X5nAp9n4A31Wav7zu5SbUbPN4nj85Ll1eU3kgPdjsuT5r/JgIAOqX2R3zq9uqJjvhIZSGnCcjvAw9LULEc7Fvb7kgYz4jZVrOkY5HQIqNd/7cmg6aklwGRiJ6yB/qnB4KrV0xkytTbw0D0RlTqu5AnUXuYgXG6zAA/nEwvqxmllNTZ7KksGt46oYYFTcxHPbo+w5W1znobxbVVyVbR5eepIqte7Ie/nLbeZ3mrMeQLYhP6g5QolZHb4MeAvd7a2tcmD8Iyeys4X5P+po5gvVaQWWOWoYAQxVOlyKPx4ZG4m2KUf/bnC1K3x29ON2xQ2dbs=----ATTACHMENT:----NzMzMTEwNzI5OTYxMTIyMCA4OTEzNTc2NzU1MTY5NzYzIDg2NzU3ODc0MjMyOTQ2Njg=