
com.trimble.id.HttpTokenClient Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of trimble-id Show documentation
Show all versions of trimble-id Show documentation
Trimble Identity OAuth Client library holds the client classes that are used for communicating with Trimble Identity Service
The newest version!
package com.trimble.id;
import static com.trimble.id.AuthenticationConstants.AUTHORIZATION;
import static com.trimble.id.AuthenticationConstants.INVALID_ENDPOINT_PROVIDER;
import static com.trimble.id.AuthenticationConstants.SDK_USER_AGENT_HEADER;
import static com.trimble.id.AuthenticationConstants.SDK_VARIANT;
import static com.trimble.id.AuthenticationConstants.SDK_VERSION;
import java.io.IOException;
import java.util.concurrent.CompletableFuture;
import com.fasterxml.jackson.databind.ObjectMapper;
import okhttp3.Credentials;
import okhttp3.FormBody;
import okhttp3.FormBody.Builder;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import okhttp3.ResponseBody;
public class HttpTokenClient implements IHttpTokenClient {
private String tokenEndpointUrl;
private String revokeTokenEndpointUrl;
private ObjectMapper objectMapper;
private OkHttpClient okHttpClient;
public HttpTokenClient(IEndpointProvider endpointProvider) {
if (endpointProvider == null) {
throw new SDKClientException(INVALID_ENDPOINT_PROVIDER);
}
endpointProvider.getTokenEndpoint().thenAccept((endpoint) -> {
this.tokenEndpointUrl = endpoint.toString();
});
endpointProvider.getRevocationEndpoint().thenAccept((endpoint) -> {
this.revokeTokenEndpointUrl = endpoint.toString();
});
this.objectMapper = new ObjectMapper();
this.okHttpClient = new OkHttpClient();
}
public CompletableFuture getOauthTokens(TokenRequest tokenRequest) throws SDKClientException {
ResponseBody responseBody = null;
Request request = createRequest(getTokenEndpointUrl(), tokenRequest);
try {
Response response = getOkHttpClient().newCall(request).execute();
responseBody = response.body();
return CompletableFuture
.completedFuture(getObjectMapper().readValue(responseBody.string(), TokenResponse.class));
} catch (IOException e) {
throw new SDKClientException(e, e.getCause(), e.getMessage());
} finally {
if (responseBody != null)
responseBody.close();
}
}
public CompletableFuture revokeRefreshToken(TokenRequest tokenRequest) throws SDKClientException {
Request request = createRequest(getRevokeTokenEndpointUrl(), tokenRequest);
try {
Response response = getOkHttpClient().newCall(request).execute();
return CompletableFuture.completedFuture(response.code());
} catch (IOException e) {
throw new SDKClientException(e, e.getCause(), e.getMessage());
}
}
private Request createRequest(String url, TokenRequest tokenRequest) {
Builder formBuilder = new FormBody.Builder();
for (NameValuePair nameValuePair : tokenRequest.getFormEntries()) {
formBuilder.add(nameValuePair.getName(), nameValuePair.getValue());
}
// For PKCE flow since client secret is not required
if (tokenRequest.getClientSecret() == null) {
return new Request.Builder().url(url)
.addHeader(SDK_USER_AGENT_HEADER, this.getClass().getPackage().getName() + "/" + SDK_VERSION + " " + SDK_VARIANT)
.post(formBuilder.build()).build();
}
return new Request.Builder().url(url)
.addHeader(SDK_USER_AGENT_HEADER, this.getClass().getPackage().getName() + "/" + SDK_VERSION + " " + SDK_VARIANT)
.addHeader(AUTHORIZATION, Credentials.basic(tokenRequest.getClientId(), tokenRequest.getClientSecret()))
.post(formBuilder.build()).build();
}
public String getTokenEndpointUrl() {
return tokenEndpointUrl;
}
public String getRevokeTokenEndpointUrl() {
return revokeTokenEndpointUrl;
}
public ObjectMapper getObjectMapper() {
return objectMapper;
}
public OkHttpClient getOkHttpClient() {
return okHttpClient;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy