From 78599eb545000381de2770956a01b40c6afb3206 Mon Sep 17 00:00:00 2001 From: sophia chen Date: Fri, 3 Jan 2025 17:29:10 +1100 Subject: [PATCH] Enabled path normalisation filtering for paths with params --- .../com/uid2/shared/util/HTTPPathMetricFilter.java | 11 ++++++++++- .../uid2/shared/util/HTTPPathMetricFilterTest.java | 6 +++++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/uid2/shared/util/HTTPPathMetricFilter.java b/src/main/java/com/uid2/shared/util/HTTPPathMetricFilter.java index 4e403de8..6c8f645d 100644 --- a/src/main/java/com/uid2/shared/util/HTTPPathMetricFilter.java +++ b/src/main/java/com/uid2/shared/util/HTTPPathMetricFilter.java @@ -11,7 +11,16 @@ public static String filterPath(String actualPath, Set pathSet) { normalized = normalized.substring(0, normalized.length() - 1); } normalized = normalized.toLowerCase(); - return pathSet == null || pathSet.isEmpty() || pathSet.contains(normalized) ? normalized : "/unknown"; + + if (pathSet == null || pathSet.isEmpty()) { return normalized; } + + for (String path : pathSet) { + String pathRegex = path.replaceAll(":[^/]+", "[^/]+"); + if (normalized.matches(pathRegex)) { + return path; + } + } + return "/unknown"; } catch (IllegalArgumentException e) { return "/parsing_error"; } diff --git a/src/test/java/com/uid2/shared/util/HTTPPathMetricFilterTest.java b/src/test/java/com/uid2/shared/util/HTTPPathMetricFilterTest.java index 85ea092b..fac26482 100644 --- a/src/test/java/com/uid2/shared/util/HTTPPathMetricFilterTest.java +++ b/src/test/java/com/uid2/shared/util/HTTPPathMetricFilterTest.java @@ -9,7 +9,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals; public class HTTPPathMetricFilterTest { - final Set pathSet = Set.of("/v1/identity/map", "/token/refresh"); + final Set pathSet = Set.of("/v1/identity/map", "/token/refresh", "/list", "/list/:siteId/:keyId"); @ParameterizedTest @ValueSource(strings = { @@ -18,6 +18,7 @@ public class HTTPPathMetricFilterTest { "/unknown-path", "../", "/v1/identity/map%55", + "/list/123", }) void testPathFiltering_InvalidPaths_Unknown(String actualPath) { String filteredPath = HTTPPathMetricFilter.filterPath(actualPath, pathSet); @@ -28,6 +29,7 @@ void testPathFiltering_InvalidPaths_Unknown(String actualPath) { @ValueSource(strings = { "v1/identity/map?id=bad-escape-code%2", "token/refresh?refresh_token=SOME_TOKEN<%=7485*4353%>", + "list/12%4/5435" }) void testPathFiltering_InvalidPaths_ParsingError(String actualPath) { String filteredPath = HTTPPathMetricFilter.filterPath(actualPath, pathSet); @@ -44,6 +46,8 @@ void testPathFiltering_InvalidPaths_ParsingError(String actualPath) { "/v1/identity/new/path/../../map, /v1/identity/map", "token/refresh?refresh_token=123%20%23, /token/refresh", "v1/identity/map?identity/../map/, /v1/identity/map", + "/list, /list", + "/list/123/key123, /list/:siteId/:keyId" }) void testPathFiltering_ValidPaths_KnownEndpoints(String actualPath, String expectedFilteredPath) {