From c609c65ca02c242e9956033ab26d2ba7fbbf1813 Mon Sep 17 00:00:00 2001 From: Prashant Date: Sat, 18 Nov 2023 19:02:44 +0000 Subject: [PATCH 1/2] Support http headers --- .../exceptionlessclient/models/RequestInfo.java | 1 + .../plugins/preconfigured/RequestInfoPlugin.java | 14 +++++--------- .../preconfigured/RequestInfoPluginTest.java | 15 ++++++++++----- 3 files changed, 16 insertions(+), 14 deletions(-) diff --git a/src/main/java/com/exceptionless/exceptionlessclient/models/RequestInfo.java b/src/main/java/com/exceptionless/exceptionlessclient/models/RequestInfo.java index 5f72b8d..a372036 100644 --- a/src/main/java/com/exceptionless/exceptionlessclient/models/RequestInfo.java +++ b/src/main/java/com/exceptionless/exceptionlessclient/models/RequestInfo.java @@ -25,6 +25,7 @@ public class RequestInfo extends Model { @Builder.Default Map cookies = new HashMap<>(); Object postData; @Builder.Default Map> queryString = new HashMap<>(); + @Builder.Default Map> headers = new HashMap<>(); public Boolean isSecure() { return secure; diff --git a/src/main/java/com/exceptionless/exceptionlessclient/plugins/preconfigured/RequestInfoPlugin.java b/src/main/java/com/exceptionless/exceptionlessclient/plugins/preconfigured/RequestInfoPlugin.java index d7aa033..b00620e 100644 --- a/src/main/java/com/exceptionless/exceptionlessclient/plugins/preconfigured/RequestInfoPlugin.java +++ b/src/main/java/com/exceptionless/exceptionlessclient/plugins/preconfigured/RequestInfoPlugin.java @@ -31,8 +31,7 @@ public int getPriority() { } @Override - public void run( - EventPluginContext eventPluginContext, Configuration configuration) { + public void run(EventPluginContext eventPluginContext, Configuration configuration) { Event event = eventPluginContext.getEvent(); if (event.getRequestInfo().isPresent()) { return; @@ -47,10 +46,8 @@ public void run( RequestInfoGetArgs.builder() .exclusions(configuration.getDataExclusions()) .includeCookies(configuration.getPrivateInformationInclusions().getCookies()) - .includeIpAddress( - configuration.getPrivateInformationInclusions().getIpAddress()) - .includePostData( - configuration.getPrivateInformationInclusions().getPostData()) + .includeIpAddress(configuration.getPrivateInformationInclusions().getIpAddress()) + .includePostData(configuration.getPrivateInformationInclusions().getPostData()) .includeQueryString( configuration.getPrivateInformationInclusions().getQueryString()) .build()); @@ -73,7 +70,8 @@ private RequestInfo getRequestInfo(HttpRequest request, RequestInfoGetArgs args) .httpMethod(request.method()) .host(request.uri().getHost()) .path(request.uri().getPath()) - .port(request.uri().getPort()); + .port(request.uri().getPort()) + .headers(request.headers().map()); if (args.isIncludeIpAddress()) { try { @@ -94,8 +92,6 @@ private RequestInfo getRequestInfo(HttpRequest request, RequestInfoGetArgs args) filterExclusions(Utils.getQueryParams(request.uri()), args.getExclusions())); } - // todo get post data from request. - return builder.build(); } diff --git a/src/test/java/com/exceptionless/exceptionlessclient/plugins/preconfigured/RequestInfoPluginTest.java b/src/test/java/com/exceptionless/exceptionlessclient/plugins/preconfigured/RequestInfoPluginTest.java index e766d0b..7b7fd6d 100644 --- a/src/test/java/com/exceptionless/exceptionlessclient/plugins/preconfigured/RequestInfoPluginTest.java +++ b/src/test/java/com/exceptionless/exceptionlessclient/plugins/preconfigured/RequestInfoPluginTest.java @@ -91,7 +91,12 @@ public void itShouldCancelEventIfUserAgentIsABotPattern() { @Test public void itShouldAddRequestInfoToEvent() { HttpRequest httpRequest = - HttpRequest.newBuilder().uri(URI.create("http://localhost:5000/test-path")).GET().build(); + HttpRequest.newBuilder() + .uri(URI.create("http://localhost:5000/test-path")) + .header("test-header", "test-header-value") + .header("test-header", "test-header-value-2") + .GET() + .build(); context = EventPluginContext.builder() .event(Event.builder().build()) @@ -108,6 +113,8 @@ public void itShouldAddRequestInfoToEvent() { assertThat(requestInfo.getHost()).isEqualTo("localhost"); assertThat(requestInfo.getPath()).isEqualTo("/test-path"); assertThat(requestInfo.getPort()).isEqualTo(5000); + assertThat(requestInfo.getHeaders()) + .isEqualTo(Map.of("test-header", List.of("test-header-value", "test-header-value-2"))); } @Test @@ -163,8 +170,7 @@ public void itCanGetIpAddressCookiesAndQueryStringFromAHttpRequest() { .context(PluginContext.builder().request(httpRequest).build()) .build(); - PrivateInformationInclusions inclusions = - configuration.getPrivateInformationInclusions(); + PrivateInformationInclusions inclusions = configuration.getPrivateInformationInclusions(); inclusions.setIpAddress(true); inclusions.setCookies(true); inclusions.setQueryString(true); @@ -197,8 +203,7 @@ public void itCanExcludeData() { .context(PluginContext.builder().request(httpRequest).build()) .build(); configuration.addDataExclusions("exclude-query-param", "exclude-cookie"); - PrivateInformationInclusions inclusions = - configuration.getPrivateInformationInclusions(); + PrivateInformationInclusions inclusions = configuration.getPrivateInformationInclusions(); inclusions.setIpAddress(true); inclusions.setCookies(true); inclusions.setQueryString(true); From c8f87c17c7f9678bd8c7c838c24939d19b99687e Mon Sep 17 00:00:00 2001 From: Prashant Date: Sat, 22 Jun 2024 15:17:06 +0100 Subject: [PATCH 2/2] Remove ignored and excluded headers --- .../preconfigured/RequestInfoPlugin.java | 21 ++++++++++++++++++- .../preconfigured/RequestInfoPluginTest.java | 13 ++++++++++-- 2 files changed, 31 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/exceptionless/exceptionlessclient/plugins/preconfigured/RequestInfoPlugin.java b/src/main/java/com/exceptionless/exceptionlessclient/plugins/preconfigured/RequestInfoPlugin.java index b00620e..ca5d960 100644 --- a/src/main/java/com/exceptionless/exceptionlessclient/plugins/preconfigured/RequestInfoPlugin.java +++ b/src/main/java/com/exceptionless/exceptionlessclient/plugins/preconfigured/RequestInfoPlugin.java @@ -14,6 +14,7 @@ import java.net.URI; import java.net.UnknownHostException; import java.net.http.HttpRequest; +import java.util.List; import java.util.Map; import java.util.Set; import java.util.stream.Collectors; @@ -21,6 +22,16 @@ @Slf4j public class RequestInfoPlugin implements EventPluginIF { private static final Integer DEFAULT_PRIORITY = 70; + private static final Set IGNORED_HEADERS = + Set.of( + "Authorization", + "Cookie", + "Host", + "Method", + "Path", + "Proxy-Authorization", + "Referer", + "User-Agent"); @Builder public RequestInfoPlugin() {} @@ -71,7 +82,7 @@ private RequestInfo getRequestInfo(HttpRequest request, RequestInfoGetArgs args) .host(request.uri().getHost()) .path(request.uri().getPath()) .port(request.uri().getPort()) - .headers(request.headers().map()); + .headers(getHeaders(request, args)); if (args.isIncludeIpAddress()) { try { @@ -95,6 +106,14 @@ private RequestInfo getRequestInfo(HttpRequest request, RequestInfoGetArgs args) return builder.build(); } + private Map> getHeaders(HttpRequest request, RequestInfoGetArgs args) { + Map> headers = + filterExclusions(request.headers().map(), args.getExclusions()); + return headers.entrySet().stream() + .filter(entry -> !IGNORED_HEADERS.contains(entry.getKey())) + .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); + } + private Map filterExclusions(Map map, Set exclusions) { return map.entrySet().stream() .filter( diff --git a/src/test/java/com/exceptionless/exceptionlessclient/plugins/preconfigured/RequestInfoPluginTest.java b/src/test/java/com/exceptionless/exceptionlessclient/plugins/preconfigured/RequestInfoPluginTest.java index 7b7fd6d..be1b6b5 100644 --- a/src/test/java/com/exceptionless/exceptionlessclient/plugins/preconfigured/RequestInfoPluginTest.java +++ b/src/test/java/com/exceptionless/exceptionlessclient/plugins/preconfigured/RequestInfoPluginTest.java @@ -193,7 +193,15 @@ public void itCanExcludeData() { .uri( URI.create( "https://localhost:5000/test-path?query-param-key=query-param-value&exclude-query-param=exclude-value")) - .header("Cookie", "cookie1=value1;cookie2=value2;exclude-cookie=exclude-value") + .headers( + "Cookie", + "cookie1=value1;cookie2=value2;exclude-cookie=exclude-value", + "test-header", + "test-value", + "Authorization", + "test-auth", + "exclude-header", + "exclude-value") .GET() .build(); @@ -202,7 +210,7 @@ public void itCanExcludeData() { .event(Event.builder().build()) .context(PluginContext.builder().request(httpRequest).build()) .build(); - configuration.addDataExclusions("exclude-query-param", "exclude-cookie"); + configuration.addDataExclusions("exclude-query-param", "exclude-cookie", "exclude-header"); PrivateInformationInclusions inclusions = configuration.getPrivateInformationInclusions(); inclusions.setIpAddress(true); inclusions.setCookies(true); @@ -217,5 +225,6 @@ public void itCanExcludeData() { .isEqualTo(Map.of("cookie1", "value1", "cookie2", "value2")); assertThat(requestInfo.getQueryString()) .isEqualTo(Map.of("query-param-key", List.of("query-param-value"))); + assertThat(requestInfo.getHeaders()).isEqualTo(Map.of("test-header", List.of("test-value"))); } }