state-res: Further simplify valid_membership_change

This commit is contained in:
Jonas Platte 2021-09-04 01:39:20 +02:00
parent 22cee51e1a
commit b4c22d5783
No known key found for this signature in database
GPG Key ID: CC154DE0E30B7C67

View File

@ -390,13 +390,8 @@ fn valid_membership_change<E: Event>(
.get("third_party_invite") .get("third_party_invite")
.map(|t| serde_json::from_value::<ThirdPartyInvite>(t.clone())); .map(|t| serde_json::from_value::<ThirdPartyInvite>(t.clone()));
let target_user_membership_event = target_user_membership_event.as_ref();
let sender_membership_event = sender_membership_event.as_ref();
let power_levels_event = power_levels_event.as_ref();
let join_rules_event = join_rules_event.as_ref();
let sender_is_joined = { let sender_is_joined = {
let sender_membership = match sender_membership_event { let sender_membership = match &sender_membership_event {
Some(pdu) => serde_json::from_value( Some(pdu) => serde_json::from_value(
pdu.content() pdu.content()
.get("membership") .get("membership")
@ -409,14 +404,14 @@ fn valid_membership_change<E: Event>(
sender_membership == MembershipState::Join sender_membership == MembershipState::Join
}; };
let target_user_current_membership = match target_user_membership_event { let target_user_current_membership = match &target_user_membership_event {
Some(pdu) => serde_json::from_value( Some(pdu) => serde_json::from_value(
pdu.content().get("membership").expect("we assume existing events are valid").clone(), pdu.content().get("membership").expect("we assume existing events are valid").clone(),
)?, )?,
None => MembershipState::Leave, None => MembershipState::Leave,
}; };
let power_levels: PowerLevelsEventContent = match power_levels_event { let power_levels: PowerLevelsEventContent = match &power_levels_event {
Some(ev) => serde_json::from_value(ev.content())?, Some(ev) => serde_json::from_value(ev.content())?,
None => PowerLevelsEventContent::default(), None => PowerLevelsEventContent::default(),
}; };
@ -431,7 +426,7 @@ fn valid_membership_change<E: Event>(
}); });
let mut join_rules = JoinRule::Invite; let mut join_rules = JoinRule::Invite;
if let Some(jr) = join_rules_event { if let Some(jr) = &join_rules_event {
join_rules = serde_json::from_value::<JoinRulesEventContent>(jr.content())?.join_rule; join_rules = serde_json::from_value::<JoinRulesEventContent>(jr.content())?.join_rule;
} }
@ -441,6 +436,11 @@ fn valid_membership_change<E: Event>(
} }
} }
let power_levels_event_id = power_levels_event.as_ref().map(|e| e.event_id());
let sender_membership_event_id = sender_membership_event.as_ref().map(|e| e.event_id());
let target_user_membership_event_id =
target_user_membership_event.as_ref().map(|e| e.event_id());
Ok(if target_membership == MembershipState::Join { Ok(if target_membership == MembershipState::Join {
if sender != target_user { if sender != target_user {
warn!("Can't make other user join"); warn!("Can't make other user join");
@ -448,7 +448,7 @@ fn valid_membership_change<E: Event>(
} else if let MembershipState::Ban = target_user_current_membership { } else if let MembershipState::Ban = target_user_current_membership {
warn!( warn!(
"Banned user can't join\nCurrent user state: {:?}", "Banned user can't join\nCurrent user state: {:?}",
target_user_membership_event.map(|e| e.event_id()) target_user_membership_event_id,
); );
false false
} else { } else {
@ -459,8 +459,9 @@ fn valid_membership_change<E: Event>(
if !allow { if !allow {
warn!("Can't join if join rules is not public and user is not invited/joined\nJoin Rules: {:?}\nCurrent user state: {:?}", warn!("Can't join if join rules is not public and user is not invited/joined\nJoin Rules: {:?}\nCurrent user state: {:?}",
join_rules_event.map(|e| e.event_id()), join_rules_event.as_ref().map(|e| e.event_id()),
target_user_membership_event.map(|e| e.event_id())); target_user_membership_event_id,
);
} }
allow allow
} }
@ -470,7 +471,7 @@ fn valid_membership_change<E: Event>(
if target_user_current_membership == MembershipState::Ban { if target_user_current_membership == MembershipState::Ban {
warn!( warn!(
"Can't invite banned user\nCurrent user state: {:?}", "Can't invite banned user\nCurrent user state: {:?}",
target_user_membership_event.map(|e| e.event_id()) target_user_membership_event_id,
); );
false false
} else { } else {
@ -491,16 +492,16 @@ fn valid_membership_change<E: Event>(
{ {
warn!( warn!(
"Can't invite user if sender not joined or the user is currently joined or banned\nCurrent user state: {:?}\nSender user state: {:?}", "Can't invite user if sender not joined or the user is currently joined or banned\nCurrent user state: {:?}\nSender user state: {:?}",
target_user_membership_event.map(|e| e.event_id()), target_user_membership_event_id,
sender_membership_event.map(|e| e.event_id()) sender_membership_event_id,
); );
false false
} else { } else {
let allow = sender_power.filter(|&p| p >= &power_levels.invite).is_some(); let allow = sender_power.filter(|&p| p >= &power_levels.invite).is_some();
if !allow { if !allow {
warn!("User does not have enough power to invite\nCurrent user state: {:?}\nPower levels: {:?}", warn!("User does not have enough power to invite\nCurrent user state: {:?}\nPower levels: {:?}",
target_user_membership_event.map(|e| e.event_id()), target_user_membership_event_id,
power_levels_event.map(|e| e.event_id()) power_levels_event_id,
); );
} }
allow allow
@ -512,7 +513,7 @@ fn valid_membership_change<E: Event>(
if !allow { if !allow {
warn!( warn!(
"Can't leave if not invited or joined\nCurrent user state: {:?}", "Can't leave if not invited or joined\nCurrent user state: {:?}",
target_user_membership_event.map(|e| e.event_id()), target_user_membership_event_id,
); );
} }
allow allow
@ -521,8 +522,8 @@ fn valid_membership_change<E: Event>(
&& sender_power.filter(|&p| p < &power_levels.ban).is_some() && sender_power.filter(|&p| p < &power_levels.ban).is_some()
{ {
warn!("Can't kick if sender not joined or user is already banned\nCurrent user state: {:?}\nSender user state: {:?}", warn!("Can't kick if sender not joined or user is already banned\nCurrent user state: {:?}\nSender user state: {:?}",
target_user_membership_event.map(|e| e.event_id()), target_user_membership_event_id,
sender_membership_event.map(|e| e.event_id()) sender_membership_event_id
); );
false false
} else { } else {
@ -530,8 +531,8 @@ fn valid_membership_change<E: Event>(
&& target_power < sender_power; && target_power < sender_power;
if !allow { if !allow {
warn!("User does not have enough power to kick\nCurrent user state: {:?}\nPower levels: {:?}", warn!("User does not have enough power to kick\nCurrent user state: {:?}\nPower levels: {:?}",
target_user_membership_event.map(|e| e.event_id()), target_user_membership_event_id,
power_levels_event.map(|e| e.event_id()) power_levels_event_id,
); );
} }
allow allow
@ -540,7 +541,7 @@ fn valid_membership_change<E: Event>(
if !sender_is_joined { if !sender_is_joined {
warn!( warn!(
"Can't ban user if sender is not joined\nSender user state: {:?}", "Can't ban user if sender is not joined\nSender user state: {:?}",
sender_membership_event.map(|e| e.event_id()) sender_membership_event_id
); );
false false
} else { } else {
@ -548,8 +549,8 @@ fn valid_membership_change<E: Event>(
&& target_power < sender_power; && target_power < sender_power;
if !allow { if !allow {
warn!("User does not have enough power to ban\nCurrent user state: {:?}\nPower levels: {:?}", warn!("User does not have enough power to ban\nCurrent user state: {:?}\nPower levels: {:?}",
target_user_membership_event.map(|e| e.event_id()), target_user_membership_event_id,
power_levels_event.map(|e| e.event_id()) power_levels_event_id,
); );
} }
allow allow