fix: add top level "redacts" key for v11 redactions
at least with Element Web: they still rely on the "redacts" top level key. it was reported that federated redactions were not working for v11 rooms with conduwuit. after adding back the top level key when appending a PDU to the timeline, they now work again. spec below says to continue adding the top level key for compatibility with older clients. https://spec.matrix.org/v1.9/rooms/v11/#moving-the-redacts-property-of-mroomredaction-events-to-a-content-property Signed-off-by: strawberry <strawberry@puppygock.gay>
This commit is contained in:
parent
4e2ce16bb8
commit
3c12c2b6ca
|
@ -318,6 +318,28 @@ impl Service {
|
|||
let mut pdu_id = shortroomid.to_be_bytes().to_vec();
|
||||
pdu_id.extend_from_slice(&count2.to_be_bytes());
|
||||
|
||||
// https://spec.matrix.org/v1.9/rooms/v11/#moving-the-redacts-property-of-mroomredaction-events-to-a-content-property
|
||||
// For backwards-compatibility with older clients,
|
||||
// servers should add a redacts property to the top level of m.room.redaction events in when serving such events over the Client-Server API.
|
||||
if pdu.kind == TimelineEventType::RoomRedaction
|
||||
&& services().rooms.state.get_room_version(&pdu.room_id)? == RoomVersionId::V11
|
||||
{
|
||||
#[derive(Deserialize)]
|
||||
struct Redaction {
|
||||
redacts: Option<OwnedEventId>,
|
||||
}
|
||||
|
||||
let content = serde_json::from_str::<Redaction>(pdu.content.get())
|
||||
.map_err(|_| Error::bad_database("Invalid content in redaction pdu."))?;
|
||||
|
||||
if let Some(redact_id) = &content.redacts {
|
||||
pdu_json.insert(
|
||||
"redacts".to_owned(),
|
||||
CanonicalJsonValue::String(redact_id.to_string()),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// Insert pdu
|
||||
self.db.append_pdu(&pdu_id, pdu, &pdu_json, count2)?;
|
||||
|
||||
|
|
Loading…
Reference in New Issue