client instanceof ClientInterface) { trigger_deprecation( 'web-token/jwt-library', '3.3', 'Using "%s" with an instance of "%s" is deprecated, use "%s" instead.', self::class, ClientInterface::class, HttpClientInterface::class ); } if (! $this->client instanceof HttpClientInterface && $this->requestFactory === null) { throw new RuntimeException(sprintf( 'The request factory must be provided when using an instance of "%s" as client.', ClientInterface::class )); } $this->cacheItemPool = new NullAdapter(); } public function enabledCache(CacheItemPoolInterface $cacheItemPool, int $expiresAfter = 3600): void { $this->cacheItemPool = $cacheItemPool; $this->expiresAfter = $expiresAfter; } /** * @param array $header */ protected function getContent(string $url, array $header = []): string { $cacheKey = hash('xxh128', $url); $item = $this->cacheItemPool->getItem($cacheKey); if ($item->isHit()) { return $item->get(); } $content = $this->client instanceof HttpClientInterface ? $this->sendSymfonyRequest( $url, $header ) : $this->sendPsrRequest($url, $header); $item = $this->cacheItemPool->getItem($cacheKey); $item->expiresAfter($this->expiresAfter); $item->set($content); $this->cacheItemPool->save($item); return $content; } /** * @param array $header */ private function sendSymfonyRequest(string $url, array $header = []): string { assert($this->client instanceof HttpClientInterface); $response = $this->client->request('GET', $url, [ 'headers' => $header, ]); if ($response->getStatusCode() >= 400) { throw new RuntimeException('Unable to get the key set.', $response->getStatusCode()); } return $response->getContent(); } /** * @param array $header */ private function sendPsrRequest(string $url, array $header = []): string { assert($this->client instanceof ClientInterface); assert($this->requestFactory instanceof RequestFactoryInterface); $request = $this->requestFactory->createRequest('GET', $url); foreach ($header as $k => $v) { $request = $request->withHeader($k, $v); } $response = $this->client->sendRequest($request); if ($response->getStatusCode() >= 400) { throw new RuntimeException('Unable to get the key set.', $response->getStatusCode()); } return $response->getBody() ->getContents(); } }