%PDF- %PDF-
Direktori : /home/bitrix/www/local/php_interface/lib/vendor/kreait/firebase-tokens/src/ |
Current File : //home/bitrix/www/local/php_interface/lib/vendor/kreait/firebase-tokens/src/HttpKeyStore.php |
<?php namespace Firebase\Auth\Token; use Fig\Http\Message\RequestMethodInterface as RequestMethod; use Firebase\Auth\Token\Cache\InMemoryCache; use Firebase\Auth\Token\Domain\KeyStore; use GuzzleHttp\Client; use GuzzleHttp\ClientInterface; use Psr\SimpleCache\CacheInterface; /** * @see https://firebase.google.com/docs/auth/admin/verify-id-tokens#verify_id_tokens_using_a_third-party_jwt_library */ final class HttpKeyStore implements KeyStore { const KEYS_URL = 'https://www.googleapis.com/robot/v1/metadata/x509/securetoken@system.gserviceaccount.com'; /** * @var ClientInterface */ private $client; /** * @var CacheInterface */ private $cache; public function __construct(ClientInterface $client = null, CacheInterface $cache = null) { $this->client = $client ?? new Client(); $this->cache = $cache ?? new InMemoryCache(); } public function get($keyId) { if ($key = $this->cache->get($keyId)) { return $key; } $response = $this->client->request(RequestMethod::METHOD_GET, self::KEYS_URL); $keys = json_decode((string) $response->getBody(), true); if (!($key = $keys[$keyId] ?? null)) { throw new \OutOfBoundsException(sprintf('Key with ID "%s" not found.', $keyId)); } $ttl = preg_match('/max-age=(\d+)/i', $response->getHeaderLine('Cache-Control') ?? '', $matches) ? (int) $matches[1] : null; $this->cache->set($keyId, $key, $ttl); return $key; } }