From ac9282add6fc131e7fbb0e21b628dc05ae5c5749 Mon Sep 17 00:00:00 2001 From: Devin Ragotzy Date: Tue, 27 Oct 2020 20:22:13 -0400 Subject: [PATCH] Allow get_power_level_for_sender to soft fail when eventId not found Hardcode RoomVersion6 into the eventId hashing --- src/lib.rs | 8 ++++++-- src/state_event.rs | 8 +++++--- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 59c2fc8a..7e797091 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -429,7 +429,11 @@ impl StateResolution { // TODO store.auth_event_ids returns "self" with the event ids is this ok // event.auth_event_ids does not include its own event id ? - for aid in event.as_ref().unwrap().auth_events() { + for aid in event + .as_ref() + .map(|pdu| pdu.auth_events()) + .unwrap_or_default() + { if let Some(aev) = StateResolution::get_or_load_event(room_id, &aid, event_map, store) { if aev.is_type_and_key(EventType::RoomPowerLevels, "") { pl = Some(aev); @@ -685,7 +689,7 @@ impl StateResolution { for aid in auth_events { // dbg!(&aid); let aev = StateResolution::get_or_load_event(room_id, &aid, event_map, store) - .ok_or(Error::NotFound("Auth event not found".to_owned()))?; + .ok_or_else(|| Error::NotFound("Auth event not found".to_owned()))?; if aev.is_type_and_key(EventType::RoomPowerLevels, "") { event = Some(aev); break; diff --git a/src/state_event.rs b/src/state_event.rs index fafbec53..92cdd367 100644 --- a/src/state_event.rs +++ b/src/state_event.rs @@ -129,11 +129,12 @@ impl StateEvent { &serde_json::to_vec(ev).expect("all ruma pdus are json values"), ) .unwrap(); + value.remove("event_id"); EventId::try_from(&*format!( "${}", - ruma::signatures::reference_hash(&value, &self.room_version()) + ruma::signatures::reference_hash(&value, &RoomVersionId::Version6) .expect("ruma can calculate reference hashes") )) .expect("ruma's reference hashes are valid event ids") @@ -341,14 +342,15 @@ impl StateEvent { /// Currently either version 1 or 3 is returned, 3 represents /// version 3 and above. pub fn room_version(&self) -> RoomVersionId { + // TODO: We have to know the actual room version this is not sufficient match self { Self::Full(ev) => match ev { Pdu::RoomV1Pdu(_) => RoomVersionId::Version1, - Pdu::RoomV3Pdu(_) => RoomVersionId::Version3, + Pdu::RoomV3Pdu(_) => RoomVersionId::Version6, }, Self::Sync(ev) => match ev { PduStub::RoomV1PduStub(_) => RoomVersionId::Version1, - PduStub::RoomV3PduStub(_) => RoomVersionId::Version3, + PduStub::RoomV3PduStub(_) => RoomVersionId::Version6, }, } }