feat: reject invites over federation

This commit is contained in:
Timo Kösters 2021-04-13 15:00:45 +02:00
parent 662a0cf1df
commit b4f79b77ba
No known key found for this signature in database
GPG key ID: 24DA7517711A2BA4
10 changed files with 391 additions and 241 deletions

View file

@ -91,37 +91,7 @@ pub async fn leave_room_route(
) -> ConduitResult<leave_room::Response> {
let sender_user = body.sender_user.as_ref().expect("user is authenticated");
let mut event = serde_json::from_value::<Raw<member::MemberEventContent>>(
db.rooms
.room_state_get(
&body.room_id,
&EventType::RoomMember,
&sender_user.to_string(),
)?
.ok_or(Error::BadRequest(
ErrorKind::BadState,
"Cannot leave a room you are not a member of.",
))?
.content,
)
.expect("from_value::<Raw<..>> can never fail")
.deserialize()
.map_err(|_| Error::bad_database("Invalid member event in database."))?;
event.membership = member::MembershipState::Leave;
db.rooms.build_and_append_pdu(
PduBuilder {
event_type: EventType::RoomMember,
content: serde_json::to_value(event).expect("event is valid, we just created it"),
unsigned: None,
state_key: Some(sender_user.to_string()),
redacts: None,
},
&sender_user,
&body.room_id,
&db,
)?;
db.rooms.leave_room(sender_user, &body.room_id, &db).await?;
db.flush().await?;
@ -480,6 +450,7 @@ async fn join_room_by_id_helper(
Error::BadServerResponse("Invalid make_join event json received from server.")
})?;
// TODO: Is origin needed?
join_event_stub.insert(
"origin".to_owned(),
to_canonical_value(db.globals.server_name())
@ -699,5 +670,7 @@ async fn join_room_by_id_helper(
)?;
}
db.flush().await?;
Ok(join_room_by_id::Response::new(room_id.clone()).into())
}