From 0e2d652b8ac1e0206c94de014128248b66e7ab39 Mon Sep 17 00:00:00 2001 From: LDA Date: Sat, 28 Sep 2024 10:47:35 +0200 Subject: [PATCH] [FIX] Store redactor outside the PDU itself --- src/Room.c | 13 ++++++++++++- src/Room/V1/Send.c | 28 ++++++++++------------------ 2 files changed, 22 insertions(+), 19 deletions(-) diff --git a/src/Room.c b/src/Room.c index bc5418f..a7781dc 100644 --- a/src/Room.c +++ b/src/Room.c @@ -271,9 +271,9 @@ CreateSafeID(char *unsafe_id) HashMap * RoomEventFetch(Room *room, char *id) { + char *safe_id, *redactor; HashMap *ret, *unsign; DbRef *event_ref; - char *safe_id; uint64_t ts; if (!room || !id) @@ -312,6 +312,13 @@ RoomEventFetch(Room *room, char *id) JsonValueInteger(UtilTsMillis() - ts) )); + redactor = JsonValueAsString(HashMapGet(DbJson(event_ref), "redacted_by")); + JsonValueFree(HashMapSet( + unsign, + "redacted_because", + JsonValueObject(RoomEventFetch(room, redactor)) + )); + DbUnlock(room->db, event_ref); finish: Free(safe_id); @@ -690,6 +697,10 @@ RoomRedact(Room *room, User *user, char *eventID, char *reason, char **errp) pdu = RoomEventSend(room, event, errp); ret = StrDuplicate(JsonValueAsString(HashMapGet(pdu, "event_id"))); + if (errp && !*errp && !ret) + { + *errp = "Unknown error when redacting."; + } end: UserIdFree(userId); JsonFree(event); diff --git a/src/Room/V1/Send.c b/src/Room/V1/Send.c index 86cec5d..dfa8893 100644 --- a/src/Room/V1/Send.c +++ b/src/Room/V1/Send.c @@ -103,10 +103,10 @@ RoomGetEventStatusV1(Room *room, PduV1 *pdu, State *prev, bool client, char **er } static void -RedactPDU1(HashMap *obj, HashMap *redactor) +RedactPDU1(HashMap *obj) { Array *keys; - HashMap *content, *_unsigned; + HashMap *content; char *type = JsonValueAsString(HashMapGet(obj, "type")); size_t i; if (!obj) @@ -133,20 +133,9 @@ RedactPDU1(HashMap *obj, HashMap *redactor) } ArrayFree(keys); - _unsigned = JsonValueAsObject(HashMapGet(obj, "unsigned")); - keys = HashMapKeys(_unsigned); - for (i = 0; i < ArraySize(keys); i++) - { - char *key = ArrayGet(keys, i); - if (!StrEquals(key, "next_events") && !StrEquals(key, "pdu_status")) - { - JsonValueFree(HashMapDelete(_unsigned, key)); - continue; - } - } - ArrayFree(keys); - JsonValueFree(HashMapSet(_unsigned, - "redacted_because", JsonValueObject(JsonDuplicate(redactor)) + JsonValueFree(HashMapSet( + obj, + "unsigned", JsonValueObject(HashMapCreate()) )); content = JsonValueAsObject(HashMapGet(obj, "content")); @@ -367,9 +356,12 @@ RoomAddEventV1(Room *room, PduV1 pdu, PduV1Status status) ); RedactPDU1( - JsonValueAsObject(HashMapGet(DbJson(eventRef), "pdu")), - pdu_json + JsonValueAsObject(HashMapGet(DbJson(eventRef), "pdu")) ); + JsonValueFree(HashMapSet( + DbJson(eventRef), + "redacted_by", JsonValueString(pdu.redacts) + )); DbUnlock(room->db, eventRef); }