nginxsonarrradarrplexorganizrdashboardbookmarkapplication-dashboardmuximuxlandingpagestartpagelandinghtpcserverhomepagesabnzbdheimdallembycouchpotatonzbget
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
104 lines
2.7 KiB
104 lines
2.7 KiB
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
/*
|
|
* This file is part of Laravel GitHub.
|
|
*
|
|
* (c) Graham Campbell <graham@alt-three.com>
|
|
*
|
|
* For the full copyright and license information, please view the LICENSE
|
|
* file that was distributed with this source code.
|
|
*/
|
|
|
|
namespace GrahamCampbell\GitHub;
|
|
|
|
use Github\Client;
|
|
use GrahamCampbell\GitHub\Authenticators\AuthenticatorFactory;
|
|
use GrahamCampbell\GitHub\Http\ClientBuilder;
|
|
use Http\Client\Common\Plugin\RetryPlugin;
|
|
use Illuminate\Contracts\Cache\Factory;
|
|
use InvalidArgumentException;
|
|
use Madewithlove\IlluminatePsrCacheBridge\Laravel\CacheItemPool;
|
|
|
|
/**
|
|
* This is the github factory class.
|
|
*
|
|
* @author Graham Campbell <graham@alt-three.com>
|
|
*/
|
|
class GitHubFactory
|
|
{
|
|
/**
|
|
* The authenticator factory instance.
|
|
*
|
|
* @var \GrahamCampbell\GitHub\Authenticators\AuthenticatorFactory
|
|
*/
|
|
protected $auth;
|
|
|
|
/**
|
|
* The illuminate cache instance.
|
|
*
|
|
* @var \Illuminate\Contracts\Cache\Factory|null
|
|
*/
|
|
protected $cache;
|
|
|
|
/**
|
|
* Create a new github factory instance.
|
|
*
|
|
* @param \GrahamCampbell\GitHub\Authenticators\AuthenticatorFactory $auth
|
|
* @param \Illuminate\Contracts\Cache\Factory|null $cache
|
|
*
|
|
* @return void
|
|
*/
|
|
public function __construct(AuthenticatorFactory $auth, Factory $cache = null)
|
|
{
|
|
$this->auth = $auth;
|
|
$this->cache = $cache;
|
|
}
|
|
|
|
/**
|
|
* Make a new github client.
|
|
*
|
|
* @param string[] $config
|
|
*
|
|
* @throws \InvalidArgumentException
|
|
*
|
|
* @return \Github\Client
|
|
*/
|
|
public function make(array $config)
|
|
{
|
|
$client = new Client($this->getBuilder($config), array_get($config, 'version'), array_get($config, 'enterprise'));
|
|
|
|
if (!array_key_exists('method', $config)) {
|
|
throw new InvalidArgumentException('The github factory requires an auth method.');
|
|
}
|
|
|
|
if ($config['method'] === 'none') {
|
|
return $client;
|
|
}
|
|
|
|
return $this->auth->make($config['method'])->with($client)->authenticate($config);
|
|
}
|
|
|
|
/**
|
|
* Get the http client builder.
|
|
*
|
|
* @param string[] $config
|
|
*
|
|
* @return \GrahamCampbell\GitHub\Http\ClientBuilder
|
|
*/
|
|
protected function getBuilder(array $config)
|
|
{
|
|
$builder = new ClientBuilder();
|
|
|
|
if ($backoff = array_get($config, 'backoff')) {
|
|
$builder->addPlugin(new RetryPlugin(['retries' => $backoff === true ? 2 : $backoff]));
|
|
}
|
|
|
|
if ($this->cache && class_exists(CacheItemPool::class) && $cache = array_get($config, 'cache')) {
|
|
$builder->addCache(new CacheItemPool($this->cache->store($cache === true ? null : $cache)));
|
|
}
|
|
|
|
return $builder;
|
|
}
|
|
}
|
|
|