Strip relates_to from encrypted events' original contents.
This commit is contained in:
parent
fa985f8f16
commit
2375bf061c
2 changed files with 15 additions and 11 deletions
|
@ -28,9 +28,7 @@ export const SendStatus = createEnum(
|
|||
"Error",
|
||||
);
|
||||
|
||||
const preservedContentFields = {
|
||||
"m.room.message": [ "m.relates_to" ]
|
||||
};
|
||||
const preservedContentFields = [ "m.relates_to" ];
|
||||
|
||||
export class PendingEvent {
|
||||
constructor({data, remove, emitUpdate, attachments}) {
|
||||
|
@ -100,17 +98,22 @@ export class PendingEvent {
|
|||
this._emitUpdate("status");
|
||||
}
|
||||
|
||||
get cleanedContent() {
|
||||
const content = Object.assign({}, this._data.content);
|
||||
for (const field of preservedContentFields) {
|
||||
delete content[field];
|
||||
}
|
||||
return content;
|
||||
}
|
||||
|
||||
_preserveContentFields(into) {
|
||||
const preservedFields = preservedContentFields[this.eventType];
|
||||
if (preservedFields) {
|
||||
const content = this._data.content;
|
||||
for (const field of preservedFields) {
|
||||
for (const field of preservedContentFields) {
|
||||
if (content[field] !== undefined) {
|
||||
into[field] = content[field];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
setEncrypted(type, content) {
|
||||
this._preserveContentFields(content);
|
||||
|
|
|
@ -97,8 +97,9 @@ export class SendQueue {
|
|||
}
|
||||
if (pendingEvent.needsEncryption) {
|
||||
pendingEvent.setEncrypting();
|
||||
const cleanedContent = pendingEvent.cleanedContent;
|
||||
const {type, content} = await log.wrap("encrypt", log => this._roomEncryption.encrypt(
|
||||
pendingEvent.eventType, pendingEvent.content, this._hsApi, log));
|
||||
pendingEvent.eventType, cleanedContent, this._hsApi, log));
|
||||
pendingEvent.setEncrypted(type, content);
|
||||
await this._tryUpdateEvent(pendingEvent);
|
||||
}
|
||||
|
|
Reference in a new issue