state-res: Inline check_event_sender_in_room
This commit is contained in:
parent
359a0cb125
commit
983ce8451f
@ -242,16 +242,25 @@ where
|
|||||||
}
|
}
|
||||||
|
|
||||||
// If the sender's current membership state is not join, reject
|
// If the sender's current membership state is not join, reject
|
||||||
match check_event_sender_in_room(incoming_event.sender(), &fetch_state) {
|
let sender = incoming_event.sender();
|
||||||
Some(true) => {} // sender in room
|
let mem = match fetch_state(&EventType::RoomMember, sender.as_str()) {
|
||||||
Some(false) => {
|
Some(mem) => mem,
|
||||||
warn!("sender's membership is not join");
|
|
||||||
return Ok(false);
|
|
||||||
}
|
|
||||||
None => {
|
None => {
|
||||||
warn!("sender not found in room");
|
warn!("sender not found in room");
|
||||||
return Ok(false);
|
return Ok(false);
|
||||||
}
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
let membership_state = serde_json::from_value::<MembershipState>(
|
||||||
|
mem.content()
|
||||||
|
.get("membership")
|
||||||
|
.expect("we should test before that this field exists")
|
||||||
|
.clone(),
|
||||||
|
)?;
|
||||||
|
|
||||||
|
if !matches!(membership_state, MembershipState::Join) {
|
||||||
|
warn!("sender's membership is not join");
|
||||||
|
return Ok(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Allow if and only if sender's current power level is greater than
|
// Allow if and only if sender's current power level is greater than
|
||||||
@ -509,25 +518,6 @@ fn valid_membership_change<E: Event>(
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Is the event's sender in the room that they sent the event to.
|
|
||||||
pub fn check_event_sender_in_room<E, F>(sender: &UserId, fetch_state: F) -> Option<bool>
|
|
||||||
where
|
|
||||||
E: Event,
|
|
||||||
F: Fn(&EventType, &str) -> Option<Arc<E>>,
|
|
||||||
{
|
|
||||||
let mem = fetch_state(&EventType::RoomMember, sender.as_str())?;
|
|
||||||
|
|
||||||
let membership = serde_json::from_value::<MembershipState>(
|
|
||||||
mem.content()
|
|
||||||
.get("membership")
|
|
||||||
.expect("we should test before that this field exists")
|
|
||||||
.clone(),
|
|
||||||
)
|
|
||||||
.ok()?;
|
|
||||||
|
|
||||||
Some(membership == MembershipState::Join)
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Is the user allowed to send a specific event based on the rooms power levels.
|
/// Is the user allowed to send a specific event based on the rooms power levels.
|
||||||
///
|
///
|
||||||
/// Does the event have the correct userId as its state_key if it's not the "" state_key.
|
/// Does the event have the correct userId as its state_key if it's not the "" state_key.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user