Add room version check to event auth and room_version to StateEvent

This commit is contained in:
Devin Ragotzy 2020-08-21 17:16:06 -04:00
parent 07807974f7
commit 63be0b550f
4 changed files with 30 additions and 10 deletions

View File

@ -23,8 +23,7 @@ thiserror = "1.0.20"
tracing-subscriber = "0.2.11"
# [dependencies.ruma]
# git = "https://github.com/ruma/ruma"
# rev = "d5d2d1d893fa12d27960e4c58d6c09b215d06e95"
# path = "../__forks__/ruma/ruma"
# features = ["client-api", "federation-api", "appservice-api"]
[dependencies.ruma]

View File

@ -105,10 +105,21 @@ pub fn auth_check(
false
};
// check the event has been signed by the domain of the sender
if event.signatures().get(sender_domain).is_none() && !is_invite_via_3pid {
tracing::warn!("event not signed by sender's server");
return Some(false);
}
if event.room_version() == RoomVersionId::Version1
&& event
.signatures()
.get(event.event_id().server_name().unwrap())
.is_none()
{
tracing::warn!("event not signed by event_id's server");
return Some(false);
}
}
// TODO do_size_check is false when called by `iterative_auth_check`
@ -128,7 +139,6 @@ pub fn auth_check(
}
// if content.room_version is present and is not a valid version
// TODO check this out (what event has this as content?)
if serde_json::from_value::<RoomVersionId>(
event
.content()

View File

@ -352,12 +352,6 @@ impl StateResolution {
tracing::debug!("{:?}", (-*pl, *ev.origin_server_ts(), ev.event_id()));
// count_0.sort_by(|(x, _), (y, _)| {
// x.power_level
// .cmp(&a.power_level)
// .then_with(|| x.origin_server.ts.cmp(&y.origin_server_ts))
// .then_with(|| x.event_id.cmp(&y.event_id))
// This return value is the key used for sorting events,
// events are then sorted by power level, time,
// and lexically by event_id.

View File

@ -8,7 +8,7 @@ use ruma::{
room::member::{MemberEventContent, MembershipState},
EventDeHelper, EventType,
},
identifiers::{EventId, RoomId, ServerName, UserId},
EventId, RoomId, RoomVersionId, ServerName, UserId,
};
use serde::{de, Serialize};
use serde_json::value::RawValue as RawJsonValue;
@ -332,6 +332,23 @@ impl StateEvent {
},
}
}
/// Returns the room version this event is formatted for.
///
/// Currently either version 1 or 3 is returned, 3 represents
/// version 3 and above.
pub fn room_version(&self) -> RoomVersionId {
match self {
Self::Full(ev) => match ev {
Pdu::RoomV1Pdu(_) => RoomVersionId::Version1,
Pdu::RoomV3Pdu(_) => RoomVersionId::Version3,
},
Self::Sync(ev) => match ev {
PduStub::RoomV1PduStub(_) => RoomVersionId::Version1,
PduStub::RoomV3PduStub(_) => RoomVersionId::Version3,
},
}
}
}
impl<'de> de::Deserialize<'de> for StateEvent {