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 <[email protected]>
  • Loading branch information
shawkins committed Sep 17, 2024
1 parent a5ffbb8 commit 59f0aa2
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 2 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,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
* Fix #6281: use GitHub binary repo for Kube API Tests
* Fix #6282: Allow annotated types with Pattern, Min, and Max with Lists and Maps and CRD generation
* Fix #5480: Move `io.fabric8:zjsonpatch` to KubernetesClient project
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -123,12 +123,15 @@ 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 @@ -229,6 +232,11 @@ static void configureProxy(Config config, HttpClient.Builder builder)
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 @@ -90,6 +90,18 @@ void testConfigureSocksProxy() throws Exception {
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:[email protected]: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() {
// Given
Expand Down

0 comments on commit 59f0aa2

Please sign in to comment.