refactor incoming remote membership event validation

The structure is now the same as the validation we're adding for
outgoing remote membership.
This commit is contained in:
Olivia Lee 2025-12-30 13:20:16 -08:00 committed by Charles Hall
parent f38f2d4fab
commit f29aebbcf4

View file

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