diff --git a/src/api/server_server.rs b/src/api/server_server.rs index 55eba877..9696d6ea 100644 --- a/src/api/server_server.rs +++ b/src/api/server_server.rs @@ -1778,39 +1778,34 @@ fn validate_remote_member_event( membership: &MembershipState, event: &CanonicalJsonObject, ) -> Result<()> { - let event_type = event.get("type").ok_or_else(|| { - Error::BadRequest( + let Some(event_type) = event.get("type") else { + return Err(Error::BadRequest( ErrorKind::InvalidParam, "Event missing type property", - ) - })?; - if event_type.as_str() != Some(RoomMemberEventContent::TYPE) { + )); + }; + if event_type != &RoomMemberEventContent::TYPE { return Err(Error::BadRequest( ErrorKind::InvalidParam, "Event is not a membership event", )); } - let content: RoomMemberEventContent = serde_json::from_value( - event - .get("content") - .ok_or_else(|| { - Error::BadRequest( - ErrorKind::InvalidParam, - "Event missing content property", - ) - })? - .clone() - .into(), - ) - .map_err(|_| { - Error::BadRequest( + let Some(content) = + event.get("content").and_then(|content| content.as_object()) + else { + return Err(Error::BadRequest( ErrorKind::InvalidParam, - "Event content is empty or invalid", - ) - })?; - - if &content.membership != membership { + "Event content property is missing or not an object", + )); + }; + let Some(event_membership) = content.get("membership") else { + return Err(Error::BadRequest( + ErrorKind::InvalidParam, + "Event content is missing membership property", + )); + }; + if event_membership != &membership.as_str() { return Err(Error::BadRequest( ErrorKind::InvalidParam, "Not allowed to send a non-invite membership event to invite \