style(db/rooms): refactor admin room pdu validating

merge-requests/181/head
AndSDev 2 years ago
parent da2dbd2877
commit 912491cb28

@ -691,47 +691,50 @@ impl Service {
.expect("#admins:server_name is a valid room alias"), .expect("#admins:server_name is a valid room alias"),
)?; )?;
if admin_room.filter(|v| v == room_id).is_some() { if admin_room.filter(|v| v == room_id).is_some() {
if pdu.event_type() == &RoomEventType::RoomEncryption { match pdu.event_type() {
warn!("Encryption is not allowed in the admins room"); RoomEventType::RoomEncryption => {
return Err(Error::BadRequest( warn!("Encryption is not allowed in the admins room");
ErrorKind::Forbidden, return Err(Error::BadRequest(
"Encryption is not allowed in the admins room.", ErrorKind::Forbidden,
)); "Encryption is not allowed in the admins room.",
} ));
if pdu.event_type() == &RoomEventType::RoomMember {
#[derive(Deserialize)]
struct ExtractMembership {
membership: MembershipState,
} }
RoomEventType::RoomMember => {
#[derive(Deserialize)]
struct ExtractMembership {
membership: MembershipState,
}
let content = serde_json::from_str::<ExtractMembership>(pdu.content.get()) let content = serde_json::from_str::<ExtractMembership>(pdu.content.get())
.map_err(|_| Error::bad_database("Invalid content in pdu."))?; .map_err(|_| Error::bad_database("Invalid content in pdu."))?;
if content.membership == MembershipState::Leave { if content.membership == MembershipState::Leave {
let server_user = format!("@conduit:{}", services().globals.server_name()); let server_user = format!("@conduit:{}", services().globals.server_name());
if sender == &server_user { if sender == &server_user {
warn!("Conduit user cannot leave from admins room"); warn!("Conduit user cannot leave from admins room");
return Err(Error::BadRequest( return Err(Error::BadRequest(
ErrorKind::Forbidden, ErrorKind::Forbidden,
"Conduit user cannot leave from admins room.", "Conduit user cannot leave from admins room.",
)); ));
} }
let count = services() let count = services()
.rooms .rooms
.state_cache .state_cache
.room_members(room_id) .room_members(room_id)
.filter_map(|m| m.ok()) .filter_map(|m| m.ok())
.filter(|m| m.server_name() == services().globals.server_name()) .filter(|m| m.server_name() == services().globals.server_name())
.count(); .count();
if count < 3 { if count < 3 {
warn!("Last admin cannot leave from admins room"); warn!("Last admin cannot leave from admins room");
return Err(Error::BadRequest( return Err(Error::BadRequest(
ErrorKind::Forbidden, ErrorKind::Forbidden,
"Last admin cannot leave from admins room.", "Last admin cannot leave from admins room.",
)); ));
}
} }
} }
_ => {}
} }
} }

Loading…
Cancel
Save