Files
@ 64f4ea89be89
Branch filter:
Location: rattail-project/posterior/src/Client.php - annotation
64f4ea89be89
2.0 KiB
text/x-php
Add basic HTTP client for Tailbone API
with inspiration from https://packagist.org/packages/avency/gitea
with inspiration from https://packagist.org/packages/avency/gitea
64f4ea89be89 64f4ea89be89 64f4ea89be89 64f4ea89be89 64f4ea89be89 64f4ea89be89 64f4ea89be89 64f4ea89be89 64f4ea89be89 64f4ea89be89 64f4ea89be89 64f4ea89be89 64f4ea89be89 64f4ea89be89 64f4ea89be89 64f4ea89be89 64f4ea89be89 64f4ea89be89 64f4ea89be89 64f4ea89be89 64f4ea89be89 64f4ea89be89 64f4ea89be89 64f4ea89be89 64f4ea89be89 64f4ea89be89 64f4ea89be89 64f4ea89be89 64f4ea89be89 64f4ea89be89 64f4ea89be89 64f4ea89be89 64f4ea89be89 64f4ea89be89 64f4ea89be89 64f4ea89be89 64f4ea89be89 64f4ea89be89 64f4ea89be89 64f4ea89be89 64f4ea89be89 64f4ea89be89 64f4ea89be89 64f4ea89be89 64f4ea89be89 64f4ea89be89 64f4ea89be89 64f4ea89be89 64f4ea89be89 64f4ea89be89 64f4ea89be89 64f4ea89be89 64f4ea89be89 64f4ea89be89 64f4ea89be89 64f4ea89be89 64f4ea89be89 64f4ea89be89 64f4ea89be89 64f4ea89be89 64f4ea89be89 64f4ea89be89 64f4ea89be89 64f4ea89be89 64f4ea89be89 64f4ea89be89 64f4ea89be89 64f4ea89be89 64f4ea89be89 64f4ea89be89 64f4ea89be89 64f4ea89be89 64f4ea89be89 64f4ea89be89 64f4ea89be89 | <?php
declare(strict_types=1);
namespace Rattail\Posterior;
use Psr\Http\Message\ResponseInterface;
class Client
{
private $baseURI;
private $httpClient;
private $inited;
public function __construct($baseURI, $token, bool $verifySSL = true)
{
$this->baseURI = $baseURI;
$parts = parse_url($baseURI);
$options = [
'base_uri' => $baseURI,
'cookies' => true,
'headers' => [
'Authorization' => "Bearer {$token}",
// TODO: is this a good idea, or hacky security
// risk..? without it, can get error response: 400
// Client Error: Bad CSRF Origin for url
'Origin' => "{$parts['scheme']}://{$parts['host']}",
],
'verify' => $verifySSL,
];
$this->httpClient = new \GuzzleHttp\Client($options);
$this->inited = false;
}
private function init()
{
if ($this->inited) {
return;
}
// fetch 'session' endpoint, to get current xsrf token
$response = $this->get('/session');
// look for xsrf token cookie
$jar = $this->httpClient->getConfig('cookies');
foreach ($jar->toArray() as $cookie) {
// and save it when found
if ($cookie['Name'] == 'XSRF-TOKEN') {
$this->xsrfToken = $cookie['Value'];
$this->inited = true;
break;
}
}
}
public function get(string $uri = '', array $options = []): ResponseInterface
{
$uri = $this->baseURI . $uri;
return $this->httpClient->request('GET', $uri, $options);
}
public function post(string $uri = '', array $data = []): ResponseInterface
{
$this->init();
$uri = $this->baseURI . $uri;
$options = [
'headers' => ['X-XSRF-TOKEN' => $this->xsrfToken],
'json' => $data,
];
return $this->httpClient->request('POST', $uri, $options);
}
}
|