use RoomMemberEventContent for send_join/send_leave

Signed-off-by: strawberry <strawberry@puppygock.gay>
This commit is contained in:
strawberry 2024-07-02 14:46:53 -04:00
parent 20aab1792b
commit 75731671d1
2 changed files with 21 additions and 27 deletions

View file

@ -4,7 +4,10 @@ use std::collections::BTreeMap;
use ruma::{ use ruma::{
api::{client::error::ErrorKind, federation::membership::create_join_event}, api::{client::error::ErrorKind, federation::membership::create_join_event},
events::{room::member::MembershipState, StateEventType}, events::{
room::member::{MembershipState, RoomMemberEventContent},
StateEventType,
},
CanonicalJsonValue, OwnedServerName, OwnedUserId, RoomId, ServerName, CanonicalJsonValue, OwnedServerName, OwnedUserId, RoomId, ServerName,
}; };
use serde_json::value::{to_raw_value, RawValue as RawJsonValue}; use serde_json::value::{to_raw_value, RawValue as RawJsonValue};
@ -63,22 +66,16 @@ async fn create_join_event(
)); ));
} }
let content = value let content: RoomMemberEventContent = serde_json::from_value(
.get("content") value
.ok_or_else(|| Error::BadRequest(ErrorKind::InvalidParam, "Event missing content property."))? .get("content")
.as_object() .ok_or_else(|| Error::BadRequest(ErrorKind::InvalidParam, "Event missing content property"))?
.ok_or_else(|| Error::BadRequest(ErrorKind::InvalidParam, "Event content is empty or invalid."))?;
let membership: MembershipState = serde_json::from_value(
content
.get("membership")
.ok_or_else(|| Error::BadRequest(ErrorKind::InvalidParam, "Event content missing membership property."))?
.clone() .clone()
.into(), .into(),
) )
.map_err(|_| Error::BadRequest(ErrorKind::BadJson, "Event has an invalid membership state."))?; .map_err(|_| Error::BadRequest(ErrorKind::InvalidParam, "Event content is empty or invalid"))?;
if membership != MembershipState::Join { if content.membership != MembershipState::Join {
return Err(Error::BadRequest( return Err(Error::BadRequest(
ErrorKind::InvalidParam, ErrorKind::InvalidParam,
"Not allowed to send a non-join membership event to join endpoint.", "Not allowed to send a non-join membership event to join endpoint.",
@ -122,7 +119,7 @@ async fn create_join_event(
ErrorKind::InvalidParam, ErrorKind::InvalidParam,
"State key does not match sender user", "State key does not match sender user",
)); ));
} };
ruma::signatures::hash_and_sign_event( ruma::signatures::hash_and_sign_event(
services().globals.server_name().as_str(), services().globals.server_name().as_str(),

View file

@ -4,7 +4,10 @@ use std::collections::BTreeMap;
use ruma::{ use ruma::{
api::{client::error::ErrorKind, federation::membership::create_leave_event}, api::{client::error::ErrorKind, federation::membership::create_leave_event},
events::{room::member::MembershipState, StateEventType}, events::{
room::member::{MembershipState, RoomMemberEventContent},
StateEventType,
},
OwnedServerName, OwnedUserId, RoomId, ServerName, OwnedServerName, OwnedUserId, RoomId, ServerName,
}; };
use serde_json::value::RawValue as RawJsonValue; use serde_json::value::RawValue as RawJsonValue;
@ -62,22 +65,16 @@ async fn create_leave_event(origin: &ServerName, room_id: &RoomId, pdu: &RawJson
)); ));
}; };
let content = value let content: RoomMemberEventContent = serde_json::from_value(
.get("content") value
.ok_or_else(|| Error::BadRequest(ErrorKind::InvalidParam, "Event missing content property."))? .get("content")
.as_object() .ok_or_else(|| Error::BadRequest(ErrorKind::InvalidParam, "Event missing content property"))?
.ok_or_else(|| Error::BadRequest(ErrorKind::InvalidParam, "Event content not an object."))?;
let membership: MembershipState = serde_json::from_value(
content
.get("membership")
.ok_or_else(|| Error::BadRequest(ErrorKind::InvalidParam, "Event membership is missing."))?
.clone() .clone()
.into(), .into(),
) )
.map_err(|_| Error::BadRequest(ErrorKind::BadJson, "Event membership state is not valid."))?; .map_err(|_| Error::BadRequest(ErrorKind::InvalidParam, "Event content is empty or invalid"))?;
if membership != MembershipState::Leave { if content.membership != MembershipState::Leave {
return Err(Error::BadRequest( return Err(Error::BadRequest(
ErrorKind::InvalidParam, ErrorKind::InvalidParam,
"Not allowed to send a non-leave membership event to leave endpoint.", "Not allowed to send a non-leave membership event to leave endpoint.",