state-res: Use match instead of repeatedly comparing the same variable
This commit is contained in:
parent
b4c22d5783
commit
43c8df18ad
@ -441,123 +441,130 @@ fn valid_membership_change<E: Event>(
|
|||||||
let target_user_membership_event_id =
|
let target_user_membership_event_id =
|
||||||
target_user_membership_event.as_ref().map(|e| e.event_id());
|
target_user_membership_event.as_ref().map(|e| e.event_id());
|
||||||
|
|
||||||
Ok(if target_membership == MembershipState::Join {
|
Ok(match target_membership {
|
||||||
if sender != target_user {
|
MembershipState::Join => {
|
||||||
warn!("Can't make other user join");
|
if sender != target_user {
|
||||||
false
|
warn!("Can't make other user join");
|
||||||
} else if let MembershipState::Ban = target_user_current_membership {
|
false
|
||||||
warn!(
|
} else if let MembershipState::Ban = target_user_current_membership {
|
||||||
"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 {
|
|
||||||
warn!(
|
warn!(
|
||||||
"Can't invite banned user\nCurrent user state: {:?}",
|
"Banned user can't join\nCurrent user state: {:?}",
|
||||||
target_user_membership_event_id,
|
target_user_membership_event_id,
|
||||||
);
|
);
|
||||||
false
|
false
|
||||||
} else {
|
} else {
|
||||||
let allow = verify_third_party_invite(
|
let allow = join_rules == JoinRule::Invite
|
||||||
Some(target_user),
|
&& (target_user_current_membership == MembershipState::Join
|
||||||
sender,
|
|| target_user_current_membership == MembershipState::Invite)
|
||||||
&tp_id,
|
|| join_rules == JoinRule::Public;
|
||||||
current_third_party_invite,
|
|
||||||
);
|
|
||||||
if !allow {
|
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
|
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 {
|
MembershipState::Invite => {
|
||||||
if sender == target_user {
|
// If content has third_party_invite key
|
||||||
let allow = target_user_current_membership == MembershipState::Join
|
if let Some(Ok(tp_id)) = third_party_invite {
|
||||||
|| target_user_current_membership == MembershipState::Invite;
|
if target_user_current_membership == MembershipState::Ban {
|
||||||
if !allow {
|
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!(
|
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,
|
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
|
MembershipState::Leave => {
|
||||||
|| target_user_current_membership == MembershipState::Ban
|
if sender == target_user {
|
||||||
&& sender_power.filter(|&p| p < &power_levels.ban).is_some()
|
let allow = target_user_current_membership == MembershipState::Join
|
||||||
{
|
|| target_user_current_membership == MembershipState::Invite;
|
||||||
warn!("Can't kick if sender not joined or user is already banned\nCurrent user state: {:?}\nSender user state: {:?}",
|
if !allow {
|
||||||
target_user_membership_event_id,
|
warn!(
|
||||||
sender_membership_event_id
|
"Can't leave if not invited or joined\nCurrent user state: {:?}",
|
||||||
);
|
target_user_membership_event_id,
|
||||||
false
|
);
|
||||||
} else {
|
}
|
||||||
let allow = sender_power.filter(|&p| p >= &power_levels.kick).is_some()
|
allow
|
||||||
&& target_power < sender_power;
|
} else if !sender_is_joined
|
||||||
if !allow {
|
|| target_user_current_membership == MembershipState::Ban
|
||||||
warn!("User does not have enough power to kick\nCurrent user state: {:?}\nPower levels: {:?}",
|
&& 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,
|
target_user_membership_event_id,
|
||||||
power_levels_event_id,
|
power_levels_event_id,
|
||||||
);
|
);
|
||||||
|
}
|
||||||
|
allow
|
||||||
}
|
}
|
||||||
allow
|
|
||||||
}
|
}
|
||||||
} else if target_membership == MembershipState::Ban {
|
_ => {
|
||||||
if !sender_is_joined {
|
warn!("Unknown membership transition");
|
||||||
warn!(
|
|
||||||
"Can't ban user if sender is not joined\nSender user state: {:?}",
|
|
||||||
sender_membership_event_id
|
|
||||||
);
|
|
||||||
false
|
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
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user