From 89eecd2bf74fd83708b5623e94591861db40b8ae Mon Sep 17 00:00:00 2001 From: timedout Date: Mon, 21 Sep 2026 00:39:34 +0100 Subject: [PATCH] fix: Record `redacted_because_id` instead of `redacted_because` --- src/api/server/get_missing_events.rs | 4 ++-- src/core/matrix/pdu/redact.rs | 20 +++++++++++--------- src/service/rooms/timeline/redact.rs | 2 +- 3 files changed, 14 insertions(+), 12 deletions(-) diff --git a/src/api/server/get_missing_events.rs b/src/api/server/get_missing_events.rs index a6578ac41..7c5b8799f 100644 --- a/src/api/server/get_missing_events.rs +++ b/src/api/server/get_missing_events.rs @@ -3,7 +3,7 @@ use std::collections::{HashSet, VecDeque}; use axum::extract::State; use conduwuit::{Err, Event, Result, debug, info, trace, utils::to_canonical_object, warn}; use ruma::{OwnedEventId, api::federation::event::get_missing_events}; -use serde_json::{json, value::RawValue}; +use serde_json::value::RawValue; use service::rooms::event_handler::GET_MISSING_EVENTS_MAX_BATCH_SIZE; use super::AccessCheck; @@ -91,7 +91,7 @@ pub(crate) async fn get_missing_events_route( .await { debug!(%next_event_id, origin = %body.identity, "redacting event origin cannot see"); - pdu.redact(&room_version, json!({}))?; + pdu.redact(&room_version, None)?; } trace!( diff --git a/src/core/matrix/pdu/redact.rs b/src/core/matrix/pdu/redact.rs index ffee4fd49..875086563 100644 --- a/src/core/matrix/pdu/redact.rs +++ b/src/core/matrix/pdu/redact.rs @@ -1,10 +1,14 @@ use ruma::{RoomVersionId, canonical_json::redact_content_in_place}; -use serde_json::{Value as JsonValue, json, value::to_raw_value}; +use serde_json::{json, value::to_raw_value}; use crate::{Err, Result, err}; impl super::Pdu { - pub fn redact(&mut self, room_version_id: &RoomVersionId, reason: JsonValue) -> Result { + pub fn redact( + &mut self, + room_version_id: &RoomVersionId, + redacted_because: Option<&ruma::EventId>, + ) -> Result { let Some(rules) = room_version_id.rules() else { return Err!("Cannot redact event for unknown room version {room_version_id}"); }; @@ -20,15 +24,13 @@ impl super::Pdu { redact_content_in_place(&mut content, &rules.redaction, self.kind.to_string()); - let reason = serde_json::to_value(reason).expect("Failed to preserialize reason"); - - let redacted_because = json!({ - "redacted_because": reason, - }); - - self.unsigned = to_raw_value(&redacted_because) + if let Some(event_id) = redacted_because { + self.unsigned = to_raw_value(&json!({ + "redacted_because_id": event_id, + })) .expect("Failed to serialize unsigned") .into(); + } self.content = to_raw_value(&content).expect("Failed to serialize content"); diff --git a/src/service/rooms/timeline/redact.rs b/src/service/rooms/timeline/redact.rs index 5509feeb5..efa19dff5 100644 --- a/src/service/rooms/timeline/redact.rs +++ b/src/service/rooms/timeline/redact.rs @@ -45,7 +45,7 @@ impl super::Service { .get_room_version(&pdu.room_id_or_hash()) .await?; - pdu.redact(&room_version_id, reason.to_value())?; + pdu.redact(&room_version_id, Some(reason.event_id()))?; let obj = utils::to_canonical_object(&pdu).map_err(|e| { err!(Database(error!(%event_id, ?e, "Failed to convert PDU to canonical JSON")))