From f952109721275b331a53f08d2dd8f9db61298b8e Mon Sep 17 00:00:00 2001 From: Bilal Al-Shahwany Date: Fri, 18 Jul 2025 09:15:01 -0700 Subject: [PATCH 1/4] polishing --- .../io/split/client/SplitClientConfig.java | 7 +++ .../io/split/client/SplitFactoryImpl.java | 48 +++++++++---------- 2 files changed, 29 insertions(+), 26 deletions(-) diff --git a/client/src/main/java/io/split/client/SplitClientConfig.java b/client/src/main/java/io/split/client/SplitClientConfig.java index eb612951..be7fd725 100644 --- a/client/src/main/java/io/split/client/SplitClientConfig.java +++ b/client/src/main/java/io/split/client/SplitClientConfig.java @@ -9,6 +9,7 @@ import io.split.storages.enums.OperationMode; import io.split.storages.enums.StorageMode; import org.apache.hc.core5.http.HttpHost; +import org.slf4j.LoggerFactory; import pluggable.CustomStorageWrapper; import java.io.IOException; @@ -28,6 +29,7 @@ */ public class SplitClientConfig { + private static final org.slf4j.Logger _log = LoggerFactory.getLogger(SplitClientConfig.class); public static final String LOCALHOST_DEFAULT_FILE = "split.yaml"; public static final String SDK_ENDPOINT = "https://sdk.split.io"; public static final String EVENTS_ENDPOINT = "https://events.split.io"; @@ -1140,6 +1142,11 @@ private void verifyProxy() { if (_proxyConfiguration == null) return; + if (!_proxyHost.equals("localhost")) { + _log.warn("Both the deprecated proxy configuration methods (`proxyHost`, `proxyPort`, `proxyUsername`, or `proxyPassword`) " + + "and the new `ProxyConfiguration` builder are being used. `ProxyConfiguration` will take precedence."); + } + if (!(_proxyConfiguration.getHost().getSchemeName().equals(HttpScheme.HTTP) || _proxyConfiguration.getHost().getSchemeName().equals(HttpScheme.HTTPS))) { throw new IllegalArgumentException("Proxy scheme must be either http or https."); diff --git a/client/src/main/java/io/split/client/SplitFactoryImpl.java b/client/src/main/java/io/split/client/SplitFactoryImpl.java index e3badac7..d40e84b3 100644 --- a/client/src/main/java/io/split/client/SplitFactoryImpl.java +++ b/client/src/main/java/io/split/client/SplitFactoryImpl.java @@ -629,32 +629,35 @@ private static SSLContext buildSSLContext(SplitClientConfig config) throws IOExc private static HttpClientBuilder setupProxy(HttpClientBuilder httpClientbuilder, SplitClientConfig config) { _log.info("Initializing Split SDK with proxy settings"); HttpHost proxyHost; - if (config.proxyConfiguration() != null && config.proxyConfiguration().getHost() != null) { + String userName = null; + String password = null; + if (config.proxyConfiguration() != null) { proxyHost = config.proxyConfiguration().getHost(); - } else { - _log.warn("`proxyHost`, `proxyPort` configuration methods are deprecated. Please use `ProxyConfiguration` builder instead."); - proxyHost = config.proxy(); - } - DefaultProxyRoutePlanner routePlanner = new DefaultProxyRoutePlanner(proxyHost); - httpClientbuilder.setRoutePlanner(routePlanner); - - if ((config.proxyUsername() != null && config.proxyPassword() != null) || - (config.proxyConfiguration() != null && config.proxyConfiguration().getProxyCredentialsProvider() != null && - config.proxyConfiguration().getProxyCredentialsProvider() instanceof io.split.client.dtos.BasicCredentialsProvider)) { - _log.debug("Proxy setup using credentials"); - String userName; - String password; - if (config.proxyUsername() == null && config.proxyPassword() == null) { + if (config.proxyConfiguration().getProxyCredentialsProvider() != null && + config.proxyConfiguration().getProxyCredentialsProvider() instanceof io.split.client.dtos.BasicCredentialsProvider) { io.split.client.dtos.BasicCredentialsProvider basicAuth = (io.split.client.dtos.BasicCredentialsProvider) config.proxyConfiguration().getProxyCredentialsProvider(); userName = basicAuth.getUsername(); password = basicAuth.getPassword(); - } else { - _log.warn("`proxyUsername` and `proxyPassword` configuration methods are deprecated. " + - "Please use `ProxyConfiguration` builder instead."); + } + if (config.proxyConfiguration().getProxyCredentialsProvider() instanceof io.split.client.dtos.BearerCredentialsProvider) { + _log.debug("Proxy setup using Bearer token"); + httpClientbuilder.setDefaultCredentialsProvider(new HttpClientDynamicCredentials( + (BearerCredentialsProvider) config.proxyConfiguration().getProxyCredentialsProvider())); + } + } else { + proxyHost = config.proxy(); + if (config.proxyUsername() != null && config.proxyPassword() != null) { userName = config.proxyUsername(); password = config.proxyPassword(); } + } + + DefaultProxyRoutePlanner routePlanner = new DefaultProxyRoutePlanner(proxyHost); + httpClientbuilder.setRoutePlanner(routePlanner); + + if (userName != null && password != null) { + _log.debug("Proxy setup using credentials"); BasicCredentialsProvider credsProvider = new BasicCredentialsProvider(); AuthScope siteScope = new AuthScope(proxyHost.getHostName(), proxyHost.getPort()); Credentials siteCreds = new UsernamePasswordCredentials(userName, @@ -662,14 +665,7 @@ private static HttpClientBuilder setupProxy(HttpClientBuilder httpClientbuilder, credsProvider.setCredentials(siteScope, siteCreds); httpClientbuilder.setDefaultCredentialsProvider(credsProvider); } - - if (config.proxyConfiguration() != null && - config.proxyConfiguration().getProxyCredentialsProvider() instanceof io.split.client.dtos.BearerCredentialsProvider) { - _log.debug("Proxy setup using Bearer token"); - httpClientbuilder.setDefaultCredentialsProvider(new HttpClientDynamicCredentials( - (BearerCredentialsProvider) config.proxyConfiguration().getProxyCredentialsProvider())); - } - + return httpClientbuilder; } From 392d663ade409e10ead302e67063972e6a2c54c5 Mon Sep 17 00:00:00 2001 From: Bilal Al-Shahwany Date: Fri, 18 Jul 2025 09:32:24 -0700 Subject: [PATCH 2/4] polishing --- .../io/split/client/SplitFactoryImpl.java | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/client/src/main/java/io/split/client/SplitFactoryImpl.java b/client/src/main/java/io/split/client/SplitFactoryImpl.java index d40e84b3..d6141338 100644 --- a/client/src/main/java/io/split/client/SplitFactoryImpl.java +++ b/client/src/main/java/io/split/client/SplitFactoryImpl.java @@ -633,17 +633,17 @@ private static HttpClientBuilder setupProxy(HttpClientBuilder httpClientbuilder, String password = null; if (config.proxyConfiguration() != null) { proxyHost = config.proxyConfiguration().getHost(); - if (config.proxyConfiguration().getProxyCredentialsProvider() != null && - config.proxyConfiguration().getProxyCredentialsProvider() instanceof io.split.client.dtos.BasicCredentialsProvider) { - io.split.client.dtos.BasicCredentialsProvider basicAuth = - (io.split.client.dtos.BasicCredentialsProvider) config.proxyConfiguration().getProxyCredentialsProvider(); - userName = basicAuth.getUsername(); - password = basicAuth.getPassword(); - } - if (config.proxyConfiguration().getProxyCredentialsProvider() instanceof io.split.client.dtos.BearerCredentialsProvider) { - _log.debug("Proxy setup using Bearer token"); - httpClientbuilder.setDefaultCredentialsProvider(new HttpClientDynamicCredentials( - (BearerCredentialsProvider) config.proxyConfiguration().getProxyCredentialsProvider())); + if (config.proxyConfiguration().getProxyCredentialsProvider() != null) { + if (config.proxyConfiguration().getProxyCredentialsProvider() instanceof io.split.client.dtos.BasicCredentialsProvider) { + io.split.client.dtos.BasicCredentialsProvider basicAuth = + (io.split.client.dtos.BasicCredentialsProvider) config.proxyConfiguration().getProxyCredentialsProvider(); + userName = basicAuth.getUsername(); + password = basicAuth.getPassword(); + } else if (config.proxyConfiguration().getProxyCredentialsProvider() instanceof io.split.client.dtos.BearerCredentialsProvider) { + _log.debug("Proxy setup using Bearer token"); + httpClientbuilder.setDefaultCredentialsProvider(new HttpClientDynamicCredentials( + (BearerCredentialsProvider) config.proxyConfiguration().getProxyCredentialsProvider())); + } } } else { proxyHost = config.proxy(); @@ -657,7 +657,7 @@ private static HttpClientBuilder setupProxy(HttpClientBuilder httpClientbuilder, httpClientbuilder.setRoutePlanner(routePlanner); if (userName != null && password != null) { - _log.debug("Proxy setup using credentials"); + _log.debug("Proxy setup using Basic authentication"); BasicCredentialsProvider credsProvider = new BasicCredentialsProvider(); AuthScope siteScope = new AuthScope(proxyHost.getHostName(), proxyHost.getPort()); Credentials siteCreds = new UsernamePasswordCredentials(userName, From e228e1d2f4576b3e666b48db7f1c1423c5afa5fd Mon Sep 17 00:00:00 2001 From: Bilal Al-Shahwany Date: Fri, 18 Jul 2025 11:40:40 -0700 Subject: [PATCH 3/4] polish --- .../io/split/client/SplitFactoryImpl.java | 55 ++++++++++++------- 1 file changed, 34 insertions(+), 21 deletions(-) diff --git a/client/src/main/java/io/split/client/SplitFactoryImpl.java b/client/src/main/java/io/split/client/SplitFactoryImpl.java index d6141338..2e76e3da 100644 --- a/client/src/main/java/io/split/client/SplitFactoryImpl.java +++ b/client/src/main/java/io/split/client/SplitFactoryImpl.java @@ -628,34 +628,48 @@ private static SSLContext buildSSLContext(SplitClientConfig config) throws IOExc private static HttpClientBuilder setupProxy(HttpClientBuilder httpClientbuilder, SplitClientConfig config) { _log.info("Initializing Split SDK with proxy settings"); + if (config.proxyConfiguration() != null) { + return useProxyConfiguration(httpClientbuilder, config); + } else { + return useLegacyProxyConfiguration(httpClientbuilder, config); + } + } + + private static HttpClientBuilder useLegacyProxyConfiguration(HttpClientBuilder httpClientbuilder, SplitClientConfig config) { HttpHost proxyHost; String userName = null; String password = null; - if (config.proxyConfiguration() != null) { - proxyHost = config.proxyConfiguration().getHost(); - if (config.proxyConfiguration().getProxyCredentialsProvider() != null) { - if (config.proxyConfiguration().getProxyCredentialsProvider() instanceof io.split.client.dtos.BasicCredentialsProvider) { - io.split.client.dtos.BasicCredentialsProvider basicAuth = - (io.split.client.dtos.BasicCredentialsProvider) config.proxyConfiguration().getProxyCredentialsProvider(); - userName = basicAuth.getUsername(); - password = basicAuth.getPassword(); - } else if (config.proxyConfiguration().getProxyCredentialsProvider() instanceof io.split.client.dtos.BearerCredentialsProvider) { - _log.debug("Proxy setup using Bearer token"); - httpClientbuilder.setDefaultCredentialsProvider(new HttpClientDynamicCredentials( - (BearerCredentialsProvider) config.proxyConfiguration().getProxyCredentialsProvider())); - } - } - } else { - proxyHost = config.proxy(); - if (config.proxyUsername() != null && config.proxyPassword() != null) { - userName = config.proxyUsername(); - password = config.proxyPassword(); + proxyHost = config.proxy(); + if (config.proxyUsername() != null && config.proxyPassword() != null) { + userName = config.proxyUsername(); + password = config.proxyPassword(); + } + return addProxyParams(httpClientbuilder, proxyHost, userName, password); + } + + private static HttpClientBuilder useProxyConfiguration(HttpClientBuilder httpClientbuilder, SplitClientConfig config) { + HttpHost proxyHost; + String userName = null; + String password = null; + proxyHost = config.proxyConfiguration().getHost(); + if (config.proxyConfiguration().getProxyCredentialsProvider() != null) { + if (config.proxyConfiguration().getProxyCredentialsProvider() instanceof io.split.client.dtos.BasicCredentialsProvider) { + io.split.client.dtos.BasicCredentialsProvider basicAuth = + (io.split.client.dtos.BasicCredentialsProvider) config.proxyConfiguration().getProxyCredentialsProvider(); + userName = basicAuth.getUsername(); + password = basicAuth.getPassword(); + } else if (config.proxyConfiguration().getProxyCredentialsProvider() instanceof io.split.client.dtos.BearerCredentialsProvider) { + _log.debug("Proxy setup using Bearer token"); + httpClientbuilder.setDefaultCredentialsProvider(new HttpClientDynamicCredentials( + (BearerCredentialsProvider) config.proxyConfiguration().getProxyCredentialsProvider())); } } + return addProxyParams(httpClientbuilder, proxyHost, userName, password); + } + private static HttpClientBuilder addProxyParams(HttpClientBuilder httpClientbuilder, HttpHost proxyHost, String userName, String password) { DefaultProxyRoutePlanner routePlanner = new DefaultProxyRoutePlanner(proxyHost); httpClientbuilder.setRoutePlanner(routePlanner); - if (userName != null && password != null) { _log.debug("Proxy setup using Basic authentication"); BasicCredentialsProvider credsProvider = new BasicCredentialsProvider(); @@ -665,7 +679,6 @@ private static HttpClientBuilder setupProxy(HttpClientBuilder httpClientbuilder, credsProvider.setCredentials(siteScope, siteCreds); httpClientbuilder.setDefaultCredentialsProvider(credsProvider); } - return httpClientbuilder; } From 77c681a9f8b2c755e5ec2e5490b4a941c2e1a3fb Mon Sep 17 00:00:00 2001 From: Bilal Al-Shahwany Date: Fri, 18 Jul 2025 13:20:33 -0700 Subject: [PATCH 4/4] polishing --- .../io/split/client/SplitClientConfig.java | 2 +- .../io/split/client/SplitFactoryImpl.java | 65 +++++++++---------- 2 files changed, 33 insertions(+), 34 deletions(-) diff --git a/client/src/main/java/io/split/client/SplitClientConfig.java b/client/src/main/java/io/split/client/SplitClientConfig.java index be7fd725..f32b9b09 100644 --- a/client/src/main/java/io/split/client/SplitClientConfig.java +++ b/client/src/main/java/io/split/client/SplitClientConfig.java @@ -1142,7 +1142,7 @@ private void verifyProxy() { if (_proxyConfiguration == null) return; - if (!_proxyHost.equals("localhost")) { + if (_proxyPort != -1) { _log.warn("Both the deprecated proxy configuration methods (`proxyHost`, `proxyPort`, `proxyUsername`, or `proxyPassword`) " + "and the new `ProxyConfiguration` builder are being used. `ProxyConfiguration` will take precedence."); } diff --git a/client/src/main/java/io/split/client/SplitFactoryImpl.java b/client/src/main/java/io/split/client/SplitFactoryImpl.java index 2e76e3da..586e7fde 100644 --- a/client/src/main/java/io/split/client/SplitFactoryImpl.java +++ b/client/src/main/java/io/split/client/SplitFactoryImpl.java @@ -636,49 +636,48 @@ private static HttpClientBuilder setupProxy(HttpClientBuilder httpClientbuilder, } private static HttpClientBuilder useLegacyProxyConfiguration(HttpClientBuilder httpClientbuilder, SplitClientConfig config) { - HttpHost proxyHost; - String userName = null; - String password = null; - proxyHost = config.proxy(); + HttpHost proxyHost = config.proxy(); + httpClientbuilder = addProxyHost(httpClientbuilder, proxyHost); if (config.proxyUsername() != null && config.proxyPassword() != null) { - userName = config.proxyUsername(); - password = config.proxyPassword(); + return addProxyBasicAuth(httpClientbuilder, proxyHost, config.proxyUsername(), config.proxyPassword()); } - return addProxyParams(httpClientbuilder, proxyHost, userName, password); + + return httpClientbuilder; } private static HttpClientBuilder useProxyConfiguration(HttpClientBuilder httpClientbuilder, SplitClientConfig config) { - HttpHost proxyHost; - String userName = null; - String password = null; - proxyHost = config.proxyConfiguration().getHost(); - if (config.proxyConfiguration().getProxyCredentialsProvider() != null) { - if (config.proxyConfiguration().getProxyCredentialsProvider() instanceof io.split.client.dtos.BasicCredentialsProvider) { - io.split.client.dtos.BasicCredentialsProvider basicAuth = - (io.split.client.dtos.BasicCredentialsProvider) config.proxyConfiguration().getProxyCredentialsProvider(); - userName = basicAuth.getUsername(); - password = basicAuth.getPassword(); - } else if (config.proxyConfiguration().getProxyCredentialsProvider() instanceof io.split.client.dtos.BearerCredentialsProvider) { - _log.debug("Proxy setup using Bearer token"); - httpClientbuilder.setDefaultCredentialsProvider(new HttpClientDynamicCredentials( - (BearerCredentialsProvider) config.proxyConfiguration().getProxyCredentialsProvider())); - } + HttpHost proxyHost = config.proxyConfiguration().getHost(); + httpClientbuilder = addProxyHost(httpClientbuilder, proxyHost); + if (config.proxyConfiguration().getProxyCredentialsProvider() == null) { + return httpClientbuilder; } - return addProxyParams(httpClientbuilder, proxyHost, userName, password); + + if (config.proxyConfiguration().getProxyCredentialsProvider() instanceof io.split.client.dtos.BasicCredentialsProvider) { + io.split.client.dtos.BasicCredentialsProvider basicAuth = + (io.split.client.dtos.BasicCredentialsProvider) config.proxyConfiguration().getProxyCredentialsProvider(); + return addProxyBasicAuth(httpClientbuilder, proxyHost, basicAuth.getUsername(), basicAuth.getPassword()); + } + + _log.debug("Proxy setup using Bearer token"); + httpClientbuilder.setDefaultCredentialsProvider(new HttpClientDynamicCredentials( + (BearerCredentialsProvider) config.proxyConfiguration().getProxyCredentialsProvider())); + return httpClientbuilder; } - private static HttpClientBuilder addProxyParams(HttpClientBuilder httpClientbuilder, HttpHost proxyHost, String userName, String password) { + private static HttpClientBuilder addProxyHost(HttpClientBuilder httpClientbuilder, HttpHost proxyHost) { DefaultProxyRoutePlanner routePlanner = new DefaultProxyRoutePlanner(proxyHost); httpClientbuilder.setRoutePlanner(routePlanner); - if (userName != null && password != null) { - _log.debug("Proxy setup using Basic authentication"); - BasicCredentialsProvider credsProvider = new BasicCredentialsProvider(); - AuthScope siteScope = new AuthScope(proxyHost.getHostName(), proxyHost.getPort()); - Credentials siteCreds = new UsernamePasswordCredentials(userName, - password.toCharArray()); - credsProvider.setCredentials(siteScope, siteCreds); - httpClientbuilder.setDefaultCredentialsProvider(credsProvider); - } + return httpClientbuilder; + } + + private static HttpClientBuilder addProxyBasicAuth(HttpClientBuilder httpClientbuilder, HttpHost proxyHost, String userName, String password) { + _log.debug("Proxy setup using Basic authentication"); + BasicCredentialsProvider credsProvider = new BasicCredentialsProvider(); + AuthScope siteScope = new AuthScope(proxyHost.getHostName(), proxyHost.getPort()); + Credentials siteCreds = new UsernamePasswordCredentials(userName, + password.toCharArray()); + credsProvider.setCredentials(siteScope, siteCreds); + httpClientbuilder.setDefaultCredentialsProvider(credsProvider); return httpClientbuilder; }