Skip to content

Commit 88d7a56

Browse files
authored
Merge pull request #587 from splitio/proxy-polish
polishing
2 parents a32fd58 + 77c681a commit 88d7a56

File tree

2 files changed

+50
-35
lines changed

2 files changed

+50
-35
lines changed

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import io.split.storages.enums.OperationMode;
1010
import io.split.storages.enums.StorageMode;
1111
import org.apache.hc.core5.http.HttpHost;
12+
import org.slf4j.LoggerFactory;
1213
import pluggable.CustomStorageWrapper;
1314

1415
import java.io.IOException;
@@ -28,6 +29,7 @@
2829
*/
2930
public class SplitClientConfig {
3031

32+
private static final org.slf4j.Logger _log = LoggerFactory.getLogger(SplitClientConfig.class);
3133
public static final String LOCALHOST_DEFAULT_FILE = "split.yaml";
3234
public static final String SDK_ENDPOINT = "https://sdk.split.io";
3335
public static final String EVENTS_ENDPOINT = "https://events.split.io";
@@ -1140,6 +1142,11 @@ private void verifyProxy() {
11401142
if (_proxyConfiguration == null)
11411143
return;
11421144

1145+
if (_proxyPort != -1) {
1146+
_log.warn("Both the deprecated proxy configuration methods (`proxyHost`, `proxyPort`, `proxyUsername`, or `proxyPassword`) " +
1147+
"and the new `ProxyConfiguration` builder are being used. `ProxyConfiguration` will take precedence.");
1148+
}
1149+
11431150
if (!(_proxyConfiguration.getHost().getSchemeName().equals(HttpScheme.HTTP) ||
11441151
_proxyConfiguration.getHost().getSchemeName().equals(HttpScheme.HTTPS))) {
11451152
throw new IllegalArgumentException("Proxy scheme must be either http or https.");

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

Lines changed: 43 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -628,48 +628,56 @@ private static SSLContext buildSSLContext(SplitClientConfig config) throws IOExc
628628

629629
private static HttpClientBuilder setupProxy(HttpClientBuilder httpClientbuilder, SplitClientConfig config) {
630630
_log.info("Initializing Split SDK with proxy settings");
631-
HttpHost proxyHost;
632-
if (config.proxyConfiguration() != null && config.proxyConfiguration().getHost() != null) {
633-
proxyHost = config.proxyConfiguration().getHost();
631+
if (config.proxyConfiguration() != null) {
632+
return useProxyConfiguration(httpClientbuilder, config);
634633
} else {
635-
_log.warn("`proxyHost`, `proxyPort` configuration methods are deprecated. Please use `ProxyConfiguration` builder instead.");
636-
proxyHost = config.proxy();
634+
return useLegacyProxyConfiguration(httpClientbuilder, config);
637635
}
638-
DefaultProxyRoutePlanner routePlanner = new DefaultProxyRoutePlanner(proxyHost);
639-
httpClientbuilder.setRoutePlanner(routePlanner);
636+
}
640637

641-
if ((config.proxyUsername() != null && config.proxyPassword() != null) ||
642-
(config.proxyConfiguration() != null && config.proxyConfiguration().getProxyCredentialsProvider() != null &&
643-
config.proxyConfiguration().getProxyCredentialsProvider() instanceof io.split.client.dtos.BasicCredentialsProvider)) {
644-
_log.debug("Proxy setup using credentials");
645-
String userName;
646-
String password;
647-
if (config.proxyUsername() == null && config.proxyPassword() == null) {
648-
io.split.client.dtos.BasicCredentialsProvider basicAuth =
649-
(io.split.client.dtos.BasicCredentialsProvider) config.proxyConfiguration().getProxyCredentialsProvider();
650-
userName = basicAuth.getUsername();
651-
password = basicAuth.getPassword();
652-
} else {
653-
_log.warn("`proxyUsername` and `proxyPassword` configuration methods are deprecated. " +
654-
"Please use `ProxyConfiguration` builder instead.");
655-
userName = config.proxyUsername();
656-
password = config.proxyPassword();
657-
}
658-
BasicCredentialsProvider credsProvider = new BasicCredentialsProvider();
659-
AuthScope siteScope = new AuthScope(proxyHost.getHostName(), proxyHost.getPort());
660-
Credentials siteCreds = new UsernamePasswordCredentials(userName,
661-
password.toCharArray());
662-
credsProvider.setCredentials(siteScope, siteCreds);
663-
httpClientbuilder.setDefaultCredentialsProvider(credsProvider);
638+
private static HttpClientBuilder useLegacyProxyConfiguration(HttpClientBuilder httpClientbuilder, SplitClientConfig config) {
639+
HttpHost proxyHost = config.proxy();
640+
httpClientbuilder = addProxyHost(httpClientbuilder, proxyHost);
641+
if (config.proxyUsername() != null && config.proxyPassword() != null) {
642+
return addProxyBasicAuth(httpClientbuilder, proxyHost, config.proxyUsername(), config.proxyPassword());
664643
}
644+
645+
return httpClientbuilder;
646+
}
665647

666-
if (config.proxyConfiguration() != null &&
667-
config.proxyConfiguration().getProxyCredentialsProvider() instanceof io.split.client.dtos.BearerCredentialsProvider) {
668-
_log.debug("Proxy setup using Bearer token");
669-
httpClientbuilder.setDefaultCredentialsProvider(new HttpClientDynamicCredentials(
670-
(BearerCredentialsProvider) config.proxyConfiguration().getProxyCredentialsProvider()));
648+
private static HttpClientBuilder useProxyConfiguration(HttpClientBuilder httpClientbuilder, SplitClientConfig config) {
649+
HttpHost proxyHost = config.proxyConfiguration().getHost();
650+
httpClientbuilder = addProxyHost(httpClientbuilder, proxyHost);
651+
if (config.proxyConfiguration().getProxyCredentialsProvider() == null) {
652+
return httpClientbuilder;
653+
}
654+
655+
if (config.proxyConfiguration().getProxyCredentialsProvider() instanceof io.split.client.dtos.BasicCredentialsProvider) {
656+
io.split.client.dtos.BasicCredentialsProvider basicAuth =
657+
(io.split.client.dtos.BasicCredentialsProvider) config.proxyConfiguration().getProxyCredentialsProvider();
658+
return addProxyBasicAuth(httpClientbuilder, proxyHost, basicAuth.getUsername(), basicAuth.getPassword());
671659
}
672660

661+
_log.debug("Proxy setup using Bearer token");
662+
httpClientbuilder.setDefaultCredentialsProvider(new HttpClientDynamicCredentials(
663+
(BearerCredentialsProvider) config.proxyConfiguration().getProxyCredentialsProvider()));
664+
return httpClientbuilder;
665+
}
666+
667+
private static HttpClientBuilder addProxyHost(HttpClientBuilder httpClientbuilder, HttpHost proxyHost) {
668+
DefaultProxyRoutePlanner routePlanner = new DefaultProxyRoutePlanner(proxyHost);
669+
httpClientbuilder.setRoutePlanner(routePlanner);
670+
return httpClientbuilder;
671+
}
672+
673+
private static HttpClientBuilder addProxyBasicAuth(HttpClientBuilder httpClientbuilder, HttpHost proxyHost, String userName, String password) {
674+
_log.debug("Proxy setup using Basic authentication");
675+
BasicCredentialsProvider credsProvider = new BasicCredentialsProvider();
676+
AuthScope siteScope = new AuthScope(proxyHost.getHostName(), proxyHost.getPort());
677+
Credentials siteCreds = new UsernamePasswordCredentials(userName,
678+
password.toCharArray());
679+
credsProvider.setCredentials(siteScope, siteCreds);
680+
httpClientbuilder.setDefaultCredentialsProvider(credsProvider);
673681
return httpClientbuilder;
674682
}
675683

0 commit comments

Comments
 (0)