package com.braintreegateway; import com.braintreegateway.util.Http; import com.braintreegateway.util.NodeWrapper; import com.braintreegateway.util.Sha256Hasher; public class OAuthGateway { private Http http; private Configuration configuration; public OAuthGateway(Http http, Configuration configuration) { this.http = http; this.configuration = configuration; } public Result<OAuthCredentials> createTokenFromCode(OAuthCredentialsRequest request) { request.grantType("authorization_code"); NodeWrapper response = http.post("/oauth/access_tokens", request); return new Result<OAuthCredentials>(response, OAuthCredentials.class); } public Result<OAuthCredentials> createTokenFromRefreshToken(OAuthCredentialsRequest request) { request.grantType("refresh_token"); NodeWrapper response = http.post("/oauth/access_tokens", request); return new Result<OAuthCredentials>(response, OAuthCredentials.class); } public Result<OAuthResult> revokeAccessToken(String accessToken) { OAuthRevokeAccessTokenRequest request = new OAuthRevokeAccessTokenRequest(). token(accessToken); NodeWrapper response = http.post("/oauth/revoke_access_token", request); return new Result<OAuthResult>(response, OAuthResult.class); } public String connectUrl(OAuthConnectUrlRequest request) { request.clientId(configuration.getClientId()); String queryString = request.toQueryString(); String url = configuration.getBaseURL() + "/oauth/connect?" + queryString; return String.format("%1$s&signature=%2$s&algorithm=SHA256", url, computeSignature(url)); } public String computeSignature(String url) { Sha256Hasher hasher = new Sha256Hasher(); return hasher.hmacHash(configuration.getClientSecret(), url); } }