Skip to content

Commit

Permalink
fix: Support for proxy authentication from proxy URL user info
Browse files Browse the repository at this point in the history
closes: #6247

Signed-off-by: Steve Hawkins <shawkins@redhat.com>
  • Loading branch information
shawkins committed Aug 12, 2024
1 parent 76202f8 commit 2c1e084
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 4 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
* Fix #5264: Remove deprecated `Config.errorMessages` field
* Fix #6008: removing the optional dependency on bouncy castle
* Fix #6230: introduced Quantity.multiply(int) to allow for Quantity multiplication by an integer
* Fix #6247: Support for proxy authentication from proxy URL user info

#### Dependency Upgrade
* Fix #6052: Removed dependency on no longer maintained com.github.mifmif:generex
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -122,13 +122,16 @@ public static Map<String, io.fabric8.kubernetes.client.http.Interceptor> createA

return interceptors;
}

public static String basicCredentials(String username, String password) {
String usernameAndPassword = username + ":" + password;

public static String basicCredentials(String usernameAndPassword) {
String encoded = Base64.getEncoder().encodeToString(usernameAndPassword.getBytes(StandardCharsets.UTF_8));
return "Basic " + encoded;
}

public static String basicCredentials(String username, String password) {
return basicCredentials(username + ":" + password);
}

/**
* @deprecated you should not need to call this method directly. Please create your own HttpClient.Factory
* should you need to customize your clients.
Expand Down Expand Up @@ -224,10 +227,15 @@ static void configureProxy(Config config, HttpClient.Builder builder)
builder.proxyType(HttpClient.ProxyType.DIRECT);
} else {
builder.proxyAddress(new InetSocketAddress(proxyUri.getHost(), proxyUri.getPort()));

if (config.getProxyUsername() != null) {
builder.proxyAuthorization(basicCredentials(config.getProxyUsername(), config.getProxyPassword()));
}

String userInfo = proxyUri.getUserInfo();
if (userInfo != null) {
builder.proxyAuthorization(basicCredentials(userInfo));
}

builder.proxyType(toProxyType(proxyUri.getScheme()));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,17 @@ void testConfigureSocksProxy() throws Exception {
Mockito.verify(builder).proxyType(HttpClient.ProxyType.SOCKS5);
Mockito.verify(builder).proxyAddress(new InetSocketAddress("192.168.0.1", 8080));
}

@Test
void testConfigureProxyAuth() throws Exception {
Config config = new ConfigBuilder().withMasterUrl("http://localhost").withHttpProxy("http://user:password@192.168.0.1:8080").build();
Builder builder = Mockito.mock(HttpClient.Builder.class, Mockito.RETURNS_SELF);

HttpClientUtils.configureProxy(config, builder);

Mockito.verify(builder).proxyType(HttpClient.ProxyType.HTTP);
Mockito.verify(builder).proxyAuthorization("Basic dXNlcjpwYXNzd29yZA==");
}

@Test
void testCreateApplicableInterceptors() {
Expand Down

0 comments on commit 2c1e084

Please sign in to comment.