From bdf4a86770abde79a95298f664cd8bed2584121f Mon Sep 17 00:00:00 2001 From: Jonathan de Jong Date: Tue, 1 Feb 2022 15:03:22 +0100 Subject: [PATCH] signatures: Add redact_in_place --- crates/ruma-signatures/src/functions.rs | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/crates/ruma-signatures/src/functions.rs b/crates/ruma-signatures/src/functions.rs index 4a12d259..95e97021 100644 --- a/crates/ruma-signatures/src/functions.rs +++ b/crates/ruma-signatures/src/functions.rs @@ -722,8 +722,20 @@ pub fn redact( object: &CanonicalJsonObject, version: &RoomVersionId, ) -> Result { - let mut event = object.clone(); + let mut val = object.clone(); + redact_in_place(&mut val, version)?; + Ok(val) +} +/// Redacts an event using the rules specified in the Matrix client-server specification. +/// +/// Functionally equivalent to `redact`, only; +/// * upon error, the event is not touched. +/// * this'll redact the event in-place. +pub fn redact_in_place( + event: &mut CanonicalJsonObject, + version: &RoomVersionId, +) -> Result<(), Error> { let event_type_value = match event.get("type") { Some(event_type_value) => event_type_value, None => return Err(JsonError::field_missing_from_object("type")), @@ -749,7 +761,7 @@ pub fn redact( } } - let mut old_event = mem::take(&mut event); + let mut old_event = mem::take(event); for &key in ALLOWED_KEYS { if let Some(value) = old_event.remove(key) { @@ -757,7 +769,7 @@ pub fn redact( } } - Ok(event) + Ok(()) } /// Extracts the server names to check signatures for given event.