Repository: ambari Updated Branches: refs/heads/trunk 12ed8b553 -> 4bdc4ad74
AMBARI-9609 - Views: Impersonator doesn't expose any way to POST a body or headers. (tbeerbower) Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/4bdc4ad7 Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/4bdc4ad7 Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/4bdc4ad7 Branch: refs/heads/trunk Commit: 4bdc4ad744aa5c1107021688a33308a4f06961b5 Parents: 12ed8b5 Author: tbeerbower <tbeerbo...@hortonworks.com> Authored: Fri Feb 13 10:44:21 2015 -0500 Committer: tbeerbower <tbeerbo...@hortonworks.com> Committed: Fri Feb 13 10:44:36 2015 -0500 ---------------------------------------------------------------------- .../server/view/HttpImpersonatorImpl.java | 17 ++---- .../ambari/server/view/ViewContextImpl.java | 4 +- .../apache/ambari/server/view/ViewRegistry.java | 22 +++---- .../server/view/ViewURLStreamProvider.java | 60 ++++++++++++++++---- .../server/view/HttpImpersonatorImplTest.java | 30 +++++----- .../ambari/server/view/ViewContextImplTest.java | 6 +- .../server/view/ViewURLStreamProviderTest.java | 60 +++++++++++++++++--- .../apache/ambari/view/HttpImpersonator.java | 4 ++ .../apache/ambari/view/ImpersonatorSetting.java | 4 ++ .../apache/ambari/view/URLStreamProvider.java | 39 ++++++++++++- 10 files changed, 183 insertions(+), 63 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/4bdc4ad7/ambari-server/src/main/java/org/apache/ambari/server/view/HttpImpersonatorImpl.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/view/HttpImpersonatorImpl.java b/ambari-server/src/main/java/org/apache/ambari/server/view/HttpImpersonatorImpl.java index 9d63d80..fe4e180 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/view/HttpImpersonatorImpl.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/view/HttpImpersonatorImpl.java @@ -24,7 +24,6 @@ import org.apache.ambari.server.proxy.ProxyService; import org.apache.ambari.view.ImpersonatorSetting; import org.apache.ambari.view.ViewContext; import org.apache.ambari.view.HttpImpersonator; -import org.apache.ambari.server.controller.internal.AppCookieManager; import java.io.BufferedReader; import java.io.IOException; @@ -45,7 +44,6 @@ import java.util.ArrayList; */ public class HttpImpersonatorImpl implements HttpImpersonator { private ViewContext context; - private AppCookieManager appCookieManager; private FactoryHelper helper; /** @@ -57,15 +55,13 @@ public class HttpImpersonatorImpl implements HttpImpersonator { } } - public HttpImpersonatorImpl(ViewContext c, AppCookieManager appCookieManager) { + public HttpImpersonatorImpl(ViewContext c) { this.context = c; - this.appCookieManager = appCookieManager; this.helper = new FactoryHelper(); } - public HttpImpersonatorImpl(ViewContext c, AppCookieManager appCookieManager, FactoryHelper h) { + public HttpImpersonatorImpl(ViewContext c, FactoryHelper h) { this.context = c; - this.appCookieManager = appCookieManager; this.helper = h; } @@ -115,18 +111,17 @@ public class HttpImpersonatorImpl implements HttpImpersonator { /** * Returns the result of the HTTP request by setting the "doAs" impersonation for the query param and username * in @param impersonatorSetting. - * @param urlToRead URL to request + * @param url URL to request * @param requestType HTTP Request type: GET, PUT, POST, DELETE, etc. * @param impersonatorSetting Setting class with default values for username and doAs param name. * To use different values, call the setters of the object. * @return Return a response as a String */ @Override - public String requestURL(String urlToRead, String requestType, final ImpersonatorSetting impersonatorSetting) { + public String requestURL(String url, String requestType, final ImpersonatorSetting impersonatorSetting) { String result = ""; BufferedReader rd; - String line = null; - String url = urlToRead; + String line; if (url.toLowerCase().contains(impersonatorSetting.getDoAsParamName().toLowerCase())) { throw new IllegalArgumentException("URL cannot contain \"" + impersonatorSetting.getDoAsParamName() + "\" parameter"); @@ -145,7 +140,7 @@ public class HttpImpersonatorImpl implements HttpImpersonator { HttpURLConnection connection = urlStreamProvider.processURL(url, requestType, null, headers); int responseCode = connection.getResponseCode(); - InputStream resultInputStream = null; + InputStream resultInputStream; if (responseCode >= ProxyService.HTTP_ERROR_RANGE_START) { resultInputStream = connection.getErrorStream(); } else { http://git-wip-us.apache.org/repos/asf/ambari/blob/4bdc4ad7/ambari-server/src/main/java/org/apache/ambari/server/view/ViewContextImpl.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/view/ViewContextImpl.java b/ambari-server/src/main/java/org/apache/ambari/server/view/ViewContextImpl.java index 3c736cc..b7a48a8 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/view/ViewContextImpl.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/view/ViewContextImpl.java @@ -331,7 +331,7 @@ public class ViewContextImpl implements ViewContext, ViewController { @Override public HttpImpersonatorImpl getHttpImpersonator() { ensureURLStreamProvider(); - return new HttpImpersonatorImpl(this, streamProvider.getAppCookieManager()); + return new HttpImpersonatorImpl(this); } @Override @@ -376,7 +376,7 @@ public class ViewContextImpl implements ViewContext, ViewController { // ensure that the URL stream provider has been created private synchronized void ensureURLStreamProvider() { if (streamProvider == null) { - streamProvider = viewRegistry.createURLStreamProvider(); + streamProvider = viewRegistry.createURLStreamProvider(this); } } http://git-wip-us.apache.org/repos/asf/ambari/blob/4bdc4ad7/ambari-server/src/main/java/org/apache/ambari/server/view/ViewRegistry.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/view/ViewRegistry.java b/ambari-server/src/main/java/org/apache/ambari/server/view/ViewRegistry.java index dc0ce01..7eccd66 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/view/ViewRegistry.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/view/ViewRegistry.java @@ -1528,18 +1528,20 @@ public class ViewRegistry { /** * Factory method to create a view URL stream provider. * + * @param viewContext the view context + * * @return a new view URL stream provider */ - protected ViewURLStreamProvider createURLStreamProvider() { - ComponentSSLConfiguration configuration1 = ComponentSSLConfiguration.instance(); + protected ViewURLStreamProvider createURLStreamProvider(ViewContext viewContext) { + ComponentSSLConfiguration sslConfiguration = ComponentSSLConfiguration.instance(); org.apache.ambari.server.controller.internal.URLStreamProvider streamProvider = new org.apache.ambari.server.controller.internal.URLStreamProvider( configuration.getRequestConnectTimeout(), configuration.getRequestReadTimeout(), - configuration1.getTruststorePath(), - configuration1.getTruststorePassword(), - configuration1.getTruststoreType()); - return new ViewURLStreamProvider(streamProvider); + sslConfiguration.getTruststorePath(), + sslConfiguration.getTruststorePassword(), + sslConfiguration.getTruststoreType()); + return new ViewURLStreamProvider(viewContext, streamProvider); } /** @@ -1548,14 +1550,14 @@ public class ViewRegistry { * @return a new view Ambari stream provider */ protected ViewAmbariStreamProvider createAmbariStreamProvider() { - ComponentSSLConfiguration configuration1 = ComponentSSLConfiguration.instance(); + ComponentSSLConfiguration sslConfiguration = ComponentSSLConfiguration.instance(); org.apache.ambari.server.controller.internal.URLStreamProvider streamProvider = new org.apache.ambari.server.controller.internal.URLStreamProvider( DEFAULT_REQUEST_CONNECT_TIMEOUT, DEFAULT_REQUEST_READ_TIMEOUT, - configuration1.getTruststorePath(), - configuration1.getTruststorePassword(), - configuration1.getTruststoreType()); + sslConfiguration.getTruststorePath(), + sslConfiguration.getTruststorePassword(), + sslConfiguration.getTruststoreType()); return new ViewAmbariStreamProvider(streamProvider, ambariSessionManager, AmbariServer.getController()); } } http://git-wip-us.apache.org/repos/asf/ambari/blob/4bdc4ad7/ambari-server/src/main/java/org/apache/ambari/server/view/ViewURLStreamProvider.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/view/ViewURLStreamProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/view/ViewURLStreamProvider.java index 87e2753..0b81e04 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/view/ViewURLStreamProvider.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/view/ViewURLStreamProvider.java @@ -18,11 +18,13 @@ package org.apache.ambari.server.view; -import org.apache.ambari.server.controller.internal.AppCookieManager; import org.apache.ambari.server.controller.internal.URLStreamProvider; +import org.apache.ambari.server.proxy.ProxyService; +import org.apache.ambari.view.ViewContext; import java.io.IOException; import java.io.InputStream; +import java.net.HttpURLConnection; import java.util.Collections; import java.util.HashMap; import java.util.List; @@ -32,6 +34,17 @@ import java.util.Map; * Wrapper around an internal URL stream provider. */ public class ViewURLStreamProvider implements org.apache.ambari.view.URLStreamProvider { + + /** + * The key for the "doAs" header. + */ + private static final String DO_AS_PARAM = "doAs"; + + /** + * The view context. + */ + private final ViewContext viewContext; + /** * Internal stream provider. */ @@ -43,9 +56,11 @@ public class ViewURLStreamProvider implements org.apache.ambari.view.URLStreamPr /** * Construct a view URL stream provider. * + * @param viewContext the associated view context * @param streamProvider the underlying stream provider */ - protected ViewURLStreamProvider(URLStreamProvider streamProvider) { + protected ViewURLStreamProvider(ViewContext viewContext, URLStreamProvider streamProvider) { + this.viewContext = viewContext; this.streamProvider = streamProvider; } @@ -53,26 +68,47 @@ public class ViewURLStreamProvider implements org.apache.ambari.view.URLStreamPr // ----- URLStreamProvider ----------------------------------------------- @Override - public InputStream readFrom(String spec, String requestMethod, String params, Map<String, String> headers) + public InputStream readFrom(String spec, String requestMethod, String body, Map<String, String> headers) throws IOException { // adapt the headers to the internal URLStreamProvider processURL signature Map<String, List<String>> headerMap = new HashMap<String, List<String>>(); for (Map.Entry<String, String> entry : headers.entrySet()) { headerMap.put(entry.getKey(), Collections.singletonList(entry.getValue())); } - return streamProvider.processURL(spec, requestMethod, params, headerMap).getInputStream(); + + HttpURLConnection connection = streamProvider.processURL(spec, requestMethod, body, headerMap); + + int responseCode = connection.getResponseCode(); + + return responseCode >= ProxyService.HTTP_ERROR_RANGE_START ? + connection.getErrorStream() : connection.getInputStream(); } + @Override + public InputStream readAs(String spec, String requestMethod, String body, Map<String, String> headers, + String userName) + throws IOException { + + if (spec.toLowerCase().contains(DO_AS_PARAM)) { + throw new IllegalArgumentException("URL cannot contain \"" + DO_AS_PARAM + "\" parameter."); + } - // ----- helper methods -------------------------------------------------- + if (headers == null) { + headers = new HashMap<String, String>(); + } else { + headers = new HashMap<String, String>(headers); + } - /** - * Get the associated app cookie manager - * - * @return get the app cookie manager - */ - protected AppCookieManager getAppCookieManager() { - return streamProvider.getAppCookieManager(); + headers.put(DO_AS_PARAM, userName); + + return readFrom(spec, requestMethod, body, headers); + } + + @Override + public InputStream readAsCurrent(String spec, String requestMethod, String body, Map<String, String> headers) + throws IOException { + + return readAs(spec, requestMethod, body, headers, viewContext.getUsername()); } } http://git-wip-us.apache.org/repos/asf/ambari/blob/4bdc4ad7/ambari-server/src/test/java/org/apache/ambari/server/view/HttpImpersonatorImplTest.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/view/HttpImpersonatorImplTest.java b/ambari-server/src/test/java/org/apache/ambari/server/view/HttpImpersonatorImplTest.java index 5a86c23..935b488 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/view/HttpImpersonatorImplTest.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/view/HttpImpersonatorImplTest.java @@ -18,11 +18,12 @@ package org.apache.ambari.server.view; -import junit.framework.TestCase; import org.apache.ambari.view.ImpersonatorSetting; import org.apache.ambari.view.ViewContext; import org.apache.ambari.server.controller.internal.AppCookieManager; import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; import org.mockito.Mockito; import java.io.BufferedReader; @@ -35,7 +36,7 @@ import static org.mockito.Matchers.*; import static org.mockito.Mockito.when; -public class HttpImpersonatorImplTest extends TestCase { +public class HttpImpersonatorImplTest { String cookie; String username; @@ -43,6 +44,7 @@ public class HttpImpersonatorImplTest extends TestCase { HttpImpersonatorImpl impersonator; String expectedResult; + @Before public void setUp() throws Exception { String uuid = UUID.randomUUID().toString().replace("-", ""); this.cookie = uuid; @@ -61,11 +63,11 @@ public class HttpImpersonatorImplTest extends TestCase { this.viewContext = Mockito.mock(ViewContext.class); when(this.viewContext.getUsername()).thenReturn(username); - this.impersonator = new HttpImpersonatorImpl(this.viewContext, mockAppCookieManager, mockFactory); + this.impersonator = new HttpImpersonatorImpl(this.viewContext, mockFactory); when(this.viewContext.getHttpImpersonator()).thenReturn(this.impersonator); } - @org.junit.Test + @Test public void testBasic() throws Exception { String urlToRead = "http://foo.com"; String requestMethod = "GET"; @@ -80,12 +82,12 @@ public class HttpImpersonatorImplTest extends TestCase { // Test specific params HttpURLConnection conn2 = (HttpURLConnection) url.openConnection(); - conn2 = this.viewContext.getHttpImpersonator().doAs(conn1, requestMethod, "admin", "username"); - Assert.assertEquals(requestMethod, conn1.getRequestMethod()); - Assert.assertEquals("admin", conn1.getRequestProperty("username")); + conn2 = this.viewContext.getHttpImpersonator().doAs(conn2, requestMethod, "admin", "username"); + Assert.assertEquals(requestMethod, conn2.getRequestMethod()); + Assert.assertEquals("admin", conn2.getRequestProperty("username")); } - @org.junit.Test + @Test public void testRequestURL() throws Exception { String urlToRead = "http://foo.com"; String requestMethod = "GET"; @@ -97,7 +99,7 @@ public class HttpImpersonatorImplTest extends TestCase { Assert.assertEquals(this.expectedResult, actualResult); } - @org.junit.Test + @Test public void testRequestURLWithCustom() throws Exception { String urlToRead = "http://foo.com"; String requestMethod = "GET"; @@ -109,7 +111,7 @@ public class HttpImpersonatorImplTest extends TestCase { Assert.assertEquals(this.expectedResult, actualResult); } - @org.junit.Test + @Test public void testInvalidURL() throws Exception { String urlToRead = "http://foo.com?" + "doAs" + "=hive"; String requestMethod = "GET"; @@ -117,10 +119,10 @@ public class HttpImpersonatorImplTest extends TestCase { HttpURLConnection conn = (HttpURLConnection) url.openConnection(); try { - conn = this.viewContext.getHttpImpersonator().doAs(conn, requestMethod); - fail("Expected an exception to be thrown." ); - } catch(Exception e) { - ; + this.viewContext.getHttpImpersonator().doAs(conn, requestMethod); + Assert.fail("Expected an exception to be thrown."); + } catch(IllegalArgumentException e) { + //expected } } } http://git-wip-us.apache.org/repos/asf/ambari/blob/4bdc4ad7/ambari-server/src/test/java/org/apache/ambari/server/view/ViewContextImplTest.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/view/ViewContextImplTest.java b/ambari-server/src/test/java/org/apache/ambari/server/view/ViewContextImplTest.java index 88110f7..84794e8 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/view/ViewContextImplTest.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/view/ViewContextImplTest.java @@ -178,11 +178,11 @@ public class ViewContextImplTest { viewInstanceDefinition.addResourceProvider(type, provider); - expect(viewRegistry.createURLStreamProvider()).andReturn(urlStreamProvider); + ViewContextImpl viewContext = new ViewContextImpl(viewInstanceDefinition, viewRegistry); - replay(viewRegistry); + expect(viewRegistry.createURLStreamProvider(viewContext)).andReturn(urlStreamProvider); - ViewContextImpl viewContext = new ViewContextImpl(viewInstanceDefinition, viewRegistry); + replay(viewRegistry); Assert.assertEquals(urlStreamProvider, viewContext.getURLStreamProvider()); http://git-wip-us.apache.org/repos/asf/ambari/blob/4bdc4ad7/ambari-server/src/test/java/org/apache/ambari/server/view/ViewURLStreamProviderTest.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/view/ViewURLStreamProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/view/ViewURLStreamProviderTest.java index 3241e46..4a265e7 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/view/ViewURLStreamProviderTest.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/view/ViewURLStreamProviderTest.java @@ -18,8 +18,8 @@ package org.apache.ambari.server.view; -import org.apache.ambari.server.controller.internal.AppCookieManager; import org.apache.ambari.server.controller.internal.URLStreamProvider; +import org.apache.ambari.view.ViewContext; import org.junit.Assert; import org.junit.Test; @@ -43,6 +43,7 @@ public class ViewURLStreamProviderTest { URLStreamProvider streamProvider = createNiceMock(URLStreamProvider.class); HttpURLConnection urlConnection = createNiceMock(HttpURLConnection.class); InputStream inputStream = createNiceMock(InputStream.class); + ViewContext viewContext = createNiceMock(ViewContext.class); Map<String, String> headers = new HashMap<String, String>(); headers.put("header", "headerValue"); @@ -55,7 +56,7 @@ public class ViewURLStreamProviderTest { replay(streamProvider, urlConnection, inputStream); - ViewURLStreamProvider viewURLStreamProvider = new ViewURLStreamProvider(streamProvider); + ViewURLStreamProvider viewURLStreamProvider = new ViewURLStreamProvider(viewContext, streamProvider); Assert.assertEquals(inputStream, viewURLStreamProvider.readFrom("spec", "requestMethod", "params", headers)); @@ -63,18 +64,59 @@ public class ViewURLStreamProviderTest { } @Test - public void testGetAppCookieManager() throws Exception { + public void testReadAs() throws Exception { + URLStreamProvider streamProvider = createNiceMock(URLStreamProvider.class); - AppCookieManager appCookieManager = createNiceMock(AppCookieManager.class); + HttpURLConnection urlConnection = createNiceMock(HttpURLConnection.class); + InputStream inputStream = createNiceMock(InputStream.class); + ViewContext viewContext = createNiceMock(ViewContext.class); + + Map<String, String> headers = new HashMap<String, String>(); + headers.put("header", "headerValue"); + headers.put("doAs", "joe"); + + Map<String, List<String>> headerMap = new HashMap<String, List<String>>(); + headerMap.put("header", Collections.singletonList("headerValue")); + headerMap.put("doAs", Collections.singletonList("joe")); - expect(streamProvider.getAppCookieManager()).andReturn(appCookieManager); + expect(streamProvider.processURL("spec", "requestMethod", "params", headerMap)).andReturn(urlConnection); + expect(urlConnection.getInputStream()).andReturn(inputStream); + + replay(streamProvider, urlConnection, inputStream); + + ViewURLStreamProvider viewURLStreamProvider = new ViewURLStreamProvider(viewContext, streamProvider); + + Assert.assertEquals(inputStream, viewURLStreamProvider.readAs("spec", "requestMethod", "params", headers, "joe")); + + verify(streamProvider, urlConnection, inputStream); + } + + @Test + public void testReadAsCurrent() throws Exception { + + URLStreamProvider streamProvider = createNiceMock(URLStreamProvider.class); + HttpURLConnection urlConnection = createNiceMock(HttpURLConnection.class); + InputStream inputStream = createNiceMock(InputStream.class); + ViewContext viewContext = createNiceMock(ViewContext.class); + + Map<String, String> headers = new HashMap<String, String>(); + headers.put("header", "headerValue"); + headers.put("doAs", "joe"); + + Map<String, List<String>> headerMap = new HashMap<String, List<String>>(); + headerMap.put("header", Collections.singletonList("headerValue")); + headerMap.put("doAs", Collections.singletonList("joe")); + + expect(streamProvider.processURL("spec", "requestMethod", "params", headerMap)).andReturn(urlConnection); + expect(urlConnection.getInputStream()).andReturn(inputStream); + expect(viewContext.getUsername()).andReturn("joe").anyTimes(); - replay(streamProvider, appCookieManager); + replay(streamProvider, urlConnection, inputStream, viewContext); - ViewURLStreamProvider viewURLStreamProvider = new ViewURLStreamProvider(streamProvider); + ViewURLStreamProvider viewURLStreamProvider = new ViewURLStreamProvider(viewContext, streamProvider); - Assert.assertEquals(appCookieManager, viewURLStreamProvider.getAppCookieManager()); + Assert.assertEquals(inputStream, viewURLStreamProvider.readAsCurrent("spec", "requestMethod", "params", headers)); - verify(streamProvider, appCookieManager); + verify(streamProvider, urlConnection, inputStream, viewContext); } } http://git-wip-us.apache.org/repos/asf/ambari/blob/4bdc4ad7/ambari-views/src/main/java/org/apache/ambari/view/HttpImpersonator.java ---------------------------------------------------------------------- diff --git a/ambari-views/src/main/java/org/apache/ambari/view/HttpImpersonator.java b/ambari-views/src/main/java/org/apache/ambari/view/HttpImpersonator.java index 00d5d86..02ce101 100644 --- a/ambari-views/src/main/java/org/apache/ambari/view/HttpImpersonator.java +++ b/ambari-views/src/main/java/org/apache/ambari/view/HttpImpersonator.java @@ -21,7 +21,11 @@ import java.net.HttpURLConnection; /** * Interface for views to impersonate users over HTTP request. + * + * @deprecated As of release 2.0, replaced by + * {@link URLStreamProvider#readAs(String, String, String, java.util.Map, String)} */ +@Deprecated public interface HttpImpersonator { /** http://git-wip-us.apache.org/repos/asf/ambari/blob/4bdc4ad7/ambari-views/src/main/java/org/apache/ambari/view/ImpersonatorSetting.java ---------------------------------------------------------------------- diff --git a/ambari-views/src/main/java/org/apache/ambari/view/ImpersonatorSetting.java b/ambari-views/src/main/java/org/apache/ambari/view/ImpersonatorSetting.java index 53f6189..d3ab0ce 100644 --- a/ambari-views/src/main/java/org/apache/ambari/view/ImpersonatorSetting.java +++ b/ambari-views/src/main/java/org/apache/ambari/view/ImpersonatorSetting.java @@ -19,7 +19,11 @@ package org.apache.ambari.view; /** * Interface that provides default values for impersonating, such as the username and doAs parameter name. + * + * @deprecated As of release 2.0, replaced by + * {@link URLStreamProvider#readAs(String, String, String, java.util.Map, String)} */ +@Deprecated public interface ImpersonatorSetting { /** http://git-wip-us.apache.org/repos/asf/ambari/blob/4bdc4ad7/ambari-views/src/main/java/org/apache/ambari/view/URLStreamProvider.java ---------------------------------------------------------------------- diff --git a/ambari-views/src/main/java/org/apache/ambari/view/URLStreamProvider.java b/ambari-views/src/main/java/org/apache/ambari/view/URLStreamProvider.java index 8976cea..2b667e4 100644 --- a/ambari-views/src/main/java/org/apache/ambari/view/URLStreamProvider.java +++ b/ambari-views/src/main/java/org/apache/ambari/view/URLStreamProvider.java @@ -31,13 +31,48 @@ public interface URLStreamProvider { * * @param spec the String to parse as a URL * @param requestMethod the HTTP method (GET,POST,PUT,etc.). - * @param params the body of the request; may be null + * @param body the body of the request; may be null * @param headers the headers of the request; may be null * * @return the input stream * * @throws IOException if an error occurred connecting to the server */ - public InputStream readFrom(String spec, String requestMethod, String params, Map<String, String> headers) + public InputStream readFrom(String spec, String requestMethod, String body, Map<String, String> headers) throws IOException; + + /** + * Read from the input stream specified by the given URL spec as the given user. This method sets the + * "doAs" user header to impersonate the user over the request. + * + * @param spec the String to parse as a URL + * @param requestMethod the HTTP method (GET,POST,PUT,etc.). + * @param body the body of the request; may be null + * @param headers the headers of the request; may be null + * @param userName the "doAs" user name + * + * @return the input stream + * + * @throws IOException if an error occurred connecting to the server + */ + public InputStream readAs(String spec, String requestMethod, String body, Map<String, String> headers, + String userName) + throws IOException; + + /** + * Read from the input stream specified by the given URL spec as the current user. This method sets the + * "doAs" user header to impersonate the user over the request. + * + * @param spec the String to parse as a URL + * @param requestMethod the HTTP method (GET,POST,PUT,etc.). + * @param body the body of the request; may be null + * @param headers the headers of the request; may be null + * + * @return the input stream + * + * @throws IOException if an error occurred connecting to the server + */ + public InputStream readAsCurrent(String spec, String requestMethod, String body, Map<String, String> headers) + throws IOException; + }