Skip to content

Commit 0267513

Browse files
committed
Update factory
1 parent 3cca5ea commit 0267513

File tree

2 files changed

+72
-3
lines changed

2 files changed

+72
-3
lines changed

client/src/main/java/io/split/client/SplitFactoryImpl.java

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,7 @@
9292
import io.split.telemetry.synchronizer.TelemetrySynchronizer;
9393

9494
import org.apache.hc.client5.http.auth.AuthScope;
95+
import org.apache.hc.client5.http.auth.BearerToken;
9596
import org.apache.hc.client5.http.auth.Credentials;
9697
import org.apache.hc.client5.http.auth.UsernamePasswordCredentials;
9798
import org.apache.hc.client5.http.config.RequestConfig;
@@ -113,11 +114,14 @@
113114
import org.slf4j.LoggerFactory;
114115
import pluggable.CustomStorageWrapper;
115116

117+
import javax.net.ssl.SSLContext;
116118
import java.io.IOException;
117119
import java.io.InputStream;
118120
import java.net.InetAddress;
119121
import java.net.URI;
120122
import java.net.URISyntaxException;
123+
import java.nio.file.Paths;
124+
import java.security.KeyStore;
121125
import java.util.concurrent.ExecutorService;
122126
import java.util.stream.Collectors;
123127
import java.util.HashSet;
@@ -518,8 +522,28 @@ public boolean isDestroyed() {
518522
protected static SplitHttpClient buildSplitHttpClient(String apiToken, SplitClientConfig config,
519523
SDKMetadata sdkMetadata, RequestDecorator requestDecorator)
520524
throws URISyntaxException {
525+
526+
SSLContext sslContext;
527+
if (config.proxyMTLSAuth() != null) {
528+
_log.debug("Proxy setup using mTLS");
529+
try {
530+
KeyStore keyStore = KeyStore.getInstance("PKCS12");
531+
InputStream keystoreStream = java.nio.file.Files.newInputStream(Paths.get(config.proxyMTLSAuth().getP12File()));
532+
keyStore.load(keystoreStream, config.proxyMTLSAuth().getP12FilePassKey().toCharArray());
533+
sslContext = SSLContexts.custom()
534+
.loadKeyMaterial(keyStore, config.proxyMTLSAuth().getP12FilePassKey().toCharArray())
535+
.build();
536+
} catch (Exception e) {
537+
_log.error("Exception caught while processing p12 file for Proxy mTLS auth: ", e);
538+
_log.warn("Ignoring p12 mTLS config and switching to default context");
539+
sslContext = SSLContexts.createSystemDefault();
540+
}
541+
} else {
542+
sslContext = SSLContexts.createSystemDefault();
543+
}
544+
521545
SSLConnectionSocketFactory sslSocketFactory = SSLConnectionSocketFactoryBuilder.create()
522-
.setSslContext(SSLContexts.createSystemDefault())
546+
.setSslContext(sslContext)
523547
.setTlsVersions(TLS.V_1_1, TLS.V_1_2)
524548
.build();
525549

@@ -604,6 +628,15 @@ private static HttpClientBuilder setupProxy(HttpClientBuilder httpClientbuilder,
604628
httpClientbuilder.setDefaultCredentialsProvider(credsProvider);
605629
}
606630

631+
if (config.proxyToken() != null) {
632+
_log.debug("Proxy setup using token");
633+
BasicCredentialsProvider credsProvider = new BasicCredentialsProvider();
634+
AuthScope siteScope = new AuthScope(config.proxy().getHostName(), config.proxy().getPort());
635+
Credentials siteCreds = new BearerToken(config.proxyToken());
636+
credsProvider.setCredentials(siteScope, siteCreds);
637+
httpClientbuilder.setDefaultCredentialsProvider(credsProvider);
638+
}
639+
607640
return httpClientbuilder;
608641
}
609642

client/src/test/java/io/split/client/SplitFactoryImplTest.java

Lines changed: 38 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package io.split.client;
22

3+
import io.split.client.dtos.ProxyMTLSAuth;
34
import io.split.client.impressions.ImpressionsManager;
45
import io.split.client.utils.FileTypeEnum;
56
import io.split.integrations.IntegrationsConfig;
@@ -10,7 +11,6 @@
1011
import junit.framework.TestCase;
1112
import org.awaitility.Awaitility;
1213
import org.junit.Assert;
13-
import org.junit.Ignore;
1414
import org.junit.Test;
1515
import org.mockito.Mockito;
1616
import static org.mockito.Mockito.when;
@@ -102,9 +102,45 @@ public void testFactoryInstantiationWithProxy() throws Exception {
102102
.proxyHost(ENDPOINT)
103103
.build();
104104
SplitFactoryImpl splitFactory = new SplitFactoryImpl(API_KEY, splitClientConfig);
105-
106105
assertNotNull(splitFactory.client());
107106
assertNotNull(splitFactory.manager());
107+
108+
splitClientConfig = SplitClientConfig.builder()
109+
.enableDebug()
110+
.impressionsMode(ImpressionsManager.Mode.DEBUG)
111+
.impressionsRefreshRate(1)
112+
.endpoint(ENDPOINT,EVENTS_ENDPOINT)
113+
.telemetryURL(SplitClientConfig.TELEMETRY_ENDPOINT)
114+
.authServiceURL(AUTH_SERVICE)
115+
.setBlockUntilReadyTimeout(1000)
116+
.proxyPort(6060)
117+
.proxyToken("12345")
118+
.proxyHost(ENDPOINT)
119+
.build();
120+
SplitFactoryImpl splitFactory2 = new SplitFactoryImpl(API_KEY, splitClientConfig);
121+
assertNotNull(splitFactory2.client());
122+
assertNotNull(splitFactory2.manager());
123+
124+
splitClientConfig = SplitClientConfig.builder()
125+
.enableDebug()
126+
.impressionsMode(ImpressionsManager.Mode.DEBUG)
127+
.impressionsRefreshRate(1)
128+
.endpoint(ENDPOINT,EVENTS_ENDPOINT)
129+
.telemetryURL(SplitClientConfig.TELEMETRY_ENDPOINT)
130+
.authServiceURL(AUTH_SERVICE)
131+
.setBlockUntilReadyTimeout(1000)
132+
.proxyPort(6060)
133+
.proxyScheme("https")
134+
.proxyMtlsAuth(new ProxyMTLSAuth.Builder().proxyP12File("file").proxyP12FilePassKey("pass").build())
135+
.proxyHost(ENDPOINT)
136+
.build();
137+
SplitFactoryImpl splitFactory3 = new SplitFactoryImpl(API_KEY, splitClientConfig);
138+
assertNotNull(splitFactory3.client());
139+
assertNotNull(splitFactory3.manager());
140+
141+
splitFactory.destroy();
142+
splitFactory2.destroy();
143+
splitFactory3.destroy();
108144
}
109145

110146
@Test

0 commit comments

Comments
 (0)