From 43c8df18ad81add7fdce76b22fcfd8c4088456f7 Mon Sep 17 00:00:00 2001 From: Jonas Platte Date: Sat, 4 Sep 2021 01:41:24 +0200 Subject: [PATCH] state-res: Use match instead of repeatedly comparing the same variable --- crates/ruma-state-res/src/event_auth.rs | 199 ++++++++++++------------ 1 file changed, 103 insertions(+), 96 deletions(-) diff --git a/crates/ruma-state-res/src/event_auth.rs b/crates/ruma-state-res/src/event_auth.rs index 57a9e01a..80108582 100644 --- a/crates/ruma-state-res/src/event_auth.rs +++ b/crates/ruma-state-res/src/event_auth.rs @@ -441,123 +441,130 @@ fn valid_membership_change( let target_user_membership_event_id = target_user_membership_event.as_ref().map(|e| e.event_id()); - Ok(if target_membership == MembershipState::Join { - if sender != target_user { - warn!("Can't make other user join"); - false - } else if let MembershipState::Ban = target_user_current_membership { - warn!( - "Banned user can't join\nCurrent user state: {:?}", - target_user_membership_event_id, - ); - false - } else { - let allow = join_rules == JoinRule::Invite - && (target_user_current_membership == MembershipState::Join - || target_user_current_membership == MembershipState::Invite) - || join_rules == JoinRule::Public; - - if !allow { - warn!("Can't join if join rules is not public and user is not invited/joined\nJoin Rules: {:?}\nCurrent user state: {:?}", - join_rules_event.as_ref().map(|e| e.event_id()), - target_user_membership_event_id, - ); - } - allow - } - } else if target_membership == MembershipState::Invite { - // If content has third_party_invite key - if let Some(Ok(tp_id)) = third_party_invite { - if target_user_current_membership == MembershipState::Ban { + Ok(match target_membership { + MembershipState::Join => { + if sender != target_user { + warn!("Can't make other user join"); + false + } else if let MembershipState::Ban = target_user_current_membership { warn!( - "Can't invite banned user\nCurrent user state: {:?}", + "Banned user can't join\nCurrent user state: {:?}", target_user_membership_event_id, ); false } else { - let allow = verify_third_party_invite( - Some(target_user), - sender, - &tp_id, - current_third_party_invite, - ); + let allow = join_rules == JoinRule::Invite + && (target_user_current_membership == MembershipState::Join + || target_user_current_membership == MembershipState::Invite) + || join_rules == JoinRule::Public; + if !allow { - warn!("Third party invite invalid"); + warn!("Can't join if join rules is not public and user is not invited/joined\nJoin Rules: {:?}\nCurrent user state: {:?}", + join_rules_event.as_ref().map(|e| e.event_id()), + target_user_membership_event_id, + ); } allow } - } else if !sender_is_joined - || target_user_current_membership == MembershipState::Join - || target_user_current_membership == MembershipState::Ban - { - warn!( - "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_id, - sender_membership_event_id, - ); - false - } else { - let allow = sender_power.filter(|&p| p >= &power_levels.invite).is_some(); - if !allow { - warn!("User does not have enough power to invite\nCurrent user state: {:?}\nPower levels: {:?}", - target_user_membership_event_id, - power_levels_event_id, - ); - } - allow } - } else if target_membership == MembershipState::Leave { - if sender == target_user { - let allow = target_user_current_membership == MembershipState::Join - || target_user_current_membership == MembershipState::Invite; - if !allow { + MembershipState::Invite => { + // If content has third_party_invite key + if let Some(Ok(tp_id)) = third_party_invite { + if target_user_current_membership == MembershipState::Ban { + warn!( + "Can't invite banned user\nCurrent user state: {:?}", + target_user_membership_event_id, + ); + false + } else { + let allow = verify_third_party_invite( + Some(target_user), + sender, + &tp_id, + current_third_party_invite, + ); + if !allow { + warn!("Third party invite invalid"); + } + allow + } + } else if !sender_is_joined + || target_user_current_membership == MembershipState::Join + || target_user_current_membership == MembershipState::Ban + { warn!( - "Can't leave if not invited or joined\nCurrent 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_id, + sender_membership_event_id, ); + false + } else { + let allow = sender_power.filter(|&p| p >= &power_levels.invite).is_some(); + if !allow { + warn!( + "User does not have enough power to invite\nCurrent user state: {:?}\nPower levels: {:?}", + target_user_membership_event_id, + power_levels_event_id, + ); + } + allow } - allow - } else if !sender_is_joined - || target_user_current_membership == MembershipState::Ban - && 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: {:?}", - target_user_membership_event_id, - sender_membership_event_id - ); - false - } else { - let allow = sender_power.filter(|&p| p >= &power_levels.kick).is_some() - && target_power < sender_power; - if !allow { - warn!("User does not have enough power to kick\nCurrent user state: {:?}\nPower levels: {:?}", + } + MembershipState::Leave => { + if sender == target_user { + let allow = target_user_current_membership == MembershipState::Join + || target_user_current_membership == MembershipState::Invite; + if !allow { + warn!( + "Can't leave if not invited or joined\nCurrent user state: {:?}", + target_user_membership_event_id, + ); + } + allow + } else if !sender_is_joined + || target_user_current_membership == MembershipState::Ban + && 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: {:?}", + target_user_membership_event_id, + sender_membership_event_id + ); + false + } else { + let allow = sender_power.filter(|&p| p >= &power_levels.kick).is_some() + && target_power < sender_power; + if !allow { + warn!("User does not have enough power to kick\nCurrent user state: {:?}\nPower levels: {:?}", + target_user_membership_event_id, + power_levels_event_id, + ); + } + allow + } + } + MembershipState::Ban => { + if !sender_is_joined { + warn!( + "Can't ban user if sender is not joined\nSender user state: {:?}", + sender_membership_event_id + ); + false + } else { + let allow = sender_power.filter(|&p| p >= &power_levels.ban).is_some() + && target_power < sender_power; + if !allow { + warn!("User does not have enough power to ban\nCurrent user state: {:?}\nPower levels: {:?}", target_user_membership_event_id, power_levels_event_id, ); + } + allow } - allow } - } else if target_membership == MembershipState::Ban { - if !sender_is_joined { - warn!( - "Can't ban user if sender is not joined\nSender user state: {:?}", - sender_membership_event_id - ); + _ => { + warn!("Unknown membership transition"); false - } else { - let allow = sender_power.filter(|&p| p >= &power_levels.ban).is_some() - && target_power < sender_power; - if !allow { - warn!("User does not have enough power to ban\nCurrent user state: {:?}\nPower levels: {:?}", - target_user_membership_event_id, - power_levels_event_id, - ); - } - allow } - } else { - warn!("Unknown membership transition"); - false }) }