5858import io .split .engine .segments .SegmentSynchronizationTaskImp ;
5959import io .split .integrations .IntegrationsConfig ;
6060import io .split .service .ProxyAuthScheme ;
61- import io .split .service .SplitHttpClientKerberosImpl ;
6261import io .split .service .SplitHttpClientImpl ;
6362import io .split .service .SplitHttpClient ;
64- import io . split . service . HTTPKerberosAuthInterceptor ;
63+
6564import io .split .storages .SegmentCache ;
6665import io .split .storages .SegmentCacheConsumer ;
6766import io .split .storages .SegmentCacheProducer ;
8685import io .split .telemetry .synchronizer .TelemetryInMemorySubmitter ;
8786import io .split .telemetry .synchronizer .TelemetrySyncTask ;
8887import io .split .telemetry .synchronizer .TelemetrySynchronizer ;
88+
8989import org .apache .hc .client5 .http .auth .AuthScope ;
9090import org .apache .hc .client5 .http .auth .Credentials ;
9191import org .apache .hc .client5 .http .auth .UsernamePasswordCredentials ;
108108import org .slf4j .LoggerFactory ;
109109import pluggable .CustomStorageWrapper ;
110110
111- import okhttp3 .Authenticator ;
112- import okhttp3 .OkHttpClient ;
113- import okhttp3 .OkHttpClient .Builder ;
114- import okhttp3 .logging .HttpLoggingInterceptor ;
115-
116111import java .io .IOException ;
117112import java .io .InputStream ;
118113import java .net .InetAddress ;
119114import java .net .URI ;
120115import java .net .URISyntaxException ;
121- import java .net .InetSocketAddress ;
122- import java .net .Proxy ;
123- import java .util .Map ;
124- import java .util .HashMap ;
125116import java .util .concurrent .ExecutorService ;
126117import java .util .stream .Collectors ;
127118import java .util .HashSet ;
128119import java .util .List ;
129120import java .util .ArrayList ;
130- import java .util .concurrent .TimeUnit ;
131121
132122import static io .split .client .utils .SplitExecutorFactory .buildExecutorService ;
133123
@@ -167,15 +157,16 @@ public class SplitFactoryImpl implements SplitFactory {
167157 private final SplitSynchronizationTask _splitSynchronizationTask ;
168158 private final EventsTask _eventsTask ;
169159 private final SyncManager _syncManager ;
170- private final SplitHttpClient _splitHttpClient ;
160+ private SplitHttpClient _splitHttpClient ;
171161 private final UserStorageWrapper _userStorageWrapper ;
172162 private final ImpressionsSender _impressionsSender ;
173163 private final URI _rootTarget ;
174164 private final URI _eventsRootTarget ;
175165 private final UniqueKeysTracker _uniqueKeysTracker ;
166+ private RequestDecorator _requestDecorator ;
176167
177168 // Constructor for standalone mode
178- public SplitFactoryImpl (String apiToken , SplitClientConfig config ) throws URISyntaxException , IOException {
169+ public SplitFactoryImpl (String apiToken , SplitClientConfig config ) throws URISyntaxException {
179170 _userStorageWrapper = null ;
180171 _operationMode = config .operationMode ();
181172 _startTime = System .currentTimeMillis ();
@@ -199,8 +190,14 @@ public SplitFactoryImpl(String apiToken, SplitClientConfig config) throws URISyn
199190 _gates = new SDKReadinessGates ();
200191
201192 // HttpClient
202- RequestDecorator requestDecorator = new RequestDecorator (config .customHeaderDecorator ());
203- _splitHttpClient = buildSplitHttpClient (apiToken , config , _sdkMetadata , requestDecorator );
193+ _requestDecorator = new RequestDecorator (config .customHeaderDecorator ());
194+ if (config .proxyAuthScheme () != ProxyAuthScheme .KERBEROS ) {
195+ _splitHttpClient = buildSplitHttpClient (apiToken , config , _sdkMetadata , _requestDecorator );
196+ } else {
197+ _splitHttpClient = config .proxyKerberosClient ();
198+ _splitHttpClient .setMetaData (_sdkMetadata );
199+ _splitHttpClient .setRequestDecorator (_requestDecorator );
200+ }
204201
205202 // Roots
206203 _rootTarget = URI .create (config .endpoint ());
@@ -269,7 +266,7 @@ public SplitFactoryImpl(String apiToken, SplitClientConfig config) throws URISyn
269266 // SyncManager
270267 SplitTasks splitTasks = SplitTasks .build (_splitSynchronizationTask , _segmentSynchronizationTaskImp ,
271268 _impressionsManager , _eventsTask , _telemetrySyncTask , _uniqueKeysTracker );
272- SplitAPI splitAPI = SplitAPI .build (_splitHttpClient , buildSSEdHttpClient (apiToken , config , _sdkMetadata ), requestDecorator );
269+ SplitAPI splitAPI = SplitAPI .build (_splitHttpClient , buildSSEdHttpClient (apiToken , config , _sdkMetadata ), _requestDecorator );
273270
274271 _syncManager = SyncManagerImp .build (splitTasks , _splitFetcher , splitCache , splitAPI ,
275272 segmentCache , _gates , _telemetryStorageProducer , _telemetrySynchronizer , config , splitParser ,
@@ -287,6 +284,14 @@ public SplitFactoryImpl(String apiToken, SplitClientConfig config) throws URISyn
287284 }
288285 }
289286
287+ public RequestDecorator getRequestDecorator () {
288+ return _requestDecorator ;
289+ }
290+
291+ public SDKMetadata getSDKMetaData () {
292+ return _sdkMetadata ;
293+ }
294+
290295 // Constructor for consumer mode
291296 protected SplitFactoryImpl (String apiToken , SplitClientConfig config , CustomStorageWrapper customStorageWrapper )
292297 throws URISyntaxException {
@@ -503,36 +508,12 @@ public boolean isDestroyed() {
503508 return isTerminated ;
504509 }
505510
511+ public void setSplitHttpClient (SplitHttpClient splitHttpClient ) {
512+ _splitHttpClient = splitHttpClient ;
513+ }
506514 protected static SplitHttpClient buildSplitHttpClient (String apiToken , SplitClientConfig config ,
507515 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-
516+ throws URISyntaxException {
536517 SSLConnectionSocketFactory sslSocketFactory = SSLConnectionSocketFactoryBuilder .create ()
537518 .setSslContext (SSLContexts .createSystemDefault ())
538519 .setTlsVersions (TLS .V_1_1 , TLS .V_1_2 )
@@ -570,21 +551,6 @@ protected static SplitHttpClient buildSplitHttpClient(String apiToken, SplitClie
570551 sdkMetadata );
571552 }
572553
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- }
588554 private static CloseableHttpClient buildSSEdHttpClient (String apiToken , SplitClientConfig config ,
589555 SDKMetadata sdkMetadata ) {
590556 RequestConfig requestConfig = RequestConfig .custom ()
0 commit comments