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
 |     // If the sender's current membership state is not join, reject
 | ||||||
|     match check_event_sender_in_room(incoming_event.sender(), &fetch_state) { |     let sender = incoming_event.sender(); | ||||||
|         Some(true) => {} // sender in room
 |     let mem = match fetch_state(&EventType::RoomMember, sender.as_str()) { | ||||||
|         Some(false) => { |         Some(mem) => mem, | ||||||
|             warn!("sender's membership is not join"); |  | ||||||
|             return Ok(false); |  | ||||||
|         } |  | ||||||
|         None => { |         None => { | ||||||
|             warn!("sender not found in room"); |             warn!("sender not found in room"); | ||||||
|             return Ok(false); |             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
 |     // 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.
 | /// 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.
 | /// 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