Files
continuwuity/src/core/matrix/pdu/redact.rs
T

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

34 lines
1.0 KiB
Rust
Raw Normal View History

2025-04-26 08:24:47 +00:00
use ruma::{RoomVersionId, canonical_json::redact_content_in_place};
use serde_json::{Value as JsonValue, json, value::to_raw_value};
2024-10-25 01:16:01 +00:00
2026-06-26 06:31:46 +01:00
use crate::{Err, Result, err};
2024-10-25 01:16:01 +00:00
2026-06-26 06:31:46 +01:00
impl super::Pdu {
pub fn redact(&mut self, room_version_id: &RoomVersionId, reason: JsonValue) -> Result {
let Some(rules) = room_version_id.rules() else {
return Err!("Cannot redact event for unknown room version {room_version_id}");
};
2026-06-26 06:31:46 +01:00
self.unsigned = None;
2024-10-25 01:16:01 +00:00
2026-06-26 06:31:46 +01:00
let mut content = serde_json::from_str(self.content.get()).map_err(|e| {
err!(Request(BadJson("Failed to deserialize content into type: {e}")))
})?;
2024-10-25 01:16:01 +00:00
2026-06-26 06:31:46 +01:00
redact_content_in_place(&mut content, &rules.redaction, self.kind.to_string());
2024-10-25 01:16:01 +00:00
2026-06-26 06:31:46 +01:00
let reason = serde_json::to_value(reason).expect("Failed to preserialize reason");
2024-10-25 01:16:01 +00:00
2026-06-26 06:31:46 +01:00
let redacted_because = json!({
"redacted_because": reason,
});
2025-04-26 08:24:47 +00:00
2026-06-26 06:31:46 +01:00
self.unsigned = to_raw_value(&redacted_because)
.expect("Failed to serialize unsigned")
.into();
2025-04-26 08:24:47 +00:00
2026-06-26 06:31:46 +01:00
self.content = to_raw_value(&content).expect("Failed to serialize content");
2024-10-25 01:16:01 +00:00
2026-06-26 06:31:46 +01:00
Ok(())
}
2024-10-25 01:16:01 +00:00
}