Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: Support for proxy authentication from proxy URL user info #6248

Merged
merged 1 commit into from
Sep 19, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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: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() {
// Given
Expand Down
Loading