Commit 497dcc07 by nixonrodrigues Committed by apoorvnaik

ATLAS-1906: Atlas client should support setting hadoop-jwt token in header.

parent c4fd42b8
...@@ -77,7 +77,7 @@ public class AtlasAdminClient { ...@@ -77,7 +77,7 @@ public class AtlasAdminClient {
String[] basicAuthUsernamePassword = AuthenticationUtil.getBasicAuthenticationInput(); String[] basicAuthUsernamePassword = AuthenticationUtil.getBasicAuthenticationInput();
atlasClient = new AtlasClient(atlasServerUri, basicAuthUsernamePassword); atlasClient = new AtlasClient(atlasServerUri, basicAuthUsernamePassword);
} else { } else {
atlasClient = new AtlasClient(atlasServerUri, null); atlasClient = new AtlasClient(atlasServerUri);
} }
return handleCommand(commandLine, atlasServerUri, atlasClient); return handleCommand(commandLine, atlasServerUri, atlasClient);
} }
......
...@@ -39,6 +39,7 @@ import org.slf4j.Logger; ...@@ -39,6 +39,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import javax.ws.rs.HttpMethod; import javax.ws.rs.HttpMethod;
import javax.ws.rs.core.Cookie;
import javax.ws.rs.core.MediaType; import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.MultivaluedMap; import javax.ws.rs.core.MultivaluedMap;
import javax.ws.rs.core.Response; import javax.ws.rs.core.Response;
...@@ -77,6 +78,7 @@ public abstract class AtlasBaseClient { ...@@ -77,6 +78,7 @@ public abstract class AtlasBaseClient {
private String basicAuthPassword; private String basicAuthPassword;
private AtlasClientContext atlasClientContext; private AtlasClientContext atlasClientContext;
private boolean retryEnabled = false; private boolean retryEnabled = false;
private Cookie cookie = null;
protected AtlasBaseClient() { protected AtlasBaseClient() {
} }
...@@ -106,6 +108,11 @@ public abstract class AtlasBaseClient { ...@@ -106,6 +108,11 @@ public abstract class AtlasBaseClient {
initializeState(baseUrls, ugi, doAsUser); initializeState(baseUrls, ugi, doAsUser);
} }
protected AtlasBaseClient(String[] baseUrls, Cookie cookie) {
this.cookie = cookie;
initializeState(baseUrls, null, null);
}
@VisibleForTesting @VisibleForTesting
protected AtlasBaseClient(WebResource service, Configuration configuration) { protected AtlasBaseClient(WebResource service, Configuration configuration) {
this.service = service; this.service = service;
...@@ -126,6 +133,10 @@ public abstract class AtlasBaseClient { ...@@ -126,6 +133,10 @@ public abstract class AtlasBaseClient {
initializeState(configuration, baseUrl, null, null); initializeState(configuration, baseUrl, null, null);
} }
public void setCookie(Cookie cookie) {
this.cookie = cookie;
}
protected static UserGroupInformation getCurrentUGI() throws AtlasException { protected static UserGroupInformation getCurrentUGI() throws AtlasException {
try { try {
return UserGroupInformation.getCurrentUser(); return UserGroupInformation.getCurrentUser();
...@@ -172,14 +183,14 @@ public abstract class AtlasBaseClient { ...@@ -172,14 +183,14 @@ public abstract class AtlasBaseClient {
final URLConnectionClientHandler handler; final URLConnectionClientHandler handler;
if ((!AuthenticationUtil.isKerberosAuthenticationEnabled()) && basicAuthUser != null && basicAuthPassword != null) { if ((AuthenticationUtil.isKerberosAuthenticationEnabled())) {
handler = SecureClientUtils.getClientConnectionHandler(config, configuration, doAsUser, ugi);
} else {
if (configuration.getBoolean(TLS_ENABLED, false)) { if (configuration.getBoolean(TLS_ENABLED, false)) {
handler = SecureClientUtils.getUrlConnectionClientHandler(); handler = SecureClientUtils.getUrlConnectionClientHandler();
} else { } else {
handler = new URLConnectionClientHandler(); handler = new URLConnectionClientHandler();
} }
} else {
handler = SecureClientUtils.getClientConnectionHandler(config, configuration, doAsUser, ugi);
} }
Client client = new Client(handler, config); Client client = new Client(handler, config);
client.setReadTimeout(readTimeout); client.setReadTimeout(readTimeout);
...@@ -292,10 +303,20 @@ public abstract class AtlasBaseClient { ...@@ -292,10 +303,20 @@ public abstract class AtlasBaseClient {
if (LOG.isDebugEnabled()) { if (LOG.isDebugEnabled()) {
LOG.debug("Calling API [ {} : {} ] {}", api.getMethod(), api.getPath(), requestObject != null ? "<== " + requestObject : ""); LOG.debug("Calling API [ {} : {} ] {}", api.getMethod(), api.getPath(), requestObject != null ? "<== " + requestObject : "");
} }
clientResponse = resource
WebResource.Builder requestBuilder = resource.getRequestBuilder();
// Set content headers
requestBuilder
.accept(JSON_MEDIA_TYPE) .accept(JSON_MEDIA_TYPE)
.type(JSON_MEDIA_TYPE) .type(JSON_MEDIA_TYPE);
.method(api.getMethod(), ClientResponse.class, requestObject);
// Set cookie if present
if (cookie != null) {
requestBuilder.cookie(cookie);
}
clientResponse = requestBuilder.method(api.getMethod(), ClientResponse.class, requestObject);
if (LOG.isDebugEnabled()) { if (LOG.isDebugEnabled()) {
LOG.debug("API {} returned status {}", resource.getURI(), clientResponse.getStatus()); LOG.debug("API {} returned status {}", resource.getURI(), clientResponse.getStatus());
......
...@@ -42,6 +42,7 @@ import org.slf4j.Logger; ...@@ -42,6 +42,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import javax.ws.rs.HttpMethod; import javax.ws.rs.HttpMethod;
import javax.ws.rs.core.Cookie;
import javax.ws.rs.core.MultivaluedMap; import javax.ws.rs.core.MultivaluedMap;
import javax.ws.rs.core.Response; import javax.ws.rs.core.Response;
import java.util.ArrayList; import java.util.ArrayList;
...@@ -113,9 +114,33 @@ public class AtlasClient extends AtlasBaseClient { ...@@ -113,9 +114,33 @@ public class AtlasClient extends AtlasBaseClient {
public static final String UNKNOWN_STATUS = "Unknown status"; public static final String UNKNOWN_STATUS = "Unknown status";
// New constuctor for Basic auth /**
public AtlasClient(String[] baseUrl, String[] basicAuthUserNamepassword) { * Constructor for AtlasClient with cookie params as header
super(baseUrl, basicAuthUserNamepassword); * @param baseUrl
* @param cookieName
* @param value
* @param path
* @param domain
*/
public AtlasClient(String[] baseUrl, String cookieName, String value, String path, String domain) {
super(baseUrl, new Cookie( cookieName, value, path, domain));
}
/**
* Constructor for AtlasClient with cookie as header
* @param baseUrl
* @param cookie
*/
public AtlasClient(String[] baseUrl, Cookie cookie) {
super(baseUrl, cookie);
}
// New constructor for Basic auth
public AtlasClient(String[] baseUrl, String[] basicAuthUserNamePassword) {
super(baseUrl, basicAuthUserNamePassword);
} }
/** /**
...@@ -152,8 +177,8 @@ public class AtlasClient extends AtlasBaseClient { ...@@ -152,8 +177,8 @@ public class AtlasClient extends AtlasBaseClient {
} }
@VisibleForTesting @VisibleForTesting
public AtlasClient(Configuration configuration, String[] baseUrl, String[] basicAuthUserNamepassword) { public AtlasClient(Configuration configuration, String[] baseUrl, String[] basicAuthUserNamePassword) {
super(configuration, baseUrl, basicAuthUserNamepassword); super(configuration, baseUrl, basicAuthUserNamePassword);
} }
@VisibleForTesting @VisibleForTesting
......
...@@ -41,6 +41,7 @@ import org.apache.commons.configuration.Configuration; ...@@ -41,6 +41,7 @@ import org.apache.commons.configuration.Configuration;
import org.apache.hadoop.security.UserGroupInformation; import org.apache.hadoop.security.UserGroupInformation;
import javax.ws.rs.HttpMethod; import javax.ws.rs.HttpMethod;
import javax.ws.rs.core.Cookie;
import javax.ws.rs.core.MultivaluedMap; import javax.ws.rs.core.MultivaluedMap;
import javax.ws.rs.core.Response; import javax.ws.rs.core.Response;
import java.util.List; import java.util.List;
...@@ -122,8 +123,25 @@ public class AtlasClientV2 extends AtlasBaseClient { ...@@ -122,8 +123,25 @@ public class AtlasClientV2 extends AtlasBaseClient {
super(ugi, doAsUser, baseUrls); super(ugi, doAsUser, baseUrls);
} }
protected AtlasClientV2() { /**
super(); * Constructor for AtlasClient with cookie params as header
* @param baseUrl
* @param cookieName
* @param value
* @param path
* @param domain
*/
public AtlasClientV2(String[] baseUrl, String cookieName, String value, String path, String domain) {
super(baseUrl, new Cookie(cookieName, value, path, domain));
}
/**
* Constructor for AtlasClient with cookie as header
* @param baseUrl
* @param cookie
*/
public AtlasClientV2(String[] baseUrl, Cookie cookie) {
super(baseUrl, cookie);
} }
@VisibleForTesting @VisibleForTesting
......
...@@ -56,6 +56,8 @@ public class AtlasClientTest { ...@@ -56,6 +56,8 @@ public class AtlasClientTest {
@Mock @Mock
private WebResource service; private WebResource service;
@Mock
private WebResource.Builder resourceBuilderMock;
@Mock @Mock
private Configuration configuration; private Configuration configuration;
...@@ -430,11 +432,11 @@ public class AtlasClientTest { ...@@ -430,11 +432,11 @@ public class AtlasClientTest {
} }
private WebResource.Builder getBuilder(WebResource resourceObject) { private WebResource.Builder getBuilder(WebResource resourceObject) {
WebResource.Builder builder = mock(WebResource.Builder.class); when(resourceObject.getRequestBuilder()).thenReturn(resourceBuilderMock);
when(resourceObject.path(anyString())).thenReturn(resourceObject); when(resourceObject.path(anyString())).thenReturn(resourceObject);
when(resourceObject.accept(AtlasBaseClient.JSON_MEDIA_TYPE)).thenReturn(builder); when(resourceBuilderMock.accept(AtlasBaseClient.JSON_MEDIA_TYPE)).thenReturn(resourceBuilderMock);
when(builder.type(AtlasBaseClient.JSON_MEDIA_TYPE)).thenReturn(builder); when(resourceBuilderMock.type(AtlasBaseClient.JSON_MEDIA_TYPE)).thenReturn(resourceBuilderMock);
return builder; return resourceBuilderMock;
} }
private void setupRetryParams() { private void setupRetryParams() {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment