All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.trimble.id.HttpTokenClient Maven / Gradle / Ivy

Go to download

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