mirror of
https://gitlab.computer.surgery/matrix/grapevine.git
synced 2026-02-04 07:41:23 +01:00
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:
parent
f38f2d4fab
commit
f29aebbcf4
1 changed files with 19 additions and 24 deletions
|
|
@ -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 \
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue