diff --git a/src/api/client_server/directory.rs b/src/api/client_server/directory.rs index 33ee3e63..c9bdfc53 100644 --- a/src/api/client_server/directory.rs +++ b/src/api/client_server/directory.rs @@ -34,15 +34,7 @@ use crate::{services, Error, Result, Ruma}; pub async fn get_public_rooms_filtered_route( body: Ruma, ) -> Result { - if !services() - .globals - .config - .allow_public_room_directory_without_auth - { - let _sender_user = body.sender_user.as_ref().expect("user is authenticated"); - } - - get_public_rooms_filtered_helper( + let response = get_public_rooms_filtered_helper( body.server.as_deref(), body.limit, body.since.as_deref(), @@ -50,6 +42,12 @@ pub async fn get_public_rooms_filtered_route( &body.room_network, ) .await + .map_err(|e| { + warn!("Failed to return our /publicRooms: {e}"); + Error::BadRequest(ErrorKind::Unknown, "Failed to return this server's public room list.") + })?; + + Ok(response) } /// # `GET /_matrix/client/v3/publicRooms` @@ -60,14 +58,6 @@ pub async fn get_public_rooms_filtered_route( pub async fn get_public_rooms_route( body: Ruma, ) -> Result { - if !services() - .globals - .config - .allow_public_room_directory_without_auth - { - let _sender_user = body.sender_user.as_ref().expect("user is authenticated"); - } - let response = get_public_rooms_filtered_helper( body.server.as_deref(), body.limit, @@ -75,7 +65,11 @@ pub async fn get_public_rooms_route( &Filter::default(), &RoomNetwork::Matrix, ) - .await?; + .await + .map_err(|e| { + warn!("Failed to return our /publicRooms: {e}"); + Error::BadRequest(ErrorKind::Unknown, "Failed to return this server's public room list.") + })?; Ok(get_public_rooms::v3::Response { chunk: response.chunk, diff --git a/src/api/ruma_wrapper/axum.rs b/src/api/ruma_wrapper/axum.rs index d221a0fa..f1ea1b85 100644 --- a/src/api/ruma_wrapper/axum.rs +++ b/src/api/ruma_wrapper/axum.rs @@ -265,6 +265,7 @@ where } }, AuthScheme::None => match parts.uri.path() { + // TOOD: can we do a better check here? // allow_public_room_directory_without_auth "/_matrix/client/v3/publicRooms" | "/_matrix/client/r0/publicRooms" => { if !services() diff --git a/src/api/server_server.rs b/src/api/server_server.rs index dcd55555..8c3d36c9 100644 --- a/src/api/server_server.rs +++ b/src/api/server_server.rs @@ -33,7 +33,7 @@ use ruma::{ }, OutgoingResponse, }, - directory::{Filter, RoomNetwork}, + directory::Filter, events::{ receipt::{ReceiptEvent, ReceiptEventContent, ReceiptType}, room::{ @@ -162,7 +162,11 @@ pub async fn get_public_rooms_filtered_route( &body.filter, &body.room_network, ) - .await?; + .await + .map_err(|e| { + warn!("Failed to return our /publicRooms: {e}"); + Error::BadRequest(ErrorKind::Unknown, "Failed to return this server's public room list.") + })?; Ok(get_public_rooms_filtered::v1::Response { chunk: response.chunk, @@ -190,9 +194,13 @@ pub async fn get_public_rooms_route( body.limit, body.since.as_deref(), &Filter::default(), - &RoomNetwork::Matrix, + &body.room_network, ) - .await?; + .await + .map_err(|e| { + warn!("Failed to return our /publicRooms: {e}"); + Error::BadRequest(ErrorKind::Unknown, "Failed to return this server's public room list.") + })?; Ok(get_public_rooms::v1::Response { chunk: response.chunk,