Add m.direct filter / validation (#10436)

This commit is contained in:
Michael Weimann
2023-03-27 08:37:35 +02:00
committed by GitHub
parent e5f06df3f7
commit ba2608ec74
4 changed files with 267 additions and 15 deletions
+23 -3
View File
@@ -23,6 +23,7 @@ import { MatrixEvent } from "matrix-js-sdk/src/models/event";
import { Optional } from "matrix-events-sdk";
import { MatrixClientPeg } from "../MatrixClientPeg";
import { filterValidMDirect } from "./dm/filterValidMDirect";
/**
* Class that takes a Matrix Client and flips the m.direct map
@@ -44,8 +45,8 @@ export default class DMRoomMap {
// see onAccountData
this.hasSentOutPatchDirectAccountDataPatch = false;
const mDirectEvent = matrixClient.getAccountData(EventType.Direct)?.getContent() ?? {};
this.mDirectEvent = { ...mDirectEvent }; // copy as we will mutate
const mDirectRawContent = matrixClient.getAccountData(EventType.Direct)?.getContent() ?? {};
this.setMDirectFromContent(mDirectRawContent);
}
/**
@@ -84,9 +85,28 @@ export default class DMRoomMap {
this.matrixClient.removeListener(ClientEvent.AccountData, this.onAccountData);
}
/**
* Filter m.direct content to contain only valid data and then sets it.
* Logs if invalid m.direct content occurs.
* {@link filterValidMDirect}
*
* @param content - Raw m.direct content
*/
private setMDirectFromContent(content: unknown): void {
const { valid, filteredContent } = filterValidMDirect(content);
if (!valid) {
logger.warn("Invalid m.direct content occurred", content);
}
this.mDirectEvent = filteredContent;
}
private onAccountData = (ev: MatrixEvent): void => {
console.log("onAccountData");
if (ev.getType() == EventType.Direct) {
this.mDirectEvent = { ...ev.getContent() }; // copy as we will mutate
this.setMDirectFromContent(ev.getContent());
this.userToRooms = null;
this.roomToUser = null;
}