Skip to content

Commit 6409f2a

Browse files
authored
Support http headers (#76)
* Support http headers * Remove ignored and excluded headers
1 parent 36b2979 commit 6409f2a

File tree

3 files changed

+46
-16
lines changed

3 files changed

+46
-16
lines changed

Diff for: src/main/java/com/exceptionless/exceptionlessclient/models/RequestInfo.java

+1
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ public class RequestInfo extends Model {
2525
@Builder.Default Map<String, String> cookies = new HashMap<>();
2626
Object postData;
2727
@Builder.Default Map<String, List<String>> queryString = new HashMap<>();
28+
@Builder.Default Map<String, List<String>> headers = new HashMap<>();
2829

2930
public Boolean isSecure() {
3031
return secure;

Diff for: src/main/java/com/exceptionless/exceptionlessclient/plugins/preconfigured/RequestInfoPlugin.java

+24-9
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,24 @@
1414
import java.net.URI;
1515
import java.net.UnknownHostException;
1616
import java.net.http.HttpRequest;
17+
import java.util.List;
1718
import java.util.Map;
1819
import java.util.Set;
1920
import java.util.stream.Collectors;
2021

2122
@Slf4j
2223
public class RequestInfoPlugin implements EventPluginIF {
2324
private static final Integer DEFAULT_PRIORITY = 70;
25+
private static final Set<String> IGNORED_HEADERS =
26+
Set.of(
27+
"Authorization",
28+
"Cookie",
29+
"Host",
30+
"Method",
31+
"Path",
32+
"Proxy-Authorization",
33+
"Referer",
34+
"User-Agent");
2435

2536
@Builder
2637
public RequestInfoPlugin() {}
@@ -31,8 +42,7 @@ public int getPriority() {
3142
}
3243

3344
@Override
34-
public void run(
35-
EventPluginContext eventPluginContext, Configuration configuration) {
45+
public void run(EventPluginContext eventPluginContext, Configuration configuration) {
3646
Event event = eventPluginContext.getEvent();
3747
if (event.getRequestInfo().isPresent()) {
3848
return;
@@ -47,10 +57,8 @@ public void run(
4757
RequestInfoGetArgs.builder()
4858
.exclusions(configuration.getDataExclusions())
4959
.includeCookies(configuration.getPrivateInformationInclusions().getCookies())
50-
.includeIpAddress(
51-
configuration.getPrivateInformationInclusions().getIpAddress())
52-
.includePostData(
53-
configuration.getPrivateInformationInclusions().getPostData())
60+
.includeIpAddress(configuration.getPrivateInformationInclusions().getIpAddress())
61+
.includePostData(configuration.getPrivateInformationInclusions().getPostData())
5462
.includeQueryString(
5563
configuration.getPrivateInformationInclusions().getQueryString())
5664
.build());
@@ -73,7 +81,8 @@ private RequestInfo getRequestInfo(HttpRequest request, RequestInfoGetArgs args)
7381
.httpMethod(request.method())
7482
.host(request.uri().getHost())
7583
.path(request.uri().getPath())
76-
.port(request.uri().getPort());
84+
.port(request.uri().getPort())
85+
.headers(getHeaders(request, args));
7786

7887
if (args.isIncludeIpAddress()) {
7988
try {
@@ -94,11 +103,17 @@ private RequestInfo getRequestInfo(HttpRequest request, RequestInfoGetArgs args)
94103
filterExclusions(Utils.getQueryParams(request.uri()), args.getExclusions()));
95104
}
96105

97-
// todo get post data from request.
98-
99106
return builder.build();
100107
}
101108

109+
private Map<String, List<String>> getHeaders(HttpRequest request, RequestInfoGetArgs args) {
110+
Map<String, List<String>> headers =
111+
filterExclusions(request.headers().map(), args.getExclusions());
112+
return headers.entrySet().stream()
113+
.filter(entry -> !IGNORED_HEADERS.contains(entry.getKey()))
114+
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
115+
}
116+
102117
private <X> Map<String, X> filterExclusions(Map<String, X> map, Set<String> exclusions) {
103118
return map.entrySet().stream()
104119
.filter(

Diff for: src/test/java/com/exceptionless/exceptionlessclient/plugins/preconfigured/RequestInfoPluginTest.java

+21-7
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,12 @@ public void itShouldCancelEventIfUserAgentIsABotPattern() {
9191
@Test
9292
public void itShouldAddRequestInfoToEvent() {
9393
HttpRequest httpRequest =
94-
HttpRequest.newBuilder().uri(URI.create("http://localhost:5000/test-path")).GET().build();
94+
HttpRequest.newBuilder()
95+
.uri(URI.create("http://localhost:5000/test-path"))
96+
.header("test-header", "test-header-value")
97+
.header("test-header", "test-header-value-2")
98+
.GET()
99+
.build();
95100
context =
96101
EventPluginContext.builder()
97102
.event(Event.builder().build())
@@ -108,6 +113,8 @@ public void itShouldAddRequestInfoToEvent() {
108113
assertThat(requestInfo.getHost()).isEqualTo("localhost");
109114
assertThat(requestInfo.getPath()).isEqualTo("/test-path");
110115
assertThat(requestInfo.getPort()).isEqualTo(5000);
116+
assertThat(requestInfo.getHeaders())
117+
.isEqualTo(Map.of("test-header", List.of("test-header-value", "test-header-value-2")));
111118
}
112119

113120
@Test
@@ -163,8 +170,7 @@ public void itCanGetIpAddressCookiesAndQueryStringFromAHttpRequest() {
163170
.context(PluginContext.builder().request(httpRequest).build())
164171
.build();
165172

166-
PrivateInformationInclusions inclusions =
167-
configuration.getPrivateInformationInclusions();
173+
PrivateInformationInclusions inclusions = configuration.getPrivateInformationInclusions();
168174
inclusions.setIpAddress(true);
169175
inclusions.setCookies(true);
170176
inclusions.setQueryString(true);
@@ -187,7 +193,15 @@ public void itCanExcludeData() {
187193
.uri(
188194
URI.create(
189195
"https://localhost:5000/test-path?query-param-key=query-param-value&exclude-query-param=exclude-value"))
190-
.header("Cookie", "cookie1=value1;cookie2=value2;exclude-cookie=exclude-value")
196+
.headers(
197+
"Cookie",
198+
"cookie1=value1;cookie2=value2;exclude-cookie=exclude-value",
199+
"test-header",
200+
"test-value",
201+
"Authorization",
202+
"test-auth",
203+
"exclude-header",
204+
"exclude-value")
191205
.GET()
192206
.build();
193207

@@ -196,9 +210,8 @@ public void itCanExcludeData() {
196210
.event(Event.builder().build())
197211
.context(PluginContext.builder().request(httpRequest).build())
198212
.build();
199-
configuration.addDataExclusions("exclude-query-param", "exclude-cookie");
200-
PrivateInformationInclusions inclusions =
201-
configuration.getPrivateInformationInclusions();
213+
configuration.addDataExclusions("exclude-query-param", "exclude-cookie", "exclude-header");
214+
PrivateInformationInclusions inclusions = configuration.getPrivateInformationInclusions();
202215
inclusions.setIpAddress(true);
203216
inclusions.setCookies(true);
204217
inclusions.setQueryString(true);
@@ -212,5 +225,6 @@ public void itCanExcludeData() {
212225
.isEqualTo(Map.of("cookie1", "value1", "cookie2", "value2"));
213226
assertThat(requestInfo.getQueryString())
214227
.isEqualTo(Map.of("query-param-key", List.of("query-param-value")));
228+
assertThat(requestInfo.getHeaders()).isEqualTo(Map.of("test-header", List.of("test-value")));
215229
}
216230
}

0 commit comments

Comments
 (0)