mirror of
https://forgejo.ellis.link/continuwuation/continuwuity/
synced 2026-10-06 02:37:25 +00:00
fix: Don't invert redaction target helper
This commit is contained in:
@@ -56,7 +56,12 @@ pub(super) fn is_redacted<E: Event>(event: &E) -> bool {
|
||||
return false;
|
||||
};
|
||||
|
||||
unsigned.redacted_because.is_some()
|
||||
unsigned.redacted_by.is_some()
|
||||
}
|
||||
|
||||
#[derive(Deserialize)]
|
||||
struct RedactionField {
|
||||
redacts: OwnedEventId,
|
||||
}
|
||||
|
||||
#[must_use]
|
||||
@@ -69,16 +74,104 @@ pub(super) fn redacts_id<E: Event>(
|
||||
}
|
||||
|
||||
if room_version_rules.redaction.content_field_redacts {
|
||||
event.redacts().map(ToOwned::to_owned)
|
||||
} else {
|
||||
event
|
||||
.get_content::<RoomRedactionEventContent>()
|
||||
.ok()?
|
||||
.redacts
|
||||
.get_content::<RedactionField>()
|
||||
.map(|r| r.redacts)
|
||||
.ok()
|
||||
} else {
|
||||
event.redacts().map(ToOwned::to_owned)
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Deserialize)]
|
||||
struct ExtractRedactedBecause {
|
||||
redacted_because: Option<serde::de::IgnoredAny>,
|
||||
#[serde(rename = "org.continuwuity.redacted_by")]
|
||||
redacted_by: Option<serde::de::IgnoredAny>,
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use ruma::{UInt, events::TimelineEventType, room_version_rules::RoomVersionRules};
|
||||
use serde_json::json;
|
||||
|
||||
use crate::{Event, Pdu, pdu::EventHash};
|
||||
|
||||
#[test]
|
||||
fn v11_redacts_from_content() {
|
||||
let p = Pdu {
|
||||
event_id: ruma::owned_event_id!("$v11"),
|
||||
room_id: Some(ruma::owned_room_id!("!v11:example.com")),
|
||||
sender: ruma::owned_user_id!("@user:example.com"),
|
||||
origin: None,
|
||||
origin_server_ts: UInt::default(),
|
||||
kind: TimelineEventType::RoomRedaction,
|
||||
content: serde_json::value::to_raw_value(&json!({"redacts": "$content_redacts"}))
|
||||
.unwrap(),
|
||||
sticky: None,
|
||||
state_key: None,
|
||||
prev_events: vec![],
|
||||
depth: UInt::default(),
|
||||
auth_events: vec![],
|
||||
redacts: Some(ruma::owned_event_id!("$apex_redacts")),
|
||||
unsigned: None,
|
||||
hashes: EventHash { sha256: String::new() },
|
||||
signatures: None,
|
||||
};
|
||||
assert_eq!(
|
||||
p.redacts_id(&RoomVersionRules::V11),
|
||||
Some(ruma::owned_event_id!("$content_redacts"))
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn v10_redacts_from_apex() {
|
||||
let p = Pdu {
|
||||
event_id: ruma::owned_event_id!("$v11"),
|
||||
room_id: Some(ruma::owned_room_id!("!v11:example.com")),
|
||||
sender: ruma::owned_user_id!("@user:example.com"),
|
||||
origin: None,
|
||||
origin_server_ts: UInt::default(),
|
||||
kind: TimelineEventType::RoomRedaction,
|
||||
content: serde_json::value::to_raw_value(&json!({"redacts": "$content_redacts"}))
|
||||
.unwrap(),
|
||||
sticky: None,
|
||||
state_key: None,
|
||||
prev_events: vec![],
|
||||
depth: UInt::default(),
|
||||
auth_events: vec![],
|
||||
redacts: Some(ruma::owned_event_id!("$apex_redacts")),
|
||||
unsigned: None,
|
||||
hashes: EventHash { sha256: String::new() },
|
||||
signatures: None,
|
||||
};
|
||||
assert_eq!(
|
||||
p.redacts_id(&RoomVersionRules::V10),
|
||||
Some(ruma::owned_event_id!("$apex_redacts"))
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn redacts_ignores_non_redaction_event() {
|
||||
let p = Pdu {
|
||||
event_id: ruma::owned_event_id!("$v11"),
|
||||
room_id: Some(ruma::owned_room_id!("!v11:example.com")),
|
||||
sender: ruma::owned_user_id!("@user:example.com"),
|
||||
origin: None,
|
||||
origin_server_ts: UInt::default(),
|
||||
kind: TimelineEventType::RoomMessage,
|
||||
content: serde_json::value::to_raw_value(&json!({"redacts": "$content_redacts"}))
|
||||
.unwrap(),
|
||||
sticky: None,
|
||||
state_key: None,
|
||||
prev_events: vec![],
|
||||
depth: UInt::default(),
|
||||
auth_events: vec![],
|
||||
redacts: Some(ruma::owned_event_id!("$apex_redacts")),
|
||||
unsigned: None,
|
||||
hashes: EventHash { sha256: String::new() },
|
||||
signatures: None,
|
||||
};
|
||||
assert_eq!(p.redacts_id(&RoomVersionRules::V11), None);
|
||||
assert_eq!(p.redacts_id(&RoomVersionRules::V10), None);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user