diff options
author | ssjenka <ssjenka@ops-slave-fedora25-1.internal.sonarsource.com> | 2017-06-02 08:02:01 +0200 |
---|---|---|
committer | ssjenka <ssjenka@ops-slave-fedora25-1.internal.sonarsource.com> | 2017-06-02 08:02:01 +0200 |
commit | 1acfd1822ee14e991d0a8a0f5e474e53af4cea81 (patch) | |
tree | 2ff7c9aac7d451165c608e3014047aaf59379a99 /sonar-ws | |
parent | f5f2b6ead9e44440022139d00ca85c7a598819cc (diff) | |
parent | 3dcf5470e5703604c4caf184f201780314304c90 (diff) | |
download | sonarqube-1acfd1822ee14e991d0a8a0f5e474e53af4cea81.tar.gz sonarqube-1acfd1822ee14e991d0a8a0f5e474e53af4cea81.zip |
Automatic merge from branch-6.4
* origin/branch-6.4:
update sonarcloud terms url
Revert "SONAR-9301 Support HTTP redirect on scanner side"
Diffstat (limited to 'sonar-ws')
-rw-r--r-- | sonar-ws/src/main/java/org/sonarqube/ws/client/HttpConnector.java | 66 | ||||
-rw-r--r-- | sonar-ws/src/test/java/org/sonarqube/ws/client/HttpConnectorTest.java | 26 |
2 files changed, 8 insertions, 84 deletions
diff --git a/sonar-ws/src/main/java/org/sonarqube/ws/client/HttpConnector.java b/sonar-ws/src/main/java/org/sonarqube/ws/client/HttpConnector.java index 46aa3b8a3dc..e652a21e28f 100644 --- a/sonar-ws/src/main/java/org/sonarqube/ws/client/HttpConnector.java +++ b/sonar-ws/src/main/java/org/sonarqube/ws/client/HttpConnector.java @@ -41,11 +41,6 @@ import static com.google.common.base.Strings.isNullOrEmpty; import static com.google.common.base.Strings.nullToEmpty; import static java.lang.String.format; -import static java.net.HttpURLConnection.HTTP_MOVED_PERM; -import static java.net.HttpURLConnection.HTTP_MOVED_TEMP; -import static okhttp3.internal.http.StatusLine.HTTP_PERM_REDIRECT; -import static okhttp3.internal.http.StatusLine.HTTP_TEMP_REDIRECT; - /** * Connect to any SonarQube server available through HTTP or HTTPS. * <p>TLS 1.0, 1.1 and 1.2 are supported on both Java 7 and 8. SSLv3 is not supported.</p> @@ -63,7 +58,6 @@ public class HttpConnector implements WsConnector { private final HttpUrl baseUrl; private final String credentials; private final OkHttpClient okHttpClient; - private final OkHttpClient noRedirectOkHttpClient; private HttpConnector(Builder builder) { this.baseUrl = HttpUrl.parse(builder.url.endsWith("/") ? builder.url : format("%s/", builder.url)); @@ -88,14 +82,6 @@ public class HttpConnector implements WsConnector { okHttpClientBuilder.setSSLSocketFactory(builder.sslSocketFactory); okHttpClientBuilder.setTrustManager(builder.sslTrustManager); this.okHttpClient = okHttpClientBuilder.build(); - this.noRedirectOkHttpClient = newClientWithoutRedirect(this.okHttpClient); - } - - private static OkHttpClient newClientWithoutRedirect(OkHttpClient client) { - return client.newBuilder() - .followRedirects(false) - .followSslRedirects(false) - .build(); } @Override @@ -123,7 +109,7 @@ public class HttpConnector implements WsConnector { completeUrlQueryParameters(getRequest, urlBuilder); Request.Builder okRequestBuilder = prepareOkRequestBuilder(getRequest, urlBuilder).get(); - return new OkHttpResponse(doCall(okHttpClient, okRequestBuilder.build())); + return doCall(okRequestBuilder.build()); } private WsResponse post(PostRequest postRequest) { @@ -153,10 +139,8 @@ public class HttpConnector implements WsConnector { }); body = bodyBuilder.build(); } - Request.Builder okRequestBuilder = prepareOkRequestBuilder(postRequest, urlBuilder).post(body); - Response response = doCall(noRedirectOkHttpClient, okRequestBuilder.build()); - response = checkRedirect(response); - return new OkHttpResponse(response); + Request.Builder reqBuilder = prepareOkRequestBuilder(postRequest, urlBuilder); + return doCall(reqBuilder.post(body).build()); } private HttpUrl.Builder prepareUrlBuilder(WsRequest wsRequest) { @@ -166,7 +150,7 @@ public class HttpConnector implements WsConnector { .newBuilder(); } - private static void completeUrlQueryParameters(BaseRequest<?> request, HttpUrl.Builder urlBuilder) { + private static void completeUrlQueryParameters(BaseRequest request, HttpUrl.Builder urlBuilder) { request.getParameters().getKeys() .forEach(key -> request.getParameters().getValues(key) .forEach(value -> urlBuilder.addQueryParameter(key, value))); @@ -183,50 +167,16 @@ public class HttpConnector implements WsConnector { return okHttpRequestBuilder; } - private static Response doCall(OkHttpClient client, Request okRequest) { - Call call = client.newCall(okRequest); + private OkHttpResponse doCall(Request okRequest) { + Call call = okHttpClient.newCall(okRequest); try { - return call.execute(); + Response okResponse = call.execute(); + return new OkHttpResponse(okResponse); } catch (IOException e) { throw new IllegalStateException("Fail to request " + okRequest.url(), e); } } - private Response checkRedirect(Response response) { - switch (response.code()) { - case HTTP_MOVED_PERM: - case HTTP_MOVED_TEMP: - case HTTP_TEMP_REDIRECT: - case HTTP_PERM_REDIRECT: - // OkHttpClient does not follow the redirect with the same HTTP method. A POST is - // redirected to a GET. Because of that the redirect must be manually implemented. - // See: - // https://github.com/square/okhttp/blob/07309c1c7d9e296014268ebd155ebf7ef8679f6c/okhttp/src/main/java/okhttp3/internal/http/RetryAndFollowUpInterceptor.java#L316 - // https://github.com/square/okhttp/issues/936#issuecomment-266430151 - return followPostRedirect(response); - default: - return response; - } - } - - private Response followPostRedirect(Response response) { - String location = response.header("Location"); - if (location == null) { - throw new IllegalStateException(format("Missing HTTP header 'Location' in redirect of %s", response.request().url())); - } - HttpUrl url = response.request().url().resolve(location); - - // Don't follow redirects to unsupported protocols. - if (url == null) { - throw new IllegalStateException(format("Unsupported protocol in redirect of %s to %s", response.request().url(), location)); - } - - Request.Builder redirectRequest = response.request().newBuilder(); - redirectRequest.post(response.request().body()); - response.body().close(); - return doCall(noRedirectOkHttpClient, redirectRequest.url(url).build()); - } - /** * @since 5.5 */ diff --git a/sonar-ws/src/test/java/org/sonarqube/ws/client/HttpConnectorTest.java b/sonar-ws/src/test/java/org/sonarqube/ws/client/HttpConnectorTest.java index 3cad8d93ff8..ba6e9d4dc43 100644 --- a/sonar-ws/src/test/java/org/sonarqube/ws/client/HttpConnectorTest.java +++ b/sonar-ws/src/test/java/org/sonarqube/ws/client/HttpConnectorTest.java @@ -20,7 +20,6 @@ package org.sonarqube.ws.client; import java.io.File; -import java.io.IOException; import java.net.InetSocketAddress; import java.net.Proxy; import java.util.List; @@ -64,31 +63,6 @@ public class HttpConnectorTest { } @Test - public void follow_redirects_post() throws IOException, InterruptedException { - MockWebServer server2 = new MockWebServer(); - server2.start(); - server2.url("").url().toString(); - - server.enqueue(new MockResponse() - .setResponseCode(302) - .setHeader("Location", server2.url("").url().toString())); - - server2.enqueue(new MockResponse() - .setResponseCode(200)); - - underTest = HttpConnector.newBuilder().url(serverUrl).build(); - PostRequest request = new PostRequest("api/ce/submit").setParam("projectKey", "project"); - WsResponse response = underTest.call(request); - - RecordedRequest recordedRequest = server2.takeRequest(); - - assertThat(recordedRequest.getMethod()).isEqualTo("POST"); - assertThat(recordedRequest.getBody().readUtf8()).isEqualTo("projectKey=project"); - assertThat(response.requestUrl()).isEqualTo(server2.url("").url().toString()); - assertThat(response.code()).isEqualTo(200); - } - - @Test public void test_default_settings() throws Exception { answerHelloWorld(); underTest = HttpConnector.newBuilder().url(serverUrl).build(); |