diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index be2dc79a..7705927e 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.2-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.3-all.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/settings.gradle b/settings.gradle index 230c0f5f..e652e6d0 100644 --- a/settings.gradle +++ b/settings.gradle @@ -4,7 +4,7 @@ dependencyResolutionManagement { versionCatalogs { libs { // main sdk version - version('sdk', '1.8.2'); + version('sdk', '1.8.3'); // sdk deps version('okhttp3', '4.12.0') diff --git a/src/main/java/io/harness/cf/client/connector/DelegatingSocketFactory.java b/src/main/java/io/harness/cf/client/connector/DelegatingSocketFactory.java new file mode 100644 index 00000000..144fdb44 --- /dev/null +++ b/src/main/java/io/harness/cf/client/connector/DelegatingSocketFactory.java @@ -0,0 +1,45 @@ +package io.harness.cf.client.connector; + +import javax.net.SocketFactory; +import java.io.IOException; +import java.net.InetAddress; +import java.net.Socket; + +final class DelegatingSocketFactory extends SocketFactory { + private final SocketFactory delegate; + + public DelegatingSocketFactory(SocketFactory delegate) { + this.delegate = delegate; + } + + @Override + public Socket createSocket() throws IOException { + return configureSocket(delegate.createSocket()); + } + + @Override + public Socket createSocket(String host, int port) throws IOException { + return configureSocket(delegate.createSocket(host, port)); + } + + @Override + public Socket createSocket(String host, int port, InetAddress localAddress, + int localPort) throws IOException { + return configureSocket(delegate.createSocket(host, port, localAddress, localPort)); + } + + @Override + public Socket createSocket(InetAddress host, int port) throws IOException { + return configureSocket(delegate.createSocket(host, port)); + } + + @Override + public Socket createSocket(InetAddress host, int port, InetAddress localAddress, + int localPort) throws IOException { + return configureSocket(delegate.createSocket(host, port, localAddress, localPort)); + } + + Socket configureSocket(Socket socket) { + return socket; + } +} \ No newline at end of file diff --git a/src/main/java/io/harness/cf/client/connector/EventSource.java b/src/main/java/io/harness/cf/client/connector/EventSource.java index 34bea95a..18418fa2 100644 --- a/src/main/java/io/harness/cf/client/connector/EventSource.java +++ b/src/main/java/io/harness/cf/client/connector/EventSource.java @@ -75,10 +75,14 @@ protected OkHttpClient makeStreamClient(long sseReadTimeoutMins, List { + final String targetIpPort = getIpAndPort((route == null ? null : route.socketAddress())); + final String configuredIpPort = getIpAndPort((InetSocketAddress) getProxyConfig().address()); + + if (targetIpPort.equalsIgnoreCase(configuredIpPort)) { + final String credential = Credentials.basic(user, password); + return response.request().newBuilder().header("Proxy-Authorization", credential).build(); + } else { + log.warn( + "Target proxy `{}` does not match configured proxy `{}`. Credentials not sent", + targetIpPort, + configuredIpPort); + return null; + } + }; + } + + private static String getIpAndPort(InetSocketAddress addr) { + if (addr == null) { + return "null"; + } + return addr.getAddress().getHostAddress() + ":" + addr.getPort(); + } + + public static void configureTls(OkHttpClient.Builder builder) { + if (builder == null) { + return; + } + final String host = System.getProperty("https.proxyHost"); + final String port = System.getProperty("https.proxyPort"); + if (host == null || host.isEmpty() || port == null || port.isEmpty()) { + return; + } + + builder.socketFactory(new DelegatingSocketFactory(SSLSocketFactory.getDefault())); + } +}