package org.oauth2.client4j.service;
import org.oauth2.client4j.builder.OAuthRequestBuilder;
import org.oauth2.client4j.builder.provider.Provider;
import org.oauth2.client4j.common.OAuth;
import org.oauth2.client4j.http.OAuthHttpClient;
import org.oauth2.client4j.http.OAuthRequest;
import org.oauth2.client4j.http.Request;
import org.oauth2.client4j.http.client.HttpClient;
import org.oauth2.client4j.http.response.JSONAccessTokenResponse;
import org.oauth2.client4j.http.response.OAuthResponse;
import org.oauth2.client4j.model.OAuthConfig;
public class OAuthServiceImpl implements OAuthService {
private final Provider provider;
private final OAuthConfig config;
private HttpClient httpClient;
public OAuthServiceImpl(Provider provider, OAuthConfig config) {
this.provider = provider;
this.config = config;
}
@Override
public OAuthRequest getAuthorizationRequest() {
return new OAuthRequestBuilder()
.url(provider.getAuthorizationEndpoint())
.requestType(provider.getAuthorRequestType()).parameter(config)
.build();
}
@Override
public OAuthResponse accessToken(String code) {
return this.accessToken(code, provider.getAccessTokenResponseClass());
}
@Override
public <T extends OAuthResponse> T accessToken(String code,
Class<T> responseClass) {
Request request = new OAuthRequestBuilder()
.url(provider.getAccessTokenEndpoint())
.requestType(provider.getAccessTokenRequestType()).body(config)
.code(code).build();
request.addHeader(OAuth.HeaderType.CONTENT_TYPE,
OAuth.ContentType.URL_ENCODED);
return new OAuthHttpClient(this.httpClient).send(request,
responseClass);
}
@Override
public JSONAccessTokenResponse accessJsonToken(String code) {
return this.accessToken(code, JSONAccessTokenResponse.class);
}
public void cutomeHttpClient(HttpClient client){
this.httpClient =client;
}
}