primo commit
This commit is contained in:
		
							
								
								
									
										113
									
								
								libraries/vendor/web-token/jwt-library/KeyManagement/UrlKeySetFactory.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										113
									
								
								libraries/vendor/web-token/jwt-library/KeyManagement/UrlKeySetFactory.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,113 @@ | ||||
| <?php | ||||
|  | ||||
| declare(strict_types=1); | ||||
|  | ||||
| namespace Jose\Component\KeyManagement; | ||||
|  | ||||
| use Psr\Cache\CacheItemPoolInterface; | ||||
| use Psr\Http\Client\ClientInterface; | ||||
| use Psr\Http\Message\RequestFactoryInterface; | ||||
| use RuntimeException; | ||||
| use Symfony\Component\Cache\Adapter\NullAdapter; | ||||
| use Symfony\Contracts\HttpClient\HttpClientInterface; | ||||
| use function assert; | ||||
|  | ||||
| /** | ||||
|  * @see \Jose\Tests\Component\KeyManagement\UrlKeySetFactoryTest | ||||
|  */ | ||||
| abstract class UrlKeySetFactory | ||||
| { | ||||
|     private CacheItemPoolInterface $cacheItemPool; | ||||
|  | ||||
|     private int $expiresAfter = 3600; | ||||
|  | ||||
|     public function __construct( | ||||
|         private readonly ClientInterface|HttpClientInterface $client, | ||||
|         private readonly null|RequestFactoryInterface $requestFactory = null | ||||
|     ) { | ||||
|         if ($this->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<string, string|string[]> $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<string, string|string[]> $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<string, string|string[]> $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(); | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user