Skip to content

Commit 98e54b4

Browse files
authored
Detect attachment scam regardless of case (jpg vs JPG) (#1319)
1 parent 726edf2 commit 98e54b4

File tree

2 files changed

+21
-1
lines changed

2 files changed

+21
-1
lines changed

application/src/main/java/org/togetherjava/tjbot/features/moderation/scam/Attachment.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import net.dv8tion.jda.api.entities.Message;
44

5+
import java.util.Locale;
56
import java.util.Optional;
67
import java.util.Set;
78

@@ -10,7 +11,9 @@ record Attachment(String fileName) {
1011
Set.of("jpg", "jpeg", "png", "gif", "webp", "tiff", "svg", "apng");
1112

1213
boolean isImage() {
13-
return getFileExtension().map(IMAGE_EXTENSIONS::contains).orElse(false);
14+
return getFileExtension().map(ext -> ext.toLowerCase(Locale.US))
15+
.map(IMAGE_EXTENSIONS::contains)
16+
.orElse(false);
1417
}
1518

1619
private Optional<String> getFileExtension() {

application/src/test/java/org/togetherjava/tjbot/features/moderation/scam/ScamDetectorTest.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -210,6 +210,23 @@ void ignoresHarmlessAttachments() {
210210
assertFalse(isScamResult);
211211
}
212212

213+
@Test
214+
@DisplayName("Messages containing suspicious attachments are flagged even if extensions are upper-case (jpg vs JPG)")
215+
void detectsSuspiciousAttachmentsRegardlessOfCase() {
216+
// GIVEN an empty message containing suspicious attachments with mixed case for extensions
217+
String content = "";
218+
List<Message.Attachment> attachments =
219+
List.of(createImageAttachmentMock("1.JPG"), createImageAttachmentMock("2.JPG"),
220+
createImageAttachmentMock("3.jpg"), createImageAttachmentMock("4.jpg"));
221+
Message message = createMessageMock(content, attachments);
222+
223+
// WHEN analyzing it
224+
boolean isScamResult = scamDetector.isScam(message);
225+
226+
// THEN flags it as scam
227+
assertTrue(isScamResult);
228+
}
229+
213230
@Test
214231
@DisplayName("Suspicious messages send by trusted users are not flagged")
215232
void ignoreTrustedUser() {

0 commit comments

Comments
 (0)