123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 |
- <?php
- namespace Braintree;
- /**
- * Braintree OAuthGateway module
- * PHP Version 5
- * Creates and manages Braintree Addresses
- *
- * @package Braintree
- */
- class OAuthGateway
- {
- private $_gateway;
- private $_config;
- private $_http;
- public function __construct($gateway)
- {
- $this->_gateway = $gateway;
- $this->_config = $gateway->config;
- $this->_http = new Http($gateway->config);
- $this->_http->useClientCredentials();
- $this->_config->assertHasClientCredentials();
- }
- public function createTokenFromCode($params)
- {
- $params['grantType'] = "authorization_code";
- return $this->_createToken($params);
- }
- public function createTokenFromRefreshToken($params)
- {
- $params['grantType'] = "refresh_token";
- return $this->_createToken($params);
- }
- public function revokeAccessToken($accessToken)
- {
- $params = ['token' => $accessToken];
- $response = $this->_http->post('/oauth/revoke_access_token', $params);
- return $this->_verifyGatewayResponse($response);
- }
- private function _createToken($params)
- {
- $params = ['credentials' => $params];
- $response = $this->_http->post('/oauth/access_tokens', $params);
- return $this->_verifyGatewayResponse($response);
- }
- private function _verifyGatewayResponse($response)
- {
- if (isset($response['credentials'])) {
- $result = new Result\Successful(
- OAuthCredentials::factory($response['credentials'])
- );
- return $this->_mapSuccess($result);
- } else if (isset($response['result'])) {
- $result = new Result\Successful(
- OAuthResult::factory($response['result'])
- );
- return $this->_mapAccessTokenRevokeSuccess($result);
- } else if (isset($response['apiErrorResponse'])) {
- $result = new Result\Error($response['apiErrorResponse']);
- return $this->_mapError($result);
- } else {
- throw new Exception\Unexpected(
- "Expected credentials or apiErrorResponse"
- );
- }
- }
- public function _mapError($result)
- {
- $error = $result->errors->deepAll()[0];
- if ($error->code == Error\Codes::OAUTH_INVALID_GRANT) {
- $result->error = 'invalid_grant';
- } else if ($error->code == Error\Codes::OAUTH_INVALID_CREDENTIALS) {
- $result->error = 'invalid_credentials';
- } else if ($error->code == Error\Codes::OAUTH_INVALID_SCOPE) {
- $result->error = 'invalid_scope';
- }
- $result->errorDescription = explode(': ', $error->message)[1];
- return $result;
- }
- public function _mapAccessTokenRevokeSuccess($result)
- {
- $result->revocationResult = $result->success;
- return $result;
- }
- public function _mapSuccess($result)
- {
- $credentials = $result->credentials;
- $result->accessToken = $credentials->accessToken;
- $result->refreshToken = $credentials->refreshToken;
- $result->tokenType = $credentials->tokenType;
- $result->expiresAt = $credentials->expiresAt;
- return $result;
- }
- public function connectUrl($params = [])
- {
- $query = Util::camelCaseToDelimiterArray($params, '_');
- $query['client_id'] = $this->_config->getClientId();
- $queryString = preg_replace('/\%5B\d+\%5D/', '%5B%5D', http_build_query($query));
- return $this->_config->baseUrl() . '/oauth/connect?' . $queryString;
- }
- /**
- * @deprecated since version 3.26.1
- */
- public function computeSignature($url)
- {
- $key = hash('sha256', $this->_config->getClientSecret(), true);
- return hash_hmac('sha256', $url, $key);
- }
- }
- class_alias('Braintree\OAuthGateway', 'Braintree_OAuthGateway');
|