Add room version check to event auth and room_version to StateEvent
This commit is contained in:
parent
07807974f7
commit
63be0b550f
@ -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]
|
||||
|
@ -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()
|
||||
|
@ -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.
|
||||
|
@ -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 {
|
||||
|
Loading…
x
Reference in New Issue
Block a user