diff --git a/core/platform-api/che-core-api-core/src/main/java/org/eclipse/che/api/core/rest/DefaultHttpJsonRequest.java b/core/platform-api/che-core-api-core/src/main/java/org/eclipse/che/api/core/rest/DefaultHttpJsonRequest.java index e5143f55f4..b258fba865 100644 --- a/core/platform-api/che-core-api-core/src/main/java/org/eclipse/che/api/core/rest/DefaultHttpJsonRequest.java +++ b/core/platform-api/che-core-api-core/src/main/java/org/eclipse/che/api/core/rest/DefaultHttpJsonRequest.java @@ -48,6 +48,7 @@ import java.util.List; import java.util.Map; import static java.util.Objects.requireNonNull; +import static com.google.common.base.Strings.isNullOrEmpty; /** * Simple implementation of {@link HttpJsonRequest} based on {@link HttpURLConnection}. @@ -71,6 +72,7 @@ public class DefaultHttpJsonRequest implements HttpJsonRequest { private String method; private Object body; private List> queryParams; + private String authorizationHeaderValue; DefaultHttpJsonRequest(String url) { this.url = requireNonNull(url, "Required non-null url"); @@ -115,7 +117,14 @@ public class DefaultHttpJsonRequest implements HttpJsonRequest { queryParams.add(Pair.of(name, value)); return this; } - + + @Override + public HttpJsonRequest setAuthorizationHeader(@NotNull String value) { + requireNonNull(value, "Required non-null header value"); + authorizationHeaderValue = value; + return this; + } + @Override public HttpJsonRequest setTimeout(int timeout) { this.timeout = timeout; @@ -133,7 +142,7 @@ public class DefaultHttpJsonRequest implements HttpJsonRequest { if (method == null) { throw new IllegalStateException("Could not perform request, request method wasn't set"); } - return doRequest(timeout, url, method, body, queryParams); + return doRequest(timeout, url, method, body, queryParams, authorizationHeaderValue); } /** @@ -153,6 +162,8 @@ public class DefaultHttpJsonRequest implements HttpJsonRequest { * request body, must be instance of {@link JsonSerializable} * @param parameters * query parameters, may be null + * @param authorizationHeaderValue + * value of authorization header, may be null * @return response to this request * @throws IOException * when connection content type is not "application/json" @@ -173,7 +184,8 @@ public class DefaultHttpJsonRequest implements HttpJsonRequest { String url, String method, Object body, - List> parameters) throws IOException, + List> parameters, + String authorizationHeaderValue) throws IOException, ServerException, ForbiddenException, NotFoundException, @@ -205,7 +217,9 @@ public class DefaultHttpJsonRequest implements HttpJsonRequest { conn.setRequestMethod(method); //drop a hint for server side that we want to receive application/json conn.addRequestProperty(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON); - if (authToken != null) { + if (!isNullOrEmpty(authorizationHeaderValue)) { + conn.setRequestProperty(HttpHeaders.AUTHORIZATION, authorizationHeaderValue); + } else if (authToken != null) { conn.setRequestProperty(HttpHeaders.AUTHORIZATION, authToken); } if (body != null) { diff --git a/core/platform-api/che-core-api-core/src/main/java/org/eclipse/che/api/core/rest/HttpJsonRequest.java b/core/platform-api/che-core-api-core/src/main/java/org/eclipse/che/api/core/rest/HttpJsonRequest.java index 629d9531f6..07d2bc92f5 100644 --- a/core/platform-api/che-core-api-core/src/main/java/org/eclipse/che/api/core/rest/HttpJsonRequest.java +++ b/core/platform-api/che-core-api-core/src/main/java/org/eclipse/che/api/core/rest/HttpJsonRequest.java @@ -121,6 +121,17 @@ public interface HttpJsonRequest { */ HttpJsonRequest addQueryParam(@NotNull String name, @NotNull Object value); + /** + * Adds authorization header to the request. + * + * @param value + * authorization header value + * @return this request instance + * @throws NullPointerException + * when value is null + */ + HttpJsonRequest setAuthorizationHeader(@NotNull String value); + /** * Sets request timeout in milliseconds. * diff --git a/core/platform-api/che-core-api-core/src/test/java/org/eclipse/che/api/core/rest/DefaultHttpJsonRequestTest.java b/core/platform-api/che-core-api-core/src/test/java/org/eclipse/che/api/core/rest/DefaultHttpJsonRequestTest.java index 7a2dd6328e..96073be28b 100644 --- a/core/platform-api/che-core-api-core/src/test/java/org/eclipse/che/api/core/rest/DefaultHttpJsonRequestTest.java +++ b/core/platform-api/che-core-api-core/src/test/java/org/eclipse/che/api/core/rest/DefaultHttpJsonRequestTest.java @@ -97,11 +97,11 @@ public class DefaultHttpJsonRequestTest { public void shouldUseUrlAndMethodFromTheLinks() throws Exception { final Link link = createLink("POST", DEFAULT_URL, "rel"); final DefaultHttpJsonRequest request = spy(new DefaultHttpJsonRequest(link)); - doReturn(new DefaultHttpJsonResponse("", 200)).when(request).doRequest(anyInt(), anyString(), anyString(), anyObject(), any()); + doReturn(new DefaultHttpJsonResponse("", 200)).when(request).doRequest(anyInt(), anyString(), anyString(), anyObject(), any(), anyString()); request.request(); - verify(request).doRequest(0, DEFAULT_URL, "POST", null, null); + verify(request).doRequest(0, DEFAULT_URL, "POST", null, null, null); } @Test @@ -119,7 +119,8 @@ public class DefaultHttpJsonRequestTest { "http://localhost:8080", "PUT", body, - asList(Pair.of("name", "value"), Pair.of("name2", "value2"))); + asList(Pair.of("name", "value"), Pair.of("name2", "value2")), + null); } @Test @@ -136,6 +137,7 @@ public class DefaultHttpJsonRequestTest { eq("http://localhost:8080"), eq("POST"), mapCaptor.capture(), + eq(null), eq(null)); assertTrue(mapCaptor.getValue() instanceof JsonStringMap); assertEquals(mapCaptor.getValue(), body); @@ -153,6 +155,7 @@ public class DefaultHttpJsonRequestTest { eq("http://localhost:8080"), eq("POST"), listCaptor.capture(), + eq(null), eq(null)); assertTrue(listCaptor.getValue() instanceof JsonArray); assertEquals(listCaptor.getValue(), body); @@ -320,6 +323,6 @@ public class DefaultHttpJsonRequestTest { } private void prepareResponse(String response) throws Exception { - doReturn(new DefaultHttpJsonResponse(response, 200)).when(request).doRequest(anyInt(), anyString(), anyString(), anyObject(), any()); + doReturn(new DefaultHttpJsonResponse(response, 200)).when(request).doRequest(anyInt(), anyString(), anyString(), anyObject(), any(), anyString()); } }