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