state-res: Make logic a bit easier to read

This commit is contained in:
Jonas Platte 2021-09-04 01:33:10 +02:00
parent d8637d3b30
commit d1fa58abb2
No known key found for this signature in database
GPG Key ID: CC154DE0E30B7C67

View File

@ -395,15 +395,19 @@ fn valid_membership_change<E: Event>(
let power_levels_event = power_levels_event.as_ref(); let power_levels_event = power_levels_event.as_ref();
let join_rules_event = join_rules_event.as_ref(); let join_rules_event = join_rules_event.as_ref();
let sender_membership = let sender_is_joined = {
sender_membership_event.map_or(Ok::<_, Error>(MembershipState::Leave), |pdu| { let sender_membership =
Ok(serde_json::from_value::<MembershipState>( sender_membership_event.map_or(Ok::<_, Error>(MembershipState::Leave), |pdu| {
pdu.content() Ok(serde_json::from_value::<MembershipState>(
.get("membership") pdu.content()
.expect("we assume existing events are valid") .get("membership")
.clone(), .expect("we assume existing events are valid")
)?) .clone(),
})?; )?)
})?;
sender_membership == MembershipState::Join
};
let target_user_current_membership = let target_user_current_membership =
target_user_membership_event.map_or(Ok::<_, Error>(MembershipState::Leave), |pdu| { target_user_membership_event.map_or(Ok::<_, Error>(MembershipState::Leave), |pdu| {
@ -420,9 +424,11 @@ fn valid_membership_change<E: Event>(
None => PowerLevelsEventContent::default(), None => PowerLevelsEventContent::default(),
}; };
let sender_power = power_levels.users.get(sender).or_else(|| { let sender_power = power_levels
(sender_membership == MembershipState::Join).then(|| &power_levels.users_default) .users
}); .get(sender)
.or_else(|| sender_is_joined.then(|| &power_levels.users_default));
let target_power = power_levels.users.get(target_user).or_else(|| { let target_power = power_levels.users.get(target_user).or_else(|| {
(target_membership == MembershipState::Join).then(|| &power_levels.users_default) (target_membership == MembershipState::Join).then(|| &power_levels.users_default)
}); });
@ -482,7 +488,7 @@ fn valid_membership_change<E: Event>(
} }
allow allow
} }
} else if sender_membership != MembershipState::Join } else if !sender_is_joined
|| target_user_current_membership == MembershipState::Join || target_user_current_membership == MembershipState::Join
|| target_user_current_membership == MembershipState::Ban || target_user_current_membership == MembershipState::Ban
{ {
@ -513,7 +519,7 @@ fn valid_membership_change<E: Event>(
); );
} }
allow allow
} else if sender_membership != MembershipState::Join } else if !sender_is_joined
|| target_user_current_membership == MembershipState::Ban || target_user_current_membership == MembershipState::Ban
&& sender_power.filter(|&p| p < &power_levels.ban).is_some() && sender_power.filter(|&p| p < &power_levels.ban).is_some()
{ {
@ -534,7 +540,7 @@ fn valid_membership_change<E: Event>(
allow allow
} }
} else if target_membership == MembershipState::Ban { } else if target_membership == MembershipState::Ban {
if sender_membership != MembershipState::Join { 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.map(|e| e.event_id())