state-res: Make logic a bit easier to read
This commit is contained in:
parent
d8637d3b30
commit
d1fa58abb2
@ -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())
|
||||||
|
Loading…
x
Reference in New Issue
Block a user