1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91
<?php
namespace Commercetools\Core\Client\OAuth;
use GuzzleHttp\Client;
class RefreshFlowTokenProvider implements RefreshTokenProvider
{
const GRANT_TYPE = 'grant_type';
const GRANT_TYPE_REFRESH_TOKEN = 'refresh_token';
const SCOPE = 'scope';
const REFRESH_TOKEN = 'refresh_token';
const ACCESS_TOKEN = 'access_token';
const EXPIRES_IN = 'expires_in';
private $client;
private $credentials;
private $accessTokenUrl;
private $anonymousFlowTokenProvider;
private $tokenStorage;
public function __construct(
Client $client,
$accessTokenUrl,
ClientCredentials $credentials,
TokenStorage $tokenStorage
) {
$this->accessTokenUrl = $accessTokenUrl;
$this->client = $client;
$this->credentials = $credentials;
$this->tokenStorage = $tokenStorage;
}
public function getToken()
{
return $this->refreshToken();
}
public function refreshToken()
{
$refreshToken = $this->tokenStorage->getRefreshToken();
$data = [
self::GRANT_TYPE => self::GRANT_TYPE_REFRESH_TOKEN,
self::REFRESH_TOKEN => $refreshToken
];
$options = [
'form_params' => $data,
'auth' => [$this->credentials->getClientId(), $this->credentials->getClientSecret()]
];
$result = $this->client->post($this->accessTokenUrl, $options);
$body = json_decode((string)$result->getBody(), true);
$token = new Token((string)$body[self::ACCESS_TOKEN], (int)$body[self::EXPIRES_IN], $body[self::SCOPE]);
$token->setRefreshToken($refreshToken);
return $token;
}
}