sonarrradarrplexorganizrnginxdashboardstartpagelandinghtpcserverhomepagesabnzbdheimdallembycouchpotatonzbgetbookmarkapplication-dashboardmuximuxlandingpage
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.
85 lines
2.5 KiB
85 lines
2.5 KiB
<?php
|
|
|
|
namespace Github\HttpClient\Plugin;
|
|
|
|
use Github\Client;
|
|
use Github\Exception\RuntimeException;
|
|
use Http\Client\Common\Plugin;
|
|
use Psr\Http\Message\RequestInterface;
|
|
|
|
/**
|
|
* Add authentication to the request.
|
|
*
|
|
* @author Tobias Nyholm <tobias.nyholm@gmail.com>
|
|
*/
|
|
class Authentication implements Plugin
|
|
{
|
|
private $tokenOrLogin;
|
|
private $password;
|
|
private $method;
|
|
|
|
public function __construct($tokenOrLogin, $password, $method)
|
|
{
|
|
$this->tokenOrLogin = $tokenOrLogin;
|
|
$this->password = $password;
|
|
$this->method = $method;
|
|
}
|
|
|
|
/**
|
|
* {@inheritdoc}
|
|
*/
|
|
public function handleRequest(RequestInterface $request, callable $next, callable $first)
|
|
{
|
|
switch ($this->method) {
|
|
case Client::AUTH_HTTP_PASSWORD:
|
|
$request = $request->withHeader(
|
|
'Authorization',
|
|
sprintf('Basic %s', base64_encode($this->tokenOrLogin.':'.$this->password))
|
|
);
|
|
break;
|
|
|
|
case Client::AUTH_HTTP_TOKEN:
|
|
$request = $request->withHeader('Authorization', sprintf('token %s', $this->tokenOrLogin));
|
|
break;
|
|
|
|
case Client::AUTH_URL_CLIENT_ID:
|
|
$uri = $request->getUri();
|
|
$query = $uri->getQuery();
|
|
|
|
$parameters = [
|
|
'client_id' => $this->tokenOrLogin,
|
|
'client_secret' => $this->password,
|
|
];
|
|
|
|
$query .= empty($query) ? '' : '&';
|
|
$query .= utf8_encode(http_build_query($parameters, '', '&'));
|
|
|
|
$uri = $uri->withQuery($query);
|
|
$request = $request->withUri($uri);
|
|
break;
|
|
|
|
case Client::AUTH_URL_TOKEN:
|
|
$uri = $request->getUri();
|
|
$query = $uri->getQuery();
|
|
|
|
$parameters = ['access_token' => $this->tokenOrLogin];
|
|
|
|
$query .= empty($query) ? '' : '&';
|
|
$query .= utf8_encode(http_build_query($parameters, '', '&'));
|
|
|
|
$uri = $uri->withQuery($query);
|
|
$request = $request->withUri($uri);
|
|
break;
|
|
|
|
case Client::AUTH_JWT:
|
|
$request = $request->withHeader('Authorization', sprintf('Bearer %s', $this->tokenOrLogin));
|
|
break;
|
|
|
|
default:
|
|
throw new RuntimeException(sprintf('%s not yet implemented', $this->method));
|
|
break;
|
|
}
|
|
|
|
return $next($request);
|
|
}
|
|
}
|
|
|