Make auth_types_for_event take the ruma types instead of StateEvent

This commit is contained in:
Devin Ragotzy 2020-08-14 07:39:30 -04:00
parent 6e0edce35a
commit d22d83522b
4 changed files with 29 additions and 9 deletions

View File

@ -26,19 +26,24 @@ pub enum RedactAllowed {
No,
}
pub fn auth_types_for_event(event: &StateEvent) -> Vec<(EventType, Option<String>)> {
if event.kind() == EventType::RoomCreate {
pub fn auth_types_for_event(
kind: EventType,
sender: &UserId,
state_key: Option<String>,
content: serde_json::Value,
) -> Vec<(EventType, Option<String>)> {
if kind == EventType::RoomCreate {
return vec![];
}
let mut auth_types = vec![
(EventType::RoomPowerLevels, Some("".to_string())),
(EventType::RoomMember, Some(event.sender().to_string())),
(EventType::RoomMember, Some(sender.to_string())),
(EventType::RoomCreate, Some("".to_string())),
];
if event.kind() == EventType::RoomMember {
if let Ok(content) = event.deserialize_content::<room::member::MemberEventContent>() {
if kind == EventType::RoomMember {
if let Ok(content) = serde_json::from_value::<room::member::MemberEventContent>(content) {
if [MembershipState::Join, MembershipState::Invite].contains(&content.membership) {
let key = (EventType::RoomJoinRules, Some("".into()));
if !auth_types.contains(&key) {
@ -47,7 +52,7 @@ pub fn auth_types_for_event(event: &StateEvent) -> Vec<(EventType, Option<String
}
// TODO what when we don't find a state_key
let key = (EventType::RoomMember, event.state_key());
let key = (EventType::RoomMember, state_key);
if !auth_types.contains(&key) {
auth_types.push(key)
}

View File

@ -523,7 +523,12 @@ impl StateResolution {
}
}
for key in event_auth::auth_types_for_event(&event) {
for key in event_auth::auth_types_for_event(
event.kind(),
event.sender(),
event.state_key(),
event.content().clone(),
) {
if let Some(ev_id) = resolved_state.get(&key) {
if let Some(event) = self._get_event(room_id, ev_id, event_map, store) {
// TODO synapse checks `rejected_reason` is None here

View File

@ -139,7 +139,12 @@ fn do_check(events: &[StateEvent], edges: Vec<Vec<EventId>>, expected_state_ids:
state_after.insert((ty, key), event_id.clone());
}
let auth_types = state_res::auth_types_for_event(fake_event);
let auth_types = state_res::auth_types_for_event(
fake_event.kind(),
fake_event.sender(),
fake_event.state_key(),
fake_event.content().clone(),
);
let mut auth_events = vec![];
for key in auth_types {

View File

@ -399,7 +399,12 @@ fn do_check(events: &[StateEvent], edges: Vec<Vec<EventId>>, expected_state_ids:
state_after.insert((ty, key), event_id.clone());
}
let auth_types = state_res::auth_types_for_event(fake_event);
let auth_types = state_res::auth_types_for_event(
fake_event.kind(),
fake_event.sender(),
fake_event.state_key(),
fake_event.content().clone(),
);
let mut auth_events = vec![];
for key in auth_types {