From 4f6fbbd2a44a788e843370cbc691d6a778f86b9d Mon Sep 17 00:00:00 2001 From: Zabuzard Date: Thu, 4 Sep 2025 14:41:12 +0200 Subject: [PATCH] detect attachment scam regardless of case (jpg vs JPG) --- .../features/moderation/scam/Attachment.java | 5 ++++- .../moderation/scam/ScamDetectorTest.java | 17 +++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/application/src/main/java/org/togetherjava/tjbot/features/moderation/scam/Attachment.java b/application/src/main/java/org/togetherjava/tjbot/features/moderation/scam/Attachment.java index 4a7c8ad528..b5fc89644f 100644 --- a/application/src/main/java/org/togetherjava/tjbot/features/moderation/scam/Attachment.java +++ b/application/src/main/java/org/togetherjava/tjbot/features/moderation/scam/Attachment.java @@ -2,6 +2,7 @@ import net.dv8tion.jda.api.entities.Message; +import java.util.Locale; import java.util.Optional; import java.util.Set; @@ -10,7 +11,9 @@ record Attachment(String fileName) { Set.of("jpg", "jpeg", "png", "gif", "webp", "tiff", "svg", "apng"); boolean isImage() { - return getFileExtension().map(IMAGE_EXTENSIONS::contains).orElse(false); + return getFileExtension().map(ext -> ext.toLowerCase(Locale.US)) + .map(IMAGE_EXTENSIONS::contains) + .orElse(false); } private Optional getFileExtension() { diff --git a/application/src/test/java/org/togetherjava/tjbot/features/moderation/scam/ScamDetectorTest.java b/application/src/test/java/org/togetherjava/tjbot/features/moderation/scam/ScamDetectorTest.java index 4cf982b3f4..52c9b3dffe 100644 --- a/application/src/test/java/org/togetherjava/tjbot/features/moderation/scam/ScamDetectorTest.java +++ b/application/src/test/java/org/togetherjava/tjbot/features/moderation/scam/ScamDetectorTest.java @@ -210,6 +210,23 @@ void ignoresHarmlessAttachments() { assertFalse(isScamResult); } + @Test + @DisplayName("Messages containing suspicious attachments are flagged even if extensions are upper-case (jpg vs JPG)") + void detectsSuspiciousAttachmentsRegardlessOfCase() { + // GIVEN an empty message containing suspicious attachments with mixed case for extensions + String content = ""; + List attachments = + List.of(createImageAttachmentMock("1.JPG"), createImageAttachmentMock("2.JPG"), + createImageAttachmentMock("3.jpg"), createImageAttachmentMock("4.jpg")); + Message message = createMessageMock(content, attachments); + + // WHEN analyzing it + boolean isScamResult = scamDetector.isScam(message); + + // THEN flags it as scam + assertTrue(isScamResult); + } + @Test @DisplayName("Suspicious messages send by trusted users are not flagged") void ignoreTrustedUser() {