Browse Source

SONAR-9741 add authentication by System PassCode to HttpConnector

tags/6.6-RC1
Sébastien Lesaint 6 years ago
parent
commit
3de079f32f

+ 11
- 0
sonar-ws/src/main/java/org/sonarqube/ws/client/HttpConnector.java View File

@@ -57,6 +57,7 @@ public class HttpConnector implements WsConnector {
*/
private final HttpUrl baseUrl;
private final String credentials;
private final String systemPassCode;
private final OkHttpClient okHttpClient;

private HttpConnector(Builder builder) {
@@ -74,6 +75,7 @@ public class HttpConnector implements WsConnector {
// the Basic credentials consider an empty password.
this.credentials = Credentials.basic(builder.login, nullToEmpty(builder.password));
}
this.systemPassCode = builder.systemPassCode;
okHttpClientBuilder.setProxy(builder.proxy);
okHttpClientBuilder.setProxyLogin(builder.proxyLogin);
okHttpClientBuilder.setProxyPassword(builder.proxyPassword);
@@ -164,6 +166,9 @@ public class HttpConnector implements WsConnector {
if (credentials != null) {
okHttpRequestBuilder.header("Authorization", credentials);
}
if (systemPassCode != null) {
okHttpRequestBuilder.header("X-Sonar-Passcode", systemPassCode);
}
getRequest.getHeaders().getNames().forEach(name ->
okHttpRequestBuilder.header(name, getRequest.getHeaders().getValue(name).get()));
return okHttpRequestBuilder;
@@ -194,6 +199,7 @@ public class HttpConnector implements WsConnector {
private Proxy proxy;
private String proxyLogin;
private String proxyPassword;
private String systemPassCode;
private int connectTimeoutMs = DEFAULT_CONNECT_TIMEOUT_MILLISECONDS;
private int readTimeoutMs = DEFAULT_READ_TIMEOUT_MILLISECONDS;
private SSLSocketFactory sslSocketFactory = null;
@@ -288,6 +294,11 @@ public class HttpConnector implements WsConnector {
return this;
}

public Builder systemPassCode(@Nullable String systemPassCode) {
this.systemPassCode = systemPassCode;
return this;
}

public HttpConnector build() {
checkArgument(!isNullOrEmpty(url), "Server URL is not defined");
return new HttpConnector(this);

+ 19
- 0
sonar-ws/src/test/java/org/sonarqube/ws/client/HttpConnectorTest.java View File

@@ -23,6 +23,7 @@ import java.io.File;
import java.net.InetSocketAddress;
import java.net.Proxy;
import java.util.List;
import java.util.Random;
import javax.net.ssl.SSLSocketFactory;
import okhttp3.ConnectionSpec;
import okhttp3.mockwebserver.MockResponse;
@@ -30,6 +31,7 @@ import okhttp3.mockwebserver.MockWebServer;
import okhttp3.mockwebserver.RecordedRequest;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang.RandomStringUtils;
import org.apache.commons.lang.StringUtils;
import org.junit.After;
import org.junit.Before;
@@ -159,6 +161,23 @@ public class HttpConnectorTest {
assertThat(recordedRequest.getHeader("Authorization")).isEqualTo(basic("theToken", ""));
}

@Test
public void systemPassCode_sets_header_when_value_is_not_null() throws InterruptedException {
answerHelloWorld();
String systemPassCode = new Random().nextBoolean() ? "" : RandomStringUtils.randomAlphanumeric(21);
underTest = HttpConnector.newBuilder()
.url(serverUrl)
.systemPassCode(systemPassCode)
.build();

GetRequest request = new GetRequest("api/issues/search");
underTest.call(request);

RecordedRequest recordedRequest = server.takeRequest();
assertThat(recordedRequest.getHeader("X-sonar-passcode"))
.isEqualTo(systemPassCode);
}

@Test
public void use_proxy_authentication() throws Exception {
try (MockWebServer proxy = new MockWebServer()) {

Loading…
Cancel
Save