* @license http://www.opensource.org/licenses/mit-license.html MIT License * @link https://api.hubic.com/docs/ */ namespace OAuth\OAuth2\Service; use OAuth\OAuth2\Token\StdOAuth2Token; use OAuth\Common\Http\Exception\TokenResponseException; use OAuth\Common\Http\Uri\Uri; use OAuth\Common\Consumer\CredentialsInterface; use OAuth\Common\Http\Client\ClientInterface; use OAuth\Common\Storage\TokenStorageInterface; use OAuth\Common\Http\Uri\UriInterface; /** * Hubic service. * * @author Pedro Amorim * @license http://www.opensource.org/licenses/mit-license.html MIT License * @link https://api.hubic.com/docs/ */ class Hubic extends AbstractService { // Scopes const SCOPE_USAGE_GET = 'usage.r'; const SCOPE_ACCOUNT_GET = 'account.r'; const SCOPE_GETALLLINKS_GET = 'getAllLinks.r'; const SCOPE_CREDENTIALS_GET = 'credentials.r'; const SCOPE_SPONSORCODE_GET = 'sponsorCode.r'; const SCOPE_ACTIVATE_POST = 'activate.w'; const SCOPE_SPONSORED_GET = 'sponsored.r'; const SCOPE_LINKS_GET = 'links.r'; const SCOPE_LINKS_POST = 'links.rw'; const SCOPE_LINKS_ALL = 'links.drw'; public function __construct( CredentialsInterface $credentials, ClientInterface $httpClient, TokenStorageInterface $storage, $scopes = array(), UriInterface $baseApiUri = null ) { parent::__construct( $credentials, $httpClient, $storage, $scopes, $baseApiUri, true ); if (null === $baseApiUri) { $this->baseApiUri = new Uri('https://api.hubic.com/'); } } /** * {@inheritdoc} */ public function getAuthorizationEndpoint() { return new Uri('https://api.hubic.com/oauth/auth'); } /** * {@inheritdoc} */ public function getAccessTokenEndpoint() { return new Uri('https://api.hubic.com/oauth/token'); } /** * {@inheritdoc} */ protected function getAuthorizationMethod() { return static::AUTHORIZATION_METHOD_HEADER_BEARER; } /** * {@inheritdoc} */ protected function parseAccessTokenResponse($responseBody) { $data = json_decode($responseBody, true); if (null === $data || !is_array($data)) { throw new TokenResponseException('Unable to parse response.'); } elseif (isset($data['error'])) { throw new TokenResponseException( 'Error in retrieving token: "' . $data['error'] . '"' ); } $token = new StdOAuth2Token(); $token->setAccessToken($data['access_token']); $token->setLifetime($data['expires_in']); if (isset($data['refresh_token'])) { $token->setRefreshToken($data['refresh_token']); unset($data['refresh_token']); } unset($data['access_token']); unset($data['expires_in']); $token->setExtraParams($data); return $token; } /** * {@inheritdoc} */ public function getAuthorizationUri(array $additionalParameters = array()) { $parameters = array_merge( $additionalParameters, array( 'type' => 'web_server', 'client_id' => $this->credentials->getConsumerId(), 'redirect_uri' => $this->credentials->getCallbackUrl(), 'response_type' => 'code', ) ); // special, hubic use a param scope with commas // between scopes instead of spaces $parameters['scope'] = implode(',', $this->scopes); if ($this->needsStateParameterInAuthUrl()) { if (!isset($parameters['state'])) { $parameters['state'] = $this->generateAuthorizationState(); } $this->storeAuthorizationState($parameters['state']); } // Build the url $url = clone $this->getAuthorizationEndpoint(); foreach ($parameters as $key => $val) { $url->addToQuery($key, $val); } return $url; } }