mirror of
https://github.com/OpenXE-org/OpenXE.git
synced 2024-12-25 14:10:28 +01:00
77 lines
2.3 KiB
PHP
77 lines
2.3 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace Xentral\Modules\GoogleApi\Client;
|
|
|
|
use Xentral\Components\HttpClient\HttpClientFactory;
|
|
use Xentral\Components\HttpClient\RequestOptions;
|
|
use Xentral\Components\Logger\LoggerAwareTrait;
|
|
use Xentral\Modules\GoogleApi\Exception\GoogleAccountNotFoundException;
|
|
use Xentral\Modules\GoogleApi\Exception\NoAccessTokenException;
|
|
use Xentral\Modules\GoogleApi\Exception\NoRefreshTokenException;
|
|
use Xentral\Modules\GoogleApi\Service\GoogleAccountGateway;
|
|
use Xentral\Modules\GoogleApi\Service\GoogleAuthorizationService;
|
|
|
|
final class GoogleApiClientFactory
|
|
{
|
|
use LoggerAwareTrait;
|
|
|
|
/** @var GoogleAccountGateway $gateway */
|
|
private $gateway;
|
|
|
|
/** @var GoogleAuthorizationService $authorizer */
|
|
private $auth;
|
|
|
|
/** @var HttpClientFactory $clientFactory */
|
|
private $clientFactory;
|
|
|
|
/**
|
|
* @param GoogleAccountGateway $gateway
|
|
* @param GoogleAuthorizationService $auth
|
|
* @param HttpClientFactory $clientFactory
|
|
*/
|
|
public function __construct(
|
|
GoogleAccountGateway $gateway,
|
|
GoogleAuthorizationService $auth,
|
|
HttpClientFactory $clientFactory
|
|
)
|
|
{
|
|
$this->gateway = $gateway;
|
|
$this->auth = $auth;
|
|
$this->clientFactory = $clientFactory;
|
|
}
|
|
|
|
/**
|
|
* @param int $userId
|
|
*
|
|
* @throws GoogleAccountNotFoundException
|
|
* @throws NoRefreshTokenException
|
|
*
|
|
* @return GoogleApiClient
|
|
*/
|
|
public function createClient(int $userId): GoogleApiClient
|
|
{
|
|
$account = $this->gateway->getAccountByUser($userId);
|
|
try{
|
|
$token = $this->gateway->getAccessToken($account->getId());
|
|
} catch (NoAccessTokenException $e) {
|
|
$token = null;
|
|
}
|
|
if ($token === null || $token->getTimeToLive() < 10) {
|
|
$token = $this->auth->refreshAccessToken($account);
|
|
}
|
|
$options = new RequestOptions();
|
|
$options->setHeader(
|
|
'Authorization',
|
|
sprintf('Bearer %s', $token->getToken())
|
|
);
|
|
$options->setHeader('Accept', 'application/json');
|
|
$httpClient = $this->clientFactory->createClient($options);
|
|
$client = new GoogleApiClient($httpClient, $account);
|
|
$client->setLogger($this->logger);
|
|
|
|
return $client;
|
|
}
|
|
}
|