state-res: Inline check_event_sender_in_room
This commit is contained in:
		
							parent
							
								
									359a0cb125
								
							
						
					
					
						commit
						983ce8451f
					
				| @ -242,16 +242,25 @@ where | ||||
|     } | ||||
| 
 | ||||
|     // If the sender's current membership state is not join, reject
 | ||||
|     match check_event_sender_in_room(incoming_event.sender(), &fetch_state) { | ||||
|         Some(true) => {} // sender in room
 | ||||
|         Some(false) => { | ||||
|             warn!("sender's membership is not join"); | ||||
|             return Ok(false); | ||||
|         } | ||||
|     let sender = incoming_event.sender(); | ||||
|     let mem = match fetch_state(&EventType::RoomMember, sender.as_str()) { | ||||
|         Some(mem) => mem, | ||||
|         None => { | ||||
|             warn!("sender not found in room"); | ||||
|             return Ok(false); | ||||
|         } | ||||
|     }; | ||||
| 
 | ||||
|     let membership_state = serde_json::from_value::<MembershipState>( | ||||
|         mem.content() | ||||
|             .get("membership") | ||||
|             .expect("we should test before that this field exists") | ||||
|             .clone(), | ||||
|     )?; | ||||
| 
 | ||||
|     if !matches!(membership_state, MembershipState::Join) { | ||||
|         warn!("sender's membership is not join"); | ||||
|         return Ok(false); | ||||
|     } | ||||
| 
 | ||||
|     // Allow if and only if sender's current power level is greater than
 | ||||
| @ -509,25 +518,6 @@ fn valid_membership_change<E: Event>( | ||||
|     }) | ||||
| } | ||||
| 
 | ||||
| /// Is the event's sender in the room that they sent the event to.
 | ||||
| pub fn check_event_sender_in_room<E, F>(sender: &UserId, fetch_state: F) -> Option<bool> | ||||
| where | ||||
|     E: Event, | ||||
|     F: Fn(&EventType, &str) -> Option<Arc<E>>, | ||||
| { | ||||
|     let mem = fetch_state(&EventType::RoomMember, sender.as_str())?; | ||||
| 
 | ||||
|     let membership = serde_json::from_value::<MembershipState>( | ||||
|         mem.content() | ||||
|             .get("membership") | ||||
|             .expect("we should test before that this field exists") | ||||
|             .clone(), | ||||
|     ) | ||||
|     .ok()?; | ||||
| 
 | ||||
|     Some(membership == MembershipState::Join) | ||||
| } | ||||
| 
 | ||||
| /// Is the user allowed to send a specific event based on the rooms power levels.
 | ||||
| ///
 | ||||
| /// Does the event have the correct userId as its state_key if it's not the "" state_key.
 | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user