Skip to content

Commit 4b4bb99

Browse files
committed
added headers
1 parent eeeb747 commit 4b4bb99

File tree

6 files changed

+80
-22
lines changed

6 files changed

+80
-22
lines changed

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

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -48,9 +48,7 @@
4848
import java.io.IOException;
4949
import java.net.URI;
5050
import java.net.URISyntaxException;
51-
import java.util.ArrayList;
52-
import java.util.List;
53-
import java.util.Random;
51+
import java.util.*;
5452
import java.util.stream.Collectors;
5553

5654
public class SplitFactoryImpl implements SplitFactory {
@@ -130,7 +128,7 @@ public SplitFactoryImpl(String apiToken, SplitClientConfig config) throws URISyn
130128
_eventClient = EventClientImpl.create(_httpclient, _eventsRootTarget, config.eventsQueueSize(), config.eventFlushIntervalInMillis(), config.waitBeforeShutdown());
131129

132130
// SyncManager
133-
_syncManager = SyncManagerImp.build(config.streamingEnabled(), _splitSynchronizationTask, _splitFetcher, _segmentSynchronizationTaskImp, _splitCache, config.authServiceURL(), _httpclient, config.streamingServiceURL(), config.authRetryBackoffBase(), buildSSEdHttpClient(config), _segmentCache, config.streamingRetryDelay(), _gates);
131+
_syncManager = SyncManagerImp.build(config.streamingEnabled(), _splitSynchronizationTask, _splitFetcher, _segmentSynchronizationTaskImp, _splitCache, config.authServiceURL(), _httpclient, config.streamingServiceURL(), config.authRetryBackoffBase(), buildSSEdHttpClient(apiToken, config), _segmentCache, config.streamingRetryDelay(), _gates);
134132
_syncManager.start();
135133

136134
// Evaluator
@@ -215,7 +213,7 @@ private static CloseableHttpClient buildHttpClient(String apiToken, SplitClientC
215213
HttpClientBuilder httpClientbuilder = HttpClients.custom()
216214
.setConnectionManager(cm)
217215
.setDefaultRequestConfig(requestConfig)
218-
.addRequestInterceptorLast(AddSplitHeadersFilter.instance(apiToken, config.ipAddressEnabled()))
216+
.addRequestInterceptorLast(AddSplitHeadersFilter.instance(apiToken, config.ipAddressEnabled(), false))
219217
.addRequestInterceptorLast(new GzipEncoderRequestInterceptor())
220218
.addResponseInterceptorLast((new GzipDecoderResponseInterceptor()));
221219

@@ -227,7 +225,7 @@ private static CloseableHttpClient buildHttpClient(String apiToken, SplitClientC
227225
return httpClientbuilder.build();
228226
}
229227

230-
private static CloseableHttpClient buildSSEdHttpClient(SplitClientConfig config) {
228+
private static CloseableHttpClient buildSSEdHttpClient(String apiToken, SplitClientConfig config) {
231229
RequestConfig requestConfig = RequestConfig.custom()
232230
.setConnectTimeout(Timeout.ofMilliseconds(SSE_CONNECT_TIMEOUT))
233231
.build();
@@ -248,7 +246,8 @@ private static CloseableHttpClient buildSSEdHttpClient(SplitClientConfig config)
248246

249247
HttpClientBuilder httpClientbuilder = HttpClients.custom()
250248
.setConnectionManager(cm)
251-
.setDefaultRequestConfig(requestConfig);
249+
.setDefaultRequestConfig(requestConfig)
250+
.addRequestInterceptorLast(AddSplitHeadersFilter.instance(apiToken, config.ipAddressEnabled(), true));
252251

253252
// Set up proxy is it exists
254253
if (config.proxy() != null) {
@@ -311,5 +310,4 @@ private ImpressionsManagerImpl buildImpressionsManager(SplitClientConfig config)
311310

312311
return ImpressionsManagerImpl.instance(_httpclient, config, impressionListeners);
313312
}
314-
315313
}

client/src/main/java/io/split/client/interceptors/AddSplitHeadersFilter.java

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -25,14 +25,16 @@ public class AddSplitHeadersFilter implements HttpRequestInterceptor {
2525
static final String CLIENT_MACHINE_NAME_HEADER = "SplitSDKMachineName";
2626
static final String CLIENT_MACHINE_IP_HEADER = "SplitSDKMachineIP";
2727
static final String CLIENT_VERSION = "SplitSDKVersion";
28+
static final String CLIENT_KEY = "SplitSDKClientKey";
2829

2930
private final String _apiTokenBearer;
3031
private final String _hostname;
3132
private final String _ip;
33+
private final String _clientKey;
3234

33-
public static AddSplitHeadersFilter instance(String apiToken, boolean ipAddressEnabled) {
35+
public static AddSplitHeadersFilter instance(String apiToken, boolean ipAddressEnabled, boolean externalClient) {
3436
if (!ipAddressEnabled) {
35-
return new AddSplitHeadersFilter(apiToken, null, null);
37+
return new AddSplitHeadersFilter(apiToken, null, null, externalClient);
3638
}
3739

3840
String hostname = null;
@@ -46,20 +48,30 @@ public static AddSplitHeadersFilter instance(String apiToken, boolean ipAddressE
4648
_log.error("Could not resolve InetAddress", e);
4749
}
4850

49-
return new AddSplitHeadersFilter(apiToken, hostname, ip);
51+
return new AddSplitHeadersFilter(apiToken, hostname, ip, externalClient);
5052
}
5153

52-
private AddSplitHeadersFilter(String apiToken, String hostname, String ip) {
54+
private AddSplitHeadersFilter(String apiToken, String hostname, String ip, boolean externalClient) {
5355
checkNotNull(apiToken);
5456

55-
_apiTokenBearer = "Bearer " + apiToken;
57+
if (externalClient) {
58+
_apiTokenBearer = null;
59+
_clientKey = apiToken.substring(apiToken.length() - 4);
60+
} else {
61+
_apiTokenBearer = "Bearer " + apiToken;
62+
_clientKey = null;
63+
}
64+
5665
_hostname = hostname;
5766
_ip = ip;
5867
}
5968

6069
@Override
61-
public void process(HttpRequest request, EntityDetails entity, HttpContext context) throws HttpException, IOException {
62-
request.addHeader(AUTHORIZATION_HEADER, _apiTokenBearer);
70+
public void process(HttpRequest request, EntityDetails entity, HttpContext context) {
71+
if (_apiTokenBearer != null) {
72+
request.addHeader(AUTHORIZATION_HEADER, _apiTokenBearer);
73+
}
74+
6375
request.addHeader(CLIENT_VERSION, SplitClientConfig.splitSdkVersion);
6476

6577
if (_hostname != null) {
@@ -69,5 +81,9 @@ public void process(HttpRequest request, EntityDetails entity, HttpContext conte
6981
if (_ip != null) {
7082
request.addHeader(CLIENT_MACHINE_IP_HEADER, _ip);
7183
}
84+
85+
if (_clientKey != null) {
86+
request.addHeader(CLIENT_KEY, _clientKey);
87+
}
7288
}
7389
}

client/src/main/java/io/split/engine/common/PushManagerImp.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import org.slf4j.Logger;
2121
import org.slf4j.LoggerFactory;
2222

23+
import java.util.Map;
2324
import java.util.concurrent.Future;
2425
import java.util.concurrent.LinkedBlockingQueue;
2526
import java.util.concurrent.ScheduledExecutorService;

client/src/main/java/io/split/engine/sse/EventSourceClientImp.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414

1515
import java.net.URI;
1616
import java.net.URISyntaxException;
17+
import java.util.Map;
1718
import java.util.concurrent.atomic.AtomicBoolean;
1819

1920
import static com.google.common.base.Preconditions.checkNotNull;

client/src/main/java/io/split/engine/sse/client/SSEClient.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
import java.io.InputStreamReader;
1616
import java.net.SocketException;
1717
import java.net.URI;
18+
import java.util.HashMap;
19+
import java.util.Map;
1820
import java.util.concurrent.CountDownLatch;
1921
import java.util.concurrent.ExecutorService;
2022
import java.util.concurrent.Executors;
@@ -156,7 +158,6 @@ private void connectAndLoop(URI uri, CountDownLatch signal) {
156158
}
157159

158160
private boolean establishConnection(URI uri, CountDownLatch signal) {
159-
160161
_ongoingRequest.set(new HttpGet(uri));
161162

162163
try {

client/src/test/java/io/split/client/interceptors/AddSplitHeadersFilterTest.java

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

3-
import org.apache.hc.core5.http.HttpException;
43
import org.apache.hc.core5.http.HttpRequest;
54
import org.apache.hc.core5.http.protocol.HttpContext;
65
import org.junit.Test;
@@ -11,11 +10,11 @@
1110

1211
import org.mockito.runners.MockitoJUnitRunner;
1312

14-
import java.io.IOException;
1513
import java.util.List;
1614

1715
import static org.hamcrest.Matchers.*;
1816
import static org.hamcrest.core.IsEqual.equalTo;
17+
import static org.junit.Assert.assertEquals;
1918
import static org.junit.Assert.assertThat;
2019

2120

@@ -29,8 +28,8 @@ public class AddSplitHeadersFilterTest {
2928
private ArgumentCaptor<String> headerValueCaptor;
3029

3130
@Test
32-
public void testHeadersWithIpAndHostname() throws IOException, HttpException {
33-
AddSplitHeadersFilter filter = AddSplitHeadersFilter.instance("abc", true);
31+
public void testHeadersWithIpAndHostname() {
32+
AddSplitHeadersFilter filter = AddSplitHeadersFilter.instance("abc", true, false);
3433
HttpRequest req = Mockito.mock(HttpRequest.class);
3534
HttpContext ctx = Mockito.mock(HttpContext.class);
3635

@@ -50,8 +49,8 @@ public void testHeadersWithIpAndHostname() throws IOException, HttpException {
5049
}
5150

5251
@Test
53-
public void testHeadersWithoutIpAndHostname() throws IOException, HttpException {
54-
AddSplitHeadersFilter filter = AddSplitHeadersFilter.instance("abc", false);
52+
public void testHeadersWithoutIpAndHostname() {
53+
AddSplitHeadersFilter filter = AddSplitHeadersFilter.instance("abc", false, false);
5554
HttpRequest req = Mockito.mock(HttpRequest.class);
5655
HttpContext ctx = Mockito.mock(HttpContext.class);
5756

@@ -70,4 +69,46 @@ public void testHeadersWithoutIpAndHostname() throws IOException, HttpException
7069
assertThat(headerNames, not(contains(AddSplitHeadersFilter.CLIENT_MACHINE_NAME_HEADER,
7170
AddSplitHeadersFilter.CLIENT_MACHINE_IP_HEADER)));
7271
}
72+
73+
@Test
74+
public void testHeadersWithoutIpAndHostnameAndWithClientKey() {
75+
AddSplitHeadersFilter filter = AddSplitHeadersFilter.instance("ljsdfkjkldfjksldjflksdjflsdjflksd", false, true);
76+
HttpRequest req = Mockito.mock(HttpRequest.class);
77+
HttpContext ctx = Mockito.mock(HttpContext.class);
78+
79+
filter.process(req, null, ctx);
80+
Mockito.verify(req, Mockito.times(2)).addHeader(headerNameCaptor.capture(), headerValueCaptor.capture());
81+
82+
List<String> headerNames = headerNameCaptor.getAllValues();
83+
List<String> headerValues = headerValueCaptor.getAllValues();
84+
85+
assertEquals(2 ,headerNames.size());
86+
assertEquals(2, headerValues.size());
87+
assertThat(headerNames, contains(AddSplitHeadersFilter.CLIENT_VERSION,
88+
AddSplitHeadersFilter.CLIENT_KEY));
89+
assertThat(headerNames, not(contains(AddSplitHeadersFilter.CLIENT_MACHINE_NAME_HEADER,
90+
AddSplitHeadersFilter.CLIENT_MACHINE_IP_HEADER,
91+
AddSplitHeadersFilter.AUTHORIZATION_HEADER)));
92+
}
93+
94+
@Test
95+
public void testHeadersWithIpAndHostnameAndWithClientKey() {
96+
AddSplitHeadersFilter filter = AddSplitHeadersFilter.instance("ljsdfkjkldfjksldjflksdjflsdjflksd", true, true);
97+
HttpRequest req = Mockito.mock(HttpRequest.class);
98+
HttpContext ctx = Mockito.mock(HttpContext.class);
99+
100+
filter.process(req, null, ctx);
101+
Mockito.verify(req, Mockito.times(4)).addHeader(headerNameCaptor.capture(), headerValueCaptor.capture());
102+
103+
List<String> headerNames = headerNameCaptor.getAllValues();
104+
List<String> headerValues = headerValueCaptor.getAllValues();
105+
106+
assertEquals(4 ,headerNames.size());
107+
assertEquals(4, headerValues.size());
108+
assertThat(headerNames, contains(AddSplitHeadersFilter.CLIENT_VERSION,
109+
AddSplitHeadersFilter.CLIENT_MACHINE_NAME_HEADER,
110+
AddSplitHeadersFilter.CLIENT_MACHINE_IP_HEADER,
111+
AddSplitHeadersFilter.CLIENT_KEY));
112+
assertThat(headerNames, not(contains(AddSplitHeadersFilter.AUTHORIZATION_HEADER)));
113+
}
73114
}

0 commit comments

Comments
 (0)