Improve state event redaction

This commit is contained in:
Nicolas Werner 2023-03-26 23:37:28 +02:00
parent ef53644155
commit c543b2d4fa
No known key found for this signature in database
GPG key ID: C8D75E610773F2D9
3 changed files with 41 additions and 10 deletions

View file

@ -3628,9 +3628,29 @@ Cache::saveTimelineMessages(lmdb::txn &txn,
te);
// overwrite the content and add redation data
std::visit(
[redaction](auto &ev) {
[&redaction, &room_id, &txn, &eventsDb, this](auto &ev) {
ev.unsigned_data.redacted_because = *redaction;
ev.unsigned_data.redacted_by = redaction->event_id;
if constexpr (isStateEvent_<decltype(ev)>) {
auto statesdb = getStatesDb(txn, room_id);
auto stateskeydb = getStatesKeyDb(txn, room_id);
auto membersdb = getMembersDb(txn, room_id);
mtx::events::StateEvent<mtx::events::msg::Redacted> redactedEvent;
redactedEvent.event_id = ev.event_id;
redactedEvent.state_key = ev.state_key;
redactedEvent.type = ev.type;
nhlog::db()->critical("Redacting: {}",
nlohmann::json(redactedEvent).dump(2));
saveStateEvent(txn,
statesdb,
stateskeydb,
membersdb,
eventsDb,
room_id,
mtx::events::collections::StateEvents{redactedEvent});
}
},
te.data);
event = mtx::accessors::serialize_event(te.data);
@ -5194,8 +5214,8 @@ to_json(nlohmann::json &j, const MemberInfo &info)
void
from_json(const nlohmann::json &j, MemberInfo &info)
{
info.name = j.at("name").get<std::string>();
info.avatar_url = j.at("avatar_url").get<std::string>();
info.name = j.value("name", "");
info.avatar_url = j.value("avatar_url", "");
info.is_direct = j.value("is_direct", false);
info.reason = j.value("reason", "");
}