From d8decb51641c9e9a92f6c6e88ee1ae2b8c7f3bd1 Mon Sep 17 00:00:00 2001 From: Bilal Al-Shahwany Date: Thu, 21 Aug 2025 10:43:11 -0700 Subject: [PATCH 1/3] Changed p12file type to InputStream --- .../java/io/split/client/SplitFactoryImpl.java | 4 +++- .../io/split/client/dtos/ProxyConfiguration.java | 11 ++++++----- .../io/split/client/SplitClientConfigTest.java | 14 ++++++++------ .../java/io/split/client/SplitFactoryImplTest.java | 2 +- 4 files changed, 18 insertions(+), 13 deletions(-) diff --git a/client/src/main/java/io/split/client/SplitFactoryImpl.java b/client/src/main/java/io/split/client/SplitFactoryImpl.java index 586e7fde1..917d5ea42 100644 --- a/client/src/main/java/io/split/client/SplitFactoryImpl.java +++ b/client/src/main/java/io/split/client/SplitFactoryImpl.java @@ -116,6 +116,8 @@ import pluggable.CustomStorageWrapper; import javax.net.ssl.SSLContext; +import java.io.File; +import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.net.InetAddress; @@ -606,7 +608,7 @@ private static SSLContext buildSSLContext(SplitClientConfig config) throws IOExc InputStream keystoreStream = null; try { KeyStore keyStore = KeyStore.getInstance("PKCS12"); - keystoreStream = java.nio.file.Files.newInputStream(Paths.get(config.proxyConfiguration().getP12File())); + keystoreStream = config.proxyConfiguration().getP12File(); keyStore.load(keystoreStream, config.proxyConfiguration().getPassKey().toCharArray()); sslContext = SSLContexts.custom() .loadKeyMaterial(keyStore, config.proxyConfiguration().getPassKey().toCharArray()) diff --git a/client/src/main/java/io/split/client/dtos/ProxyConfiguration.java b/client/src/main/java/io/split/client/dtos/ProxyConfiguration.java index 93d58c4cd..c1ed2b409 100644 --- a/client/src/main/java/io/split/client/dtos/ProxyConfiguration.java +++ b/client/src/main/java/io/split/client/dtos/ProxyConfiguration.java @@ -2,18 +2,19 @@ import org.apache.hc.core5.http.HttpHost; +import java.io.InputStream; import java.net.MalformedURLException; import java.net.URL; public class ProxyConfiguration { private final HttpHost _proxyHost; private ProxyCredentialsProvider _provider; - private final String _p12File; + private final InputStream _p12File; private final String _passKey; private ProxyConfiguration(HttpHost proxyHost, ProxyCredentialsProvider proxyCredentialsProvider, - String p12File, String passKey) { + InputStream p12File, String passKey) { _proxyHost = proxyHost; _p12File = p12File; _passKey = passKey; @@ -21,7 +22,7 @@ private ProxyConfiguration(HttpHost proxyHost, } public HttpHost getHost() { return _proxyHost; } - public String getP12File() { return _p12File; } + public InputStream getP12File() { return _p12File; } public String getPassKey() { return _passKey; } public ProxyCredentialsProvider getProxyCredentialsProvider() { return _provider; } @@ -32,7 +33,7 @@ public static ProxyConfiguration.Builder builder() { public static class Builder { private ProxyCredentialsProvider _provider; private HttpHost _proxyHost; - private String _p12File; + private InputStream _p12File; private String _passKey; public ProxyConfiguration.Builder credentialsProvider(ProxyCredentialsProvider provider) { @@ -49,7 +50,7 @@ public ProxyConfiguration.Builder url(URL url) throws MalformedURLException { return this; } - public ProxyConfiguration.Builder mtls(String p12File, String passKey) { + public ProxyConfiguration.Builder mtls(InputStream p12File, String passKey) { _passKey = passKey; _p12File = p12File; return this; diff --git a/client/src/test/java/io/split/client/SplitClientConfigTest.java b/client/src/test/java/io/split/client/SplitClientConfigTest.java index 8330f13ad..be9e85544 100644 --- a/client/src/test/java/io/split/client/SplitClientConfigTest.java +++ b/client/src/test/java/io/split/client/SplitClientConfigTest.java @@ -13,6 +13,8 @@ import org.junit.Test; import org.mockito.Mockito; +import java.io.FileInputStream; +import java.io.FileNotFoundException; import java.net.MalformedURLException; import java.net.URL; import java.util.List; @@ -260,7 +262,7 @@ public Map> getHeaderOverrides(RequestContext context) { } @Test - public void checkProxyParams() throws MalformedURLException { + public void checkProxyParams() throws MalformedURLException, FileNotFoundException { SplitClientConfig config = SplitClientConfig.builder() .proxyConfiguration(new ProxyConfiguration.Builder() .url(new URL("https://proxy-host:8888")) @@ -304,14 +306,14 @@ public String getToken() { .build()) .build(); Assert.assertEquals(bearerCredentialsProvider, config.proxyConfiguration().getProxyCredentialsProvider()); - + FileInputStream p12File = new FileInputStream("src/test/resources/keyStore.p12"); config = SplitClientConfig.builder() .proxyConfiguration(new ProxyConfiguration.Builder() .url(new URL("https://proxy-host:888")) - .mtls("path/to/file", "pass-key") + .mtls(p12File, "pass-key") .build()) .build(); - Assert.assertEquals("path/to/file", config.proxyConfiguration().getP12File()); + Assert.assertEquals(p12File, config.proxyConfiguration().getP12File()); Assert.assertEquals("pass-key", config.proxyConfiguration().getPassKey()); } @@ -352,11 +354,11 @@ public void mustUseP12FileWithProxyMtls() throws MalformedURLException { } @Test(expected = IllegalArgumentException.class) - public void mustUseP12PassKeyWithProxyMtls() throws MalformedURLException { + public void mustUseP12PassKeyWithProxyMtls() throws MalformedURLException, FileNotFoundException { SplitClientConfig.builder() .proxyConfiguration(new ProxyConfiguration.Builder() .url(new URL("https://proxy-host:888")) - .mtls("path/to/file", null) + .mtls(new FileInputStream("src/test/resources/keyStore.p12"), null) .build()) .build(); } diff --git a/client/src/test/java/io/split/client/SplitFactoryImplTest.java b/client/src/test/java/io/split/client/SplitFactoryImplTest.java index 222ddc82b..9826b47e2 100644 --- a/client/src/test/java/io/split/client/SplitFactoryImplTest.java +++ b/client/src/test/java/io/split/client/SplitFactoryImplTest.java @@ -242,7 +242,7 @@ public void testFactoryInstantiationWithProxyMtls() throws Exception { .setBlockUntilReadyTimeout(1000) .proxyConfiguration(ProxyConfiguration.builder() .url(new URL("http://proxy-name:6060")) - .mtls("src/test/resources/keyStore.p12", "split") + .mtls(new FileInputStream("src/test/resources/keyStore.p12"), "split") .build()) .build(); SplitFactoryImpl splitFactory3 = new SplitFactoryImpl(API_KEY, splitClientConfig); From 32d722d28716c3ca4d9ea01024575f2eef2b6ade Mon Sep 17 00:00:00 2001 From: Bilal Al-Shahwany Date: Fri, 22 Aug 2025 10:30:04 -0700 Subject: [PATCH 2/3] Updated changes and version --- CHANGES.txt | 4 ++++ client/pom.xml | 4 ++-- okhttp-modules/pom.xml | 4 ++-- pluggable-storage/pom.xml | 2 +- pom.xml | 2 +- redis-wrapper/pom.xml | 2 +- testing/pom.xml | 4 ++-- 7 files changed, 13 insertions(+), 9 deletions(-) diff --git a/CHANGES.txt b/CHANGES.txt index ceaef9e6a..4dbbb9ee4 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,3 +1,7 @@ +4.17.0 (Aug 22, 2025) +- Added a maximum size payload when posting unique keys telemetry in batches +- Added ProxyConfiguration parameter to support proxies, including Harness Forward Proxy, allowing also for more secured authentication options: MTLS, Bearer token and user/password authentication. Read more in our docs. + 4.16.1 (Jul 21, 2025) - Fixed vulnerabilities: - Upgraded org.apache.commons-commons-lang3 to 3.18.0 diff --git a/client/pom.xml b/client/pom.xml index 0e21b1bf5..768f79e9f 100644 --- a/client/pom.xml +++ b/client/pom.xml @@ -5,9 +5,9 @@ io.split.client java-client-parent - 4.17.0-rc3 + 4.17.0 - 4.17.0-rc3 + 4.17.0 java-client jar Java Client diff --git a/okhttp-modules/pom.xml b/okhttp-modules/pom.xml index 0dfc25296..fc646f3d7 100644 --- a/okhttp-modules/pom.xml +++ b/okhttp-modules/pom.xml @@ -5,10 +5,10 @@ java-client-parent io.split.client - 4.17.0-rc3 + 4.17.0 4.0.0 - 4.17.0-rc3 + 4.17.0 okhttp-modules jar http-modules diff --git a/pluggable-storage/pom.xml b/pluggable-storage/pom.xml index 3a9082133..4b7e01562 100644 --- a/pluggable-storage/pom.xml +++ b/pluggable-storage/pom.xml @@ -6,7 +6,7 @@ java-client-parent io.split.client - 4.17.0-rc3 + 4.17.0 2.1.0 diff --git a/pom.xml b/pom.xml index e8acb3c8a..c20814b19 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 io.split.client java-client-parent - 4.17.0-rc3 + 4.17.0 diff --git a/redis-wrapper/pom.xml b/redis-wrapper/pom.xml index b65a19846..8bf6c4246 100644 --- a/redis-wrapper/pom.xml +++ b/redis-wrapper/pom.xml @@ -6,7 +6,7 @@ java-client-parent io.split.client - 4.17.0-rc3 + 4.17.0 redis-wrapper 3.1.1 diff --git a/testing/pom.xml b/testing/pom.xml index c73a45694..b7f0bf906 100644 --- a/testing/pom.xml +++ b/testing/pom.xml @@ -5,11 +5,11 @@ io.split.client java-client-parent - 4.17.0-rc3 + 4.17.0 java-client-testing jar - 4.17.0-rc3 + 4.17.0 Java Client For Testing Testing suite for Java SDK for Split From 49d0608efa45ef3c920f72049c8eb8a6e7ccbab2 Mon Sep 17 00:00:00 2001 From: Bilal Al-Shahwany Date: Fri, 22 Aug 2025 10:36:30 -0700 Subject: [PATCH 3/3] polish --- client/src/main/java/io/split/client/SplitFactoryImpl.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/client/src/main/java/io/split/client/SplitFactoryImpl.java b/client/src/main/java/io/split/client/SplitFactoryImpl.java index 917d5ea42..c84e290ed 100644 --- a/client/src/main/java/io/split/client/SplitFactoryImpl.java +++ b/client/src/main/java/io/split/client/SplitFactoryImpl.java @@ -116,14 +116,11 @@ import pluggable.CustomStorageWrapper; import javax.net.ssl.SSLContext; -import java.io.File; -import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.net.InetAddress; import java.net.URI; import java.net.URISyntaxException; -import java.nio.file.Paths; import java.security.KeyStore; import java.util.concurrent.ExecutorService; import java.util.stream.Collectors;