mirror of
https://gitlab.com/famedly/conduit.git
synced 2024-12-29 13:14:26 +01:00
style(db/rooms): refactor admin room pdu validating
This commit is contained in:
parent
da2dbd2877
commit
912491cb28
1 changed files with 39 additions and 36 deletions
|
@ -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 => {
|
||||||
let content = serde_json::from_str::<ExtractMembership>(pdu.content.get())
|
#[derive(Deserialize)]
|
||||||
.map_err(|_| Error::bad_database("Invalid content in pdu."))?;
|
struct ExtractMembership {
|
||||||
|
membership: MembershipState,
|
||||||
if content.membership == MembershipState::Leave {
|
|
||||||
let server_user = format!("@conduit:{}", services().globals.server_name());
|
|
||||||
if sender == &server_user {
|
|
||||||
warn!("Conduit user cannot leave from admins room");
|
|
||||||
return Err(Error::BadRequest(
|
|
||||||
ErrorKind::Forbidden,
|
|
||||||
"Conduit user cannot leave from admins room.",
|
|
||||||
));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
let count = services()
|
let content = serde_json::from_str::<ExtractMembership>(pdu.content.get())
|
||||||
.rooms
|
.map_err(|_| Error::bad_database("Invalid content in pdu."))?;
|
||||||
.state_cache
|
|
||||||
.room_members(room_id)
|
if content.membership == MembershipState::Leave {
|
||||||
.filter_map(|m| m.ok())
|
let server_user = format!("@conduit:{}", services().globals.server_name());
|
||||||
.filter(|m| m.server_name() == services().globals.server_name())
|
if sender == &server_user {
|
||||||
.count();
|
warn!("Conduit user cannot leave from admins room");
|
||||||
if count < 3 {
|
return Err(Error::BadRequest(
|
||||||
warn!("Last admin cannot leave from admins room");
|
ErrorKind::Forbidden,
|
||||||
return Err(Error::BadRequest(
|
"Conduit user cannot leave from admins room.",
|
||||||
ErrorKind::Forbidden,
|
));
|
||||||
"Last admin cannot leave from admins room.",
|
}
|
||||||
));
|
|
||||||
|
let count = services()
|
||||||
|
.rooms
|
||||||
|
.state_cache
|
||||||
|
.room_members(room_id)
|
||||||
|
.filter_map(|m| m.ok())
|
||||||
|
.filter(|m| m.server_name() == services().globals.server_name())
|
||||||
|
.count();
|
||||||
|
if count < 3 {
|
||||||
|
warn!("Last admin cannot leave from admins room");
|
||||||
|
return Err(Error::BadRequest(
|
||||||
|
ErrorKind::Forbidden,
|
||||||
|
"Last admin cannot leave from admins room.",
|
||||||
|
));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
_ => {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue