diff --git a/core/src/main/java/dev/faststats/ErrorHelper.java b/core/src/main/java/dev/faststats/ErrorHelper.java index d00ca25d..8277e67a 100644 --- a/core/src/main/java/dev/faststats/ErrorHelper.java +++ b/core/src/main/java/dev/faststats/ErrorHelper.java @@ -235,7 +235,7 @@ private static List> defaultAnonymizationEntries() { Map.entry(ipv4Pattern(), "[IP hidden]"), Map.entry(ipv6Pattern(), "[IP hidden]"), Map.entry(userHomePathPattern(), "$1$2$3[username hidden]"), - Map.entry(discordWebhookPattern(), "$1[token hidden]"), + Map.entry(discordWebhookPattern(), "$1[id hidden]/[token hidden]"), Map.entry(jdbcUrlPattern(), "$1[password hidden]$2") )); usernamePattern().ifPresent(pattern -> entries.add(Map.entry(pattern, "[username hidden]"))); @@ -243,7 +243,7 @@ private static List> defaultAnonymizationEntries() { } private static Pattern discordWebhookPattern() { - return Pattern.compile("(https://discord\\.com/api/webhooks/\\d+/)[\\w-]+"); + return Pattern.compile("(https://(?:discord\\.com|canary\\.discord\\.com|ptb\\.discord\\.com|discordapp\\.com)/api/(?:v\\d+/)?webhooks/)\\d+/[\\w-]+(?:\\?\\S*)?"); } private static Pattern ipv4Pattern() { diff --git a/core/src/test/java/dev/faststats/AnonymizationTest.java b/core/src/test/java/dev/faststats/AnonymizationTest.java index 05b4d0e3..59729120 100644 --- a/core/src/test/java/dev/faststats/AnonymizationTest.java +++ b/core/src/test/java/dev/faststats/AnonymizationTest.java @@ -2,6 +2,8 @@ import com.google.gson.JsonObject; import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; import java.util.regex.Pattern; @@ -64,10 +66,18 @@ public void usernameAnonymizationIsCaseInsensitive() { assertEquals("Error for [username hidden]", getErrorMessage()); } - @Test - public void discordWebhookAnonymization() { - tracker.trackError("Webhook failed: https://discord.com/api/webhooks/1234567890987654321/aAaAaAaa0AAaAAaaaAAAAa_0AAAAAAAaaaAaaAaaAAAA0aA00AAA0AAA0aAAaA0a0a0A"); - assertEquals("Webhook failed: https://discord.com/api/webhooks/1234567890987654321/[token hidden]", getErrorMessage()); + @ParameterizedTest + @ValueSource(strings = { + "https://discord.com/api/webhooks", + "https://discord.com/api/v10/webhooks", + "https://canary.discord.com/api/webhooks", + "https://ptb.discord.com/api/webhooks", + "https://discordapp.com/api/webhooks" + }) + public void discordWebhookAnonymization(final String webhookBaseUrl) { + final var webhookUrl = webhookBaseUrl + "/1234567890987654321/aAaAaAaa0AAaAAaaaAAAAa_0AAAAAAAaaaAaaAaaAAAA0aA00AAA0AAA0aAAaA0a0a0A"; + tracker.trackError("Webhook failed: " + webhookUrl + "?wait=true"); + assertEquals("Webhook failed: " + webhookBaseUrl + "/[id hidden]/[token hidden]", getErrorMessage()); } @Test