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

com.sequencing.oauth.config.AuthenticationParameters Maven / Gradle / Ivy

package com.sequencing.oauth.config;

import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.SecureRandom;

import org.apache.commons.codec.binary.Hex;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * Defines all required configuration parameters needed to carry on authentication
 * against sequencing.com backend 
 */
public class AuthenticationParameters
{
	public static final String DEFAULT_AUTH_URI = "https://sequencing.com/oauth2/authorize"; 
	public static final String DEFAULT_TOKEN_URI = "https://sequencing.com/oauth2/token"; 
	public static final String DEFAULT_API_URI = "https://api.sequencing.com"; 
	public static final String DEFAULT_RESPONSE_TYPE = "code"; 
	public static final String DEFAULT_SCOPE = "demo"; 
	public static final String DEFAULT_GRANT_TYPE = "authorization_code";
	public static final String DEFAULT_GRANT_TYPE_REFRESH = "refresh_token"; 
	
	private static final Logger log = LoggerFactory.getLogger(AuthenticationParameters.class);

	/**
	 * URI of Sequencing oAuth2 where you can request user to authorize your
	 * app.
	 */
	private final String oAuthAuthorizationUri;

	/**
	 * URI of Sequencing oAuth2 where you can obtain access token.
	 */
	private final String oAuthTokenUri;

	/**
	 * Sequencing API endpoint.
	 */
	private final String apiUri;

	/**
	 * Redirect URI of your oauth2 app, where it expects Sequencing oAuth2 to
	 * redirect browser.
	 */
	private final String redirectUri;

	/**
	 * Supply here 'code', which means you want to take the route of
	 * authorization code response.
	 */
	private final String responseType;

	/**
	 * oAuth2 state. It should be some random generated string. State you sent
	 * to authorize URI must match the state you get, when browser is redirected
	 * to the redirect URI you provided.
	 */
	private final String state;

	/**
	 * Id of your oauth2 app (oauth2 client). You will be able to get this value
	 * from Sequencing website.
	 */
	private final String clientId;

	/**
	 * Secret of your oauth2 app (oauth2 client). You will be able to get this
	 * value from Sequencing website. Keep this value private.
	 */
	private final String clientSecret;

	/**
	 * Scopes, access to which you request.
	 */
	private final String scope;

	/**
	 * Supply here 'authorization_code', which means you request to exchange the
	 * authorization code for the aouth2 tokens.
	 */
	private final String grantType;

	/**
	 * Supply here 'refresh_token', which means you request to refresh the
	 * token.
	 */
	private final String grantTypeRefreshToken;

	private AuthenticationParameters(ConfigurationBuilder builder) {
		oAuthAuthorizationUri = builder.oAuthAuthorizationUri;
		oAuthTokenUri = builder.oAuthTokenUri;
		apiUri = builder.apiUri;
		redirectUri = builder.redirectUri;
		responseType = builder.responseType;
		state = builder.state;
		clientId = builder.clientId;
		clientSecret = builder.clientSecret;
		scope = builder.scope;
		grantType = builder.grantType;
		grantTypeRefreshToken = builder.grantTypeRefreshToken;
	}

	public static class ConfigurationBuilder {

		private String redirectUri;
		private String clientId;
		private String clientSecret;
		private String state;
		private String oAuthAuthorizationUri;
		private String oAuthTokenUri;
		private String apiUri;
		private String responseType;
		private String scope;
		private String grantType;
		private String grantTypeRefreshToken;

		public ConfigurationBuilder()
		{
			this
				.withOAuthAuthorizationUri(DEFAULT_AUTH_URI)
				.withOAuthTokenUri(DEFAULT_TOKEN_URI)
				.withApiUri(DEFAULT_API_URI)
				.withResponseType(DEFAULT_RESPONSE_TYPE)
				.withScope(DEFAULT_SCOPE)
				.withGrantType(DEFAULT_GRANT_TYPE)
				.withGrantTypeRefreshToken(DEFAULT_GRANT_TYPE_REFRESH)
				.withState(nextState());
		}

		public ConfigurationBuilder withRedirectUri(String redirectUri) {
			this.redirectUri = redirectUri;
			return this;
		}

		public ConfigurationBuilder withClientId(String clientId) {
			this.clientId = clientId;
			return this;
		}

		public ConfigurationBuilder withClientSecret(String clientSecret) {
			this.clientSecret = clientSecret;
			return this;
		}

		public ConfigurationBuilder withState(String state) {
			this.state = state;
			return this;
		}

		public ConfigurationBuilder withOAuthAuthorizationUri(String oAuthAuthorizationUri) {
			this.oAuthAuthorizationUri = oAuthAuthorizationUri;
			return this;
		}

		public ConfigurationBuilder withOAuthTokenUri(String oAuthTokenUri) {
			this.oAuthTokenUri = oAuthTokenUri;
			return this;
		}

		public ConfigurationBuilder withApiUri(String apiUri) {
			this.apiUri = apiUri;
			return this;
		}

		public ConfigurationBuilder withResponseType(String responseType) {
			this.responseType = responseType;
			return this;
		}

		public ConfigurationBuilder withScope(String scope) {
			this.scope = scope;
			return this;
		}

		public ConfigurationBuilder withGrantType(String grantType) {
			this.grantType = grantType;
			return this;
		}

		public ConfigurationBuilder withGrantTypeRefreshToken(String grantTypeRefreshToken) {
			this.grantTypeRefreshToken = grantTypeRefreshToken;
			return this;
		}

		public AuthenticationParameters build() {
			return new AuthenticationParameters(this);
		}

		/**
		 * Returns MD5 hash from random string
		 */
		public String nextState()
		{
			SecureRandom random = new SecureRandom();
			String randomStr = new BigInteger(130, random).toString(32);
			
			MessageDigest messageDigest;
			byte[] resultByte = null;
			try {
				messageDigest = MessageDigest.getInstance("MD5");
				messageDigest.update(randomStr.getBytes("UTF8"));
				resultByte = messageDigest.digest();
			} catch (Exception e) {
				log.debug("Error generate md5 hash code", e);
				e.printStackTrace();
			}
			return new String(Hex.encodeHex(resultByte));
		}
	}

	public String getOAuthAuthorizationUri() {
		return oAuthAuthorizationUri;
	}

	public String getOAuthTokenUri() {
		return oAuthTokenUri;
	}

	public String getApiUri() {
		return apiUri;
	}

	public String getRedirectUri() {
		return redirectUri;
	}

	public String getResponseType() {
		return responseType;
	}

	public String getState() {
		return state;
	}

	public String getClientId() {
		return clientId;
	}

	public String getClientSecret() {
		return clientSecret;
	}

	public String getScope() {
		return scope;
	}

	public String getGrantType() {
		return grantType;
	}

	public String getGrantTypeRefreshToken() {
		return grantTypeRefreshToken;
	}
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy