X-Git-Url: https://git.nmode.ca/signal-cli/blobdiff_plain/2852b2ea6dc26ba062ac22dd526bf6793b38253c..HEAD:/src/main/java/org/asamk/signal/logging/Scrubber.java diff --git a/src/main/java/org/asamk/signal/logging/Scrubber.java b/src/main/java/org/asamk/signal/logging/Scrubber.java index c1d66893..9d796a64 100644 --- a/src/main/java/org/asamk/signal/logging/Scrubber.java +++ b/src/main/java/org/asamk/signal/logging/Scrubber.java @@ -37,9 +37,17 @@ public final class Scrubber { * Supposedly, the shortest international phone numbers in use contain seven digits. * Handles URL encoded +, %2B */ - private static final Pattern E164_PATTERN = Pattern.compile("(\\+|%2B|/org/asamk/Signal/_)(\\d{5,13})(\\d{2})"); + private static final Pattern E164_PATTERN = Pattern.compile("(\\+|%2B|_)(\\d{5,13})(\\d{2})"); private static final String E164_CENSOR = "*************"; + private static final Pattern GROUP_V1_ID_PATTERN = Pattern.compile( + "(/org/asamk/Signal/.*Groups/[a-zA-Z0-9/_+-]{2}|[a-zA-Z0-9/_+-]{2})([a-zA-Z0-9/_+-]{18})([a-zA-Z0-9/_+-]{2})(==|__)"); + private static final String GROUP_V1_ID_CENSOR = "*".repeat(18); + + private static final Pattern GROUP_V2_ID_PATTERN = Pattern.compile( + "(/org/asamk/Signal/.*Groups/[a-zA-Z0-9/_+-]{2}|[a-zA-Z0-9/_+-]{2})([a-zA-Z0-9/_+-]{39})([a-zA-Z0-9/_+-]{2})([=_])"); + private static final String GROUP_V2_ID_CENSOR = "*".repeat(39); + /** * The second group will be censored. */ @@ -172,9 +180,11 @@ public final class Scrubber { public static CharSequence scrub(CharSequence in) { + in = scrubUuids(in); in = scrubE164(in); in = scrubEmail(in); - in = scrubUuids(in); + in = scrubGroupV2Ids(in); + in = scrubGroupV1Ids(in); in = scrubDomains(in); in = scrubIpv4(in); @@ -189,6 +199,22 @@ public final class Scrubber { .append(matcher.group(3))); } + private static CharSequence scrubGroupV1Ids(CharSequence in) { + return scrub(in, + GROUP_V1_ID_PATTERN, + (matcher, output) -> output.append(matcher.group(1)) + .append(GROUP_V1_ID_CENSOR, 0, matcher.group(2).length()) + .append(matcher.group(3))); + } + + private static CharSequence scrubGroupV2Ids(CharSequence in) { + return scrub(in, + GROUP_V2_ID_PATTERN, + (matcher, output) -> output.append(matcher.group(1)) + .append(GROUP_V2_ID_CENSOR, 0, matcher.group(2).length()) + .append(matcher.group(3))); + } + private static CharSequence scrubEmail(CharSequence in) { return scrub(in, CRUDE_EMAIL_PATTERN, @@ -223,9 +249,7 @@ public final class Scrubber { return scrub(in, IPV4_PATTERN, (matcher, output) -> output.append(IPV4_CENSOR)); } - private static CharSequence scrub( - CharSequence in, Pattern pattern, ProcessMatch processMatch - ) { + private static CharSequence scrub(CharSequence in, Pattern pattern, ProcessMatch processMatch) { final StringBuilder output = new StringBuilder(in.length()); final Matcher matcher = pattern.matcher(in);