aboutsummaryrefslogtreecommitdiffstats
path: root/sonar-ws
diff options
context:
space:
mode:
authorssjenka <ssjenka@ops-slave-fedora25-1.internal.sonarsource.com>2017-06-02 08:02:01 +0200
committerssjenka <ssjenka@ops-slave-fedora25-1.internal.sonarsource.com>2017-06-02 08:02:01 +0200
commit1acfd1822ee14e991d0a8a0f5e474e53af4cea81 (patch)
tree2ff7c9aac7d451165c608e3014047aaf59379a99 /sonar-ws
parentf5f2b6ead9e44440022139d00ca85c7a598819cc (diff)
parent3dcf5470e5703604c4caf184f201780314304c90 (diff)
downloadsonarqube-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.java66
-rw-r--r--sonar-ws/src/test/java/org/sonarqube/ws/client/HttpConnectorTest.java26
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();