Skip to content

Commit 0f19607

Browse files
Merge pull request #227 from AikidoSec/add-route-detection-for-array
2 parents eca2ddd + c5f54fb commit 0f19607

2 files changed

Lines changed: 13 additions & 2 deletions

File tree

agent_api/src/main/java/dev/aikido/agent_api/helpers/url/BuildRouteFromUrl.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ private BuildRouteFromUrl() {}
2020
"^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$");
2121
private static final Pattern HASH_REGEX = Pattern.compile("^(?:[a-f0-9]{32}|[a-f0-9]{40}|[a-f0-9]{64}|[a-f0-9]{128})$", Pattern.CASE_INSENSITIVE);
2222
private static final int[] HASH_LENGTHS = {32, 40, 64, 128};
23+
private static final Pattern NUMBER_ARRAY_REGEX = Pattern.compile("^\\d+(?:,\\d+)*$");
24+
2325

2426
public static String buildRouteFromUrl(String url) {
2527
String path = tryParseUrlPath(url);
@@ -57,6 +59,8 @@ private static String replaceUrlSegmentWithParam(String segment) {
5759

5860
if (startsWithNumber && NUMBER_REGEX.matcher(segment).matches()) {
5961
return ":number";
62+
} else if (segment.contains(",") && NUMBER_ARRAY_REGEX.matcher(segment).matches()) {
63+
return ":array(number)";
6064
} else if (segment.length() == 36 && UUID_REGEX.matcher(segment).matches()) {
6165
return ":uuid";
6266
} else if (segment.length() == 26 && ULID_REGEX.matcher(segment).matches()) {

agent_api/src/test/java/helpers/BuildRouteFromUrlTest.java

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,15 @@ void testReplaceDates() {
4343
}
4444

4545
@Test
46-
void testIgnoreCommaNumbers() {
47-
assertEquals("/posts/3,000", buildRouteFromUrl("/posts/3,000"));
46+
void testMatchesArrays() {
47+
assertEquals("/posts/:array(number)", buildRouteFromUrl("/posts/3,000"));
48+
assertEquals("/posts/:array(number)", buildRouteFromUrl("/posts/0,1,2,3,4"));
49+
assertEquals("/posts/,1,2,3,4", buildRouteFromUrl("/posts/,1,2,3,4"));
50+
assertEquals("/posts/0,1,2,3,4,", buildRouteFromUrl("/posts/0,1,2,3,4,"));
51+
assertEquals("/posts/,1,2,3,4,", buildRouteFromUrl("/posts/,1,2,3,4,"));
52+
assertEquals("/posts/,", buildRouteFromUrl("/posts/,"));
53+
assertEquals("/posts/:array(number)", buildRouteFromUrl("/posts/1,2"));
54+
assertEquals("/posts/:array(number)", buildRouteFromUrl("/posts/200000,2,20000"));
4855
}
4956

5057
@Test

0 commit comments

Comments
 (0)