%PDF- %GIF98; %PNG;
Server : ApacheSystem : Linux host.digitalbabaji.in 4.18.0-513.11.1.el8_9.x86_64 #1 SMP Wed Jan 17 02:00:40 EST 2024 x86_64 User : addictionfreeind ( 1003) PHP Version : 7.2.34 Disable Function : exec,passthru,shell_exec,system Directory : /home/addictionfreeind/www/admin1/vendor/m4tthumphrey/php-gitlab-api/src/HttpClient/ |
Upload File : |
<?php
declare(strict_types=1);
/*
* This file is part of the Gitlab API library.
*
* (c) Matt Humphrey <matth@windsor-telecom.co.uk>
* (c) Graham Campbell <hello@gjcampbell.co.uk>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Gitlab\HttpClient;
use Http\Client\Common\HttpMethodsClient;
use Http\Client\Common\HttpMethodsClientInterface;
use Http\Client\Common\Plugin;
use Http\Client\Common\Plugin\Cache\Generator\HeaderCacheKeyGenerator;
use Http\Client\Common\Plugin\CachePlugin;
use Http\Client\Common\PluginClientFactory;
use Http\Discovery\Psr17FactoryDiscovery;
use Http\Discovery\Psr18ClientDiscovery;
use Psr\Cache\CacheItemPoolInterface;
use Psr\Http\Client\ClientInterface;
use Psr\Http\Message\RequestFactoryInterface;
use Psr\Http\Message\StreamFactoryInterface;
use Psr\Http\Message\UriFactoryInterface;
/**
* The HTTP client builder class.
*
* This will allow you to fluently add and remove plugins.
*
* @author Tobias Nyholm <tobias.nyholm@gmail.com>
* @author Graham Campbell <hello@gjcampbell.co.uk>
*/
final class Builder
{
/**
* The object that sends HTTP messages.
*
* @var ClientInterface
*/
private $httpClient;
/**
* The HTTP request factory.
*
* @var RequestFactoryInterface
*/
private $requestFactory;
/**
* The HTTP stream factory.
*
* @var StreamFactoryInterface
*/
private $streamFactory;
/**
* The URI factory.
*
* @var UriFactoryInterface
*/
private $uriFactory;
/**
* The currently registered plugins.
*
* @var Plugin[]
*/
private $plugins = [];
/**
* The cache plugin to use.
*
* This plugin is specially treated because it has to be the very last plugin.
*
* @var CachePlugin|null
*/
private $cachePlugin;
/**
* A HTTP client with all our plugins.
*
* @var HttpMethodsClientInterface|null
*/
private $pluginClient;
/**
* Create a new http client builder instance.
*
* @param ClientInterface|null $httpClient
* @param RequestFactoryInterface|null $requestFactory
* @param StreamFactoryInterface|null $streamFactory
* @param UriFactoryInterface|null $uriFactory
*
* @return void
*/
public function __construct(
ClientInterface $httpClient = null,
RequestFactoryInterface $requestFactory = null,
StreamFactoryInterface $streamFactory = null,
UriFactoryInterface $uriFactory = null
) {
$this->httpClient = $httpClient ?? Psr18ClientDiscovery::find();
$this->requestFactory = $requestFactory ?? Psr17FactoryDiscovery::findRequestFactory();
$this->streamFactory = $streamFactory ?? Psr17FactoryDiscovery::findStreamFactory();
$this->uriFactory = $uriFactory ?? Psr17FactoryDiscovery::findUriFactory();
}
/**
* @return HttpMethodsClientInterface
*/
public function getHttpClient(): HttpMethodsClientInterface
{
if (null === $this->pluginClient) {
$plugins = $this->plugins;
if (null !== $this->cachePlugin) {
$plugins[] = $this->cachePlugin;
}
$this->pluginClient = new HttpMethodsClient(
(new PluginClientFactory())->createClient($this->httpClient, $plugins),
$this->requestFactory,
$this->streamFactory
);
}
return $this->pluginClient;
}
/**
* Get the request factory.
*
* @return RequestFactoryInterface
*/
public function getRequestFactory(): RequestFactoryInterface
{
return $this->requestFactory;
}
/**
* Get the stream factory.
*
* @return StreamFactoryInterface
*/
public function getStreamFactory(): StreamFactoryInterface
{
return $this->streamFactory;
}
/**
* Get the URI factory.
*
* @return UriFactoryInterface
*/
public function getUriFactory(): UriFactoryInterface
{
return $this->uriFactory;
}
/**
* Add a new plugin to the end of the plugin chain.
*
* @param Plugin $plugin
*
* @return void
*/
public function addPlugin(Plugin $plugin): void
{
$this->plugins[] = $plugin;
$this->pluginClient = null;
}
/**
* Remove a plugin by its fully qualified class name (FQCN).
*
* @param string $fqcn
*
* @return void
*/
public function removePlugin(string $fqcn): void
{
foreach ($this->plugins as $idx => $plugin) {
if ($plugin instanceof $fqcn) {
unset($this->plugins[$idx]);
$this->pluginClient = null;
}
}
}
/**
* Add a cache plugin to cache responses locally.
*
* @param CacheItemPoolInterface $cachePool
* @param array $config
*
* @return void
*/
public function addCache(CacheItemPoolInterface $cachePool, array $config = []): void
{
if (!isset($config['cache_key_generator'])) {
$config['cache_key_generator'] = new HeaderCacheKeyGenerator(['Authorization', 'Cookie', 'Accept', 'Content-type']);
}
$this->cachePlugin = CachePlugin::clientCache($cachePool, $this->streamFactory, $config);
$this->pluginClient = null;
}
/**
* Remove the cache plugin.
*
* @return void
*/
public function removeCache(): void
{
$this->cachePlugin = null;
$this->pluginClient = null;
}
}