5757import io .split .engine .segments .SegmentChangeFetcher ;
5858import io .split .engine .segments .SegmentSynchronizationTaskImp ;
5959import io .split .integrations .IntegrationsConfig ;
60- import io .split .service .ProxyAuthScheme ;
61- import io .split .service .SplitHttpClientKerberosImpl ;
6260import io .split .service .SplitHttpClientImpl ;
6361import io .split .service .SplitHttpClient ;
64- import io . split . service . HTTPKerberosAuthInterceptor ;
62+
6563import io .split .storages .SegmentCache ;
6664import io .split .storages .SegmentCacheConsumer ;
6765import io .split .storages .SegmentCacheProducer ;
8684import io .split .telemetry .synchronizer .TelemetryInMemorySubmitter ;
8785import io .split .telemetry .synchronizer .TelemetrySyncTask ;
8886import io .split .telemetry .synchronizer .TelemetrySynchronizer ;
87+
8988import org .apache .hc .client5 .http .auth .AuthScope ;
9089import org .apache .hc .client5 .http .auth .Credentials ;
9190import org .apache .hc .client5 .http .auth .UsernamePasswordCredentials ;
108107import org .slf4j .LoggerFactory ;
109108import pluggable .CustomStorageWrapper ;
110109
111- import okhttp3 .Authenticator ;
112- import okhttp3 .OkHttpClient ;
113- import okhttp3 .OkHttpClient .Builder ;
114- import okhttp3 .logging .HttpLoggingInterceptor ;
115-
116110import java .io .IOException ;
117111import java .io .InputStream ;
118112import java .net .InetAddress ;
119113import java .net .URI ;
120114import java .net .URISyntaxException ;
121- import java .net .InetSocketAddress ;
122- import java .net .Proxy ;
123- import java .util .Map ;
124- import java .util .HashMap ;
125115import java .util .concurrent .ExecutorService ;
126116import java .util .stream .Collectors ;
127117import java .util .HashSet ;
128118import java .util .List ;
129119import java .util .ArrayList ;
130- import java .util .concurrent .TimeUnit ;
131120
132121import static io .split .client .utils .SplitExecutorFactory .buildExecutorService ;
133122
@@ -167,12 +156,13 @@ public class SplitFactoryImpl implements SplitFactory {
167156 private final SplitSynchronizationTask _splitSynchronizationTask ;
168157 private final EventsTask _eventsTask ;
169158 private final SyncManager _syncManager ;
170- private final SplitHttpClient _splitHttpClient ;
159+ private SplitHttpClient _splitHttpClient ;
171160 private final UserStorageWrapper _userStorageWrapper ;
172161 private final ImpressionsSender _impressionsSender ;
173162 private final URI _rootTarget ;
174163 private final URI _eventsRootTarget ;
175164 private final UniqueKeysTracker _uniqueKeysTracker ;
165+ private RequestDecorator _requestDecorator ;
176166
177167 // Constructor for standalone mode
178168 public SplitFactoryImpl (String apiToken , SplitClientConfig config ) throws URISyntaxException , IOException {
@@ -199,8 +189,12 @@ public SplitFactoryImpl(String apiToken, SplitClientConfig config) throws URISyn
199189 _gates = new SDKReadinessGates ();
200190
201191 // HttpClient
202- RequestDecorator requestDecorator = new RequestDecorator (config .customHeaderDecorator ());
203- _splitHttpClient = buildSplitHttpClient (apiToken , config , _sdkMetadata , requestDecorator );
192+ _requestDecorator = new RequestDecorator (config .customHeaderDecorator ());
193+ if (config .alternativeHTTPModule () == null ) {
194+ _splitHttpClient = buildSplitHttpClient (apiToken , config , _sdkMetadata , _requestDecorator );
195+ } else {
196+ _splitHttpClient = config .alternativeHTTPModule ().createClient (apiToken , _sdkMetadata , _requestDecorator );
197+ }
204198
205199 // Roots
206200 _rootTarget = URI .create (config .endpoint ());
@@ -269,7 +263,7 @@ public SplitFactoryImpl(String apiToken, SplitClientConfig config) throws URISyn
269263 // SyncManager
270264 SplitTasks splitTasks = SplitTasks .build (_splitSynchronizationTask , _segmentSynchronizationTaskImp ,
271265 _impressionsManager , _eventsTask , _telemetrySyncTask , _uniqueKeysTracker );
272- SplitAPI splitAPI = SplitAPI .build (_splitHttpClient , buildSSEdHttpClient (apiToken , config , _sdkMetadata ), requestDecorator );
266+ SplitAPI splitAPI = SplitAPI .build (_splitHttpClient , buildSSEdHttpClient (apiToken , config , _sdkMetadata ), _requestDecorator );
273267
274268 _syncManager = SyncManagerImp .build (splitTasks , _splitFetcher , splitCache , splitAPI ,
275269 segmentCache , _gates , _telemetryStorageProducer , _telemetrySynchronizer , config , splitParser ,
@@ -505,34 +499,7 @@ public boolean isDestroyed() {
505499
506500 protected static SplitHttpClient buildSplitHttpClient (String apiToken , SplitClientConfig config ,
507501 SDKMetadata sdkMetadata , RequestDecorator requestDecorator )
508- throws URISyntaxException , IOException {
509- // setup Kerberos client
510- if (config .proxyAuthScheme () == ProxyAuthScheme .KERBEROS ) {
511- _log .info ("Using Kerberos-Proxy Authentication Scheme." );
512- Proxy proxy = new Proxy (Proxy .Type .HTTP , new InetSocketAddress (config .proxy ().getHostName (), config .proxy ().getPort ()));
513- HttpLoggingInterceptor logging = new HttpLoggingInterceptor ();
514- if (config .debugEnabled ()) {
515- logging .setLevel (HttpLoggingInterceptor .Level .HEADERS );
516- } else {
517- logging .setLevel (HttpLoggingInterceptor .Level .NONE );
518- }
519-
520- Map <String , String > kerberosOptions = new HashMap <>();
521- kerberosOptions .put ("com.sun.security.auth.module.Krb5LoginModule" , "required" );
522- kerberosOptions .put ("refreshKrb5Config" , "false" );
523- kerberosOptions .put ("doNotPrompt" , "false" );
524- kerberosOptions .put ("useTicketCache" , "true" );
525-
526- Authenticator proxyAuthenticator = getProxyAuthenticator (config , kerberosOptions );
527- OkHttpClient client = buildOkHttpClient (proxy , config , logging , proxyAuthenticator );
528-
529- return SplitHttpClientKerberosImpl .create (
530- client ,
531- requestDecorator ,
532- apiToken ,
533- sdkMetadata );
534- }
535-
502+ throws URISyntaxException {
536503 SSLConnectionSocketFactory sslSocketFactory = SSLConnectionSocketFactoryBuilder .create ()
537504 .setSslContext (SSLContexts .createSystemDefault ())
538505 .setTlsVersions (TLS .V_1_1 , TLS .V_1_2 )
@@ -570,21 +537,6 @@ protected static SplitHttpClient buildSplitHttpClient(String apiToken, SplitClie
570537 sdkMetadata );
571538 }
572539
573- protected static OkHttpClient buildOkHttpClient (Proxy proxy , SplitClientConfig config ,
574- HttpLoggingInterceptor logging , Authenticator proxyAuthenticator ) {
575- return new Builder ()
576- .proxy (proxy )
577- .readTimeout (config .readTimeout (), TimeUnit .MILLISECONDS )
578- .connectTimeout (config .connectionTimeout (), TimeUnit .MILLISECONDS )
579- .addInterceptor (logging )
580- .proxyAuthenticator (proxyAuthenticator )
581- .build ();
582- }
583-
584- protected static HTTPKerberosAuthInterceptor getProxyAuthenticator (SplitClientConfig config ,
585- Map <String , String > kerberosOptions ) throws IOException {
586- return new HTTPKerberosAuthInterceptor (config .proxyKerberosPrincipalName (), kerberosOptions );
587- }
588540 private static CloseableHttpClient buildSSEdHttpClient (String apiToken , SplitClientConfig config ,
589541 SDKMetadata sdkMetadata ) {
590542 RequestConfig requestConfig = RequestConfig .custom ()
0 commit comments