dedup room directory banned server check.
Signed-off-by: Jason Volk <jason@zemos.net>
This commit is contained in:
@@ -51,19 +51,7 @@ pub(crate) async fn get_public_rooms_filtered_route(
|
|||||||
InsecureClientIp(client): InsecureClientIp,
|
InsecureClientIp(client): InsecureClientIp,
|
||||||
body: Ruma<get_public_rooms_filtered::v3::Request>,
|
body: Ruma<get_public_rooms_filtered::v3::Request>,
|
||||||
) -> Result<get_public_rooms_filtered::v3::Response> {
|
) -> Result<get_public_rooms_filtered::v3::Response> {
|
||||||
if let Some(server) = &body.server {
|
check_banned(&services, body.server.as_deref())?;
|
||||||
if services
|
|
||||||
.config
|
|
||||||
.forbidden_remote_room_directory_server_names
|
|
||||||
.is_match(server.host())
|
|
||||||
|| services
|
|
||||||
.config
|
|
||||||
.forbidden_remote_server_names
|
|
||||||
.is_match(server.host())
|
|
||||||
{
|
|
||||||
return Err!(Request(Forbidden("Server is banned on this homeserver.")));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
let response = get_public_rooms_filtered_helper(
|
let response = get_public_rooms_filtered_helper(
|
||||||
&services,
|
&services,
|
||||||
@@ -92,19 +80,7 @@ pub(crate) async fn get_public_rooms_route(
|
|||||||
InsecureClientIp(client): InsecureClientIp,
|
InsecureClientIp(client): InsecureClientIp,
|
||||||
body: Ruma<get_public_rooms::v3::Request>,
|
body: Ruma<get_public_rooms::v3::Request>,
|
||||||
) -> Result<get_public_rooms::v3::Response> {
|
) -> Result<get_public_rooms::v3::Response> {
|
||||||
if let Some(server) = &body.server {
|
check_banned(&services, body.server.as_deref())?;
|
||||||
if services
|
|
||||||
.config
|
|
||||||
.forbidden_remote_room_directory_server_names
|
|
||||||
.is_match(server.host())
|
|
||||||
|| services
|
|
||||||
.config
|
|
||||||
.forbidden_remote_server_names
|
|
||||||
.is_match(server.host())
|
|
||||||
{
|
|
||||||
return Err!(Request(Forbidden("Server is banned on this homeserver.")));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
let response = get_public_rooms_filtered_helper(
|
let response = get_public_rooms_filtered_helper(
|
||||||
&services,
|
&services,
|
||||||
@@ -490,3 +466,25 @@ async fn public_rooms_chunk(services: &Services, room_id: OwnedRoomId) -> Public
|
|||||||
world_readable,
|
world_readable,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn check_banned(services: &Services, server: Option<&ServerName>) -> Result {
|
||||||
|
let Some(server) = server else {
|
||||||
|
return Ok(());
|
||||||
|
};
|
||||||
|
|
||||||
|
let forbidden_remote_directory = services
|
||||||
|
.config
|
||||||
|
.forbidden_remote_room_directory_server_names
|
||||||
|
.is_match(server.host());
|
||||||
|
|
||||||
|
let forbidden_remote_server = services
|
||||||
|
.config
|
||||||
|
.forbidden_remote_server_names
|
||||||
|
.is_match(server.host());
|
||||||
|
|
||||||
|
if forbidden_remote_directory || forbidden_remote_server {
|
||||||
|
Err!(Request(Forbidden("Server is banned on this homeserver.")))
|
||||||
|
} else {
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user