Skip to content

Commit 72f6e7a

Browse files
committed
Add support for Object IDs and ULIDs in route building
1 parent d57570e commit 72f6e7a

2 files changed

Lines changed: 19 additions & 2 deletions

File tree

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

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ private BuildRouteFromUrl() {}
1212
private static final Pattern UUID_REGEX = Pattern.compile(
1313
"[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff",
1414
Pattern.CASE_INSENSITIVE);
15+
private static final Pattern OBJECT_ID_REGEX = Pattern.compile("^[0-9a-f]{24}$", Pattern.CASE_INSENSITIVE);
16+
private static final Pattern ULID_REGEX = Pattern.compile("^[0-9A-HJKMNP-TV-Z]{26}$", Pattern.CASE_INSENSITIVE);
1517
private static final Pattern NUMBER_REGEX = Pattern.compile("^\\d+$");
1618
private static final Pattern DATE_REGEX = Pattern.compile("^\\d{4}-\\d{2}-\\d{2}|\\d{2}-\\d{2}-\\d{4}$");
1719
private static final Pattern EMAIL_REGEX = Pattern.compile(
@@ -57,6 +59,10 @@ private static String replaceUrlSegmentWithParam(String segment) {
5759
return ":number";
5860
} else if (segment.length() == 36 && UUID_REGEX.matcher(segment).matches()) {
5961
return ":uuid";
62+
} else if (segment.length() == 26 && ULID_REGEX.matcher(segment).matches()) {
63+
return ":ulid";
64+
} else if (segment.length() == 24 && OBJECT_ID_REGEX.matcher(segment).matches()) {
65+
return ":objectId";
6066
} else if (startsWithNumber && DATE_REGEX.matcher(segment).matches()) {
6167
return ":date";
6268
} else if (segment.contains("@") && EMAIL_REGEX.matcher(segment).matches()) {
@@ -82,4 +88,4 @@ private static boolean isHash(String segment) {
8288
}
8389
return false;
8490
}
85-
}
91+
}

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

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,4 +126,15 @@ public void testReplaceHashes() {
126126
public void testReplaceSecrets() {
127127
assertEquals("/confirm/:secret", buildRouteFromUrl("/confirm/CnJ4DunhYfv2db6T1FRfciRBHtlNKOYrjoz"));
128128
}
129-
}
129+
130+
@Test
131+
public void testReplacesBsonObjectIds() {
132+
assertEquals("/posts/:objectId", buildRouteFromUrl("/posts/66ec29159d00113616fc7184"));
133+
}
134+
135+
@Test
136+
public void testReplacesUlidStrings() {
137+
assertEquals("/posts/:ulid", buildRouteFromUrl("/posts/01ARZ3NDEKTSV4RRFFQ69G5FAV"));
138+
assertEquals("/posts/:ulid", buildRouteFromUrl("/posts/01arz3ndektsv4rrffq69g5fav"));
139+
}
140+
}

0 commit comments

Comments
 (0)