Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
45 changes: 23 additions & 22 deletions src/protections/MessageIsMedia.ts
Original file line number Diff line number Diff line change
Expand Up @@ -41,29 +41,30 @@ export class MessageIsMedia extends Protection {
}
const msgtype = content["msgtype"] || "m.text";
const formattedBody = content["formatted_body"] || "";
const isMedia =
msgtype === "m.image" ||
msgtype === "m.video" ||
msgtype === "m.sticker" ||
formattedBody.toLowerCase().includes("<img");
if (isMedia) {
await mjolnir.managementRoomOutput.logMessage(
LogLevel.WARN,
"MessageIsMedia",
`Redacting event from ${event["sender"]} for posting an image/video. ${Permalinks.forEvent(roomId, event["event_id"], [new UserID(await mjolnir.client.getUserId()).domain])}`,
);
// Redact the event
if (!mjolnir.config.noop) {
await mjolnir.client.redactEvent(roomId, event["event_id"], "Images/videos are not permitted here");
} else {
await mjolnir.managementRoomOutput.logMessage(
LogLevel.WARN,
"MessageIsMedia",
`Tried to redact ${event["event_id"]} in ${roomId} but Mjolnir is running in no-op mode`,
roomId,
);
}
if (msgtype !== "m.image" && msgtype !== "m.video" && !formattedBody.toLowerCase().includes("<img")) {
Comment thread
Half-Shot marked this conversation as resolved.
// Not a media message.
return;
}
} else if (event["type"] !== "m.sticker") {
// Not a media event.
return;
}

await mjolnir.managementRoomOutput.logMessage(
LogLevel.WARN,
"MessageIsMedia",
`Redacting event from ${event["sender"]} for posting an image/video. ${Permalinks.forEvent(roomId, event["event_id"], [new UserID(await mjolnir.client.getUserId()).domain])}`,
);
// Redact the event
if (!mjolnir.config.noop) {
await mjolnir.client.redactEvent(roomId, event["event_id"], "Images/videos are not permitted here");
} else {
await mjolnir.managementRoomOutput.logMessage(
LogLevel.WARN,
"MessageIsMedia",
`Tried to redact ${event["event_id"]} in ${roomId} but Mjolnir is running in no-op mode`,
roomId,
);
}
}
}
6 changes: 6 additions & 0 deletions test/integration/messageIsMediaProtectionTest.ts
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,9 @@ describe("Test: Message is media", function () {
let content = { msgtype: "m.image", body: "test.jpeg", url: mxc };
let imageMessage = await spammer.sendMessage(testRoom, content);

let stickerContent = { body: "test.jpeg", info: {}, url: mxc };
let stickerEvent = await spammer.sendEvent(testRoom, "m.sticker", stickerContent);

let formatted_body = `<img src="${mxc}" />`;
let htmlContent = {
msgtype: "m.image",
Expand All @@ -85,6 +88,9 @@ describe("Test: Message is media", function () {
let processedImage = await client.getEvent(testRoom, imageMessage);
equal(Object.keys(processedImage.content).length, 0, "This event should have been redacted.");

let processedSticker = await client.getEvent(testRoom, stickerEvent);
equal(Object.keys(processedSticker.content).length, 0, "This sticker event should have been redacted.");

let processedHtml = await client.getEvent(testRoom, htmlMessage);
equal(Object.keys(processedHtml.content).length, 0, "This html image event should have been redacted");

Expand Down