Make auth_types_for_event take the ruma types instead of StateEvent
This commit is contained in:
parent
6e0edce35a
commit
d22d83522b
@ -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)
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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 {
|
||||
|
@ -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 {
|
||||
|
Loading…
x
Reference in New Issue
Block a user