From 83cdc9c708cd7b50fe1ab40ea6a68dcf252c190b Mon Sep 17 00:00:00 2001 From: Benjamin Lee Date: Thu, 6 Jun 2024 00:23:33 -0700 Subject: [PATCH] drop redacted events from search results --- src/api/client_server/search.rs | 19 ++++++++++--------- src/service/pdu.rs | 18 ++++++++++++++++++ 2 files changed, 28 insertions(+), 9 deletions(-) diff --git a/src/api/client_server/search.rs b/src/api/client_server/search.rs index 761f89b7..458d4ae2 100644 --- a/src/api/client_server/search.rs +++ b/src/api/client_server/search.rs @@ -101,15 +101,16 @@ pub(crate) async fn search_events_route( .get_pdu_from_id(result) .ok()? .filter(|pdu| { - services() - .rooms - .state_accessor - .user_can_see_event( - sender_user, - &pdu.room_id, - &pdu.event_id, - ) - .unwrap_or(false) + !pdu.is_redacted() + && services() + .rooms + .state_accessor + .user_can_see_event( + sender_user, + &pdu.room_id, + &pdu.event_id, + ) + .unwrap_or(false) }) .map(|pdu| pdu.to_room_event()) }) diff --git a/src/service/pdu.rs b/src/service/pdu.rs index 46dafa2e..c538f80c 100644 --- a/src/service/pdu.rs +++ b/src/service/pdu.rs @@ -90,6 +90,24 @@ impl PduEvent { Ok(()) } + pub(crate) fn is_redacted(&self) -> bool { + #[derive(Deserialize)] + struct ExtractRedactedBecause { + redacted_because: Option, + } + + let Some(unsigned) = &self.unsigned else { + return false; + }; + + let Ok(unsigned) = ExtractRedactedBecause::deserialize(&**unsigned) + else { + return false; + }; + + unsigned.redacted_because.is_some() + } + pub(crate) fn remove_transaction_id(&mut self) -> crate::Result<()> { if let Some(unsigned) = &self.unsigned { let mut unsigned: BTreeMap> =