Skip to content

Commit

Permalink
Enhance media protections (#516)
Browse files Browse the repository at this point in the history
  • Loading branch information
H-Shay authored Jul 29, 2024
1 parent 77357e4 commit f526b97
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 1 deletion.
6 changes: 5 additions & 1 deletion src/protections/MessageIsMedia.ts
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,11 @@ export class MessageIsMedia extends Protection {

public async handleEvent(mjolnir: Mjolnir, roomId: string, event: any): Promise<any> {
if (event['type'] === 'm.room.message') {
const content = event['content'] || {};
let content = event['content'] || {};
const relation = content["m.relates_to"]
if (relation?.["rel_type"] === "m.replace") {
content = content?.["m.new_content"] ?? content;
}
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');
Expand Down
31 changes: 31 additions & 0 deletions test/integration/protectionSettingsTest.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,16 @@ import { ProtectionSettingValidationError } from "../../src/protections/Protecti
import { NumberProtectionSetting, StringProtectionSetting, StringListProtectionSetting } from "../../src/protections/ProtectionSettings";
import { newTestUser, noticeListener } from "./clientHelper";
import { matrixClient, mjolnir } from "./mjolnirSetupUtils";
import {MessageIsMedia} from "../../src/protections/MessageIsMedia";

describe("Test: Protection settings", function() {
let client;
let room;
this.beforeEach(async function () {
client = await newTestUser(this.config.homeserverUrl, { name: { contains: "protection-settings" }});
await client.start();
room = await client.createRoom();
await client.joinRoom(room)
})
this.afterEach(async function () {
await client.stop();
Expand Down Expand Up @@ -158,5 +162,32 @@ describe("Test: Protection settings", function() {
"Changed d0sNrt.test to asd2 (was asd1)"
)
});
it("Events are checked for new content under media protections", async function() {
this.timeout(20000);
await client.joinRoom(this.config.managementRoom);

await this.mjolnir.protectionManager.registerProtection(new MessageIsMedia());

// send a regular media message to make sure protections are running
await client.sendMessage(room, {msgtype: "m.image", body: ""})
let reply = () => new Promise((resolve, reject) => {
client.on('room.message', noticeListener(this.mjolnir.managementRoomId, (event) => {
if (event.content.body.includes("Redacting event")) {
resolve(event);
}
}))
});
await reply;

await client.sendMessage(room, {body: "", msgtype: "m.text", "m.new_content": {msgtype: "m.image", body: ""}, "m.relates_to": {"rel_type": "m.replace"}})
let reply2 = () => new Promise((resolve, reject) => {
client.on('room.message', noticeListener(this.mjolnir.managementRoomId, (event) => {
if (event.content.body.includes("Redacting event")) {
resolve(event);
}
}))
});
await reply2;
});
});

0 comments on commit f526b97

Please sign in to comment.