2025-04-02 22:51:17 -04:00
|
|
|
use axum::extract::State;
|
2026-04-23 20:02:48 +01:00
|
|
|
use axum_client_ip::ClientIp;
|
2026-04-09 11:39:53 -04:00
|
|
|
use conduwuit::{Err, Result};
|
|
|
|
|
use ruma::api::client::room::get_summary;
|
|
|
|
|
use service::rooms::summary::Accessibility;
|
2025-04-02 22:51:17 -04:00
|
|
|
|
2026-05-26 13:49:17 -04:00
|
|
|
use crate::{Ruma, router::ClientIdentity};
|
2025-04-02 22:51:17 -04:00
|
|
|
|
2025-07-01 01:36:58 +01:00
|
|
|
/// # `GET /_matrix/client/v1/room_summary/{roomIdOrAlias}`
|
2025-04-02 22:51:17 -04:00
|
|
|
///
|
|
|
|
|
/// Returns a short description of the state of a room.
|
2026-01-04 03:04:37 +00:00
|
|
|
#[tracing::instrument(skip_all, fields(%client), name = "room_summary", level = "info")]
|
2025-04-02 22:51:17 -04:00
|
|
|
pub(crate) async fn get_room_summary(
|
|
|
|
|
State(services): State<crate::State>,
|
2026-04-23 20:02:48 +01:00
|
|
|
ClientIp(client): ClientIp,
|
2026-04-09 11:39:53 -04:00
|
|
|
body: Ruma<get_summary::v1::Request>,
|
|
|
|
|
) -> Result<get_summary::v1::Response> {
|
2025-04-02 22:51:17 -04:00
|
|
|
let (room_id, servers) = services
|
|
|
|
|
.rooms
|
|
|
|
|
.alias
|
|
|
|
|
.resolve_with_servers(&body.room_id_or_alias, Some(body.via.clone()))
|
|
|
|
|
.await?;
|
|
|
|
|
|
|
|
|
|
if services.rooms.metadata.is_banned(&room_id).await {
|
|
|
|
|
return Err!(Request(Forbidden("This room is banned on this homeserver.")));
|
|
|
|
|
}
|
|
|
|
|
|
2026-04-09 11:39:53 -04:00
|
|
|
let summary = services
|
2025-04-06 13:17:13 -04:00
|
|
|
.rooms
|
2026-04-09 11:39:53 -04:00
|
|
|
.summary
|
2026-05-26 13:28:23 -04:00
|
|
|
.get_room_summary_for_user(
|
2026-05-26 13:49:17 -04:00
|
|
|
body.identity.as_ref().map(ClientIdentity::sender_user),
|
2026-05-26 13:28:23 -04:00
|
|
|
&room_id,
|
|
|
|
|
&servers,
|
|
|
|
|
)
|
2025-12-31 17:56:00 +00:00
|
|
|
.await?;
|
2025-04-04 01:05:43 +00:00
|
|
|
|
2026-04-09 11:39:53 -04:00
|
|
|
match summary {
|
|
|
|
|
| Accessibility::Accessible(summary) => Ok(get_summary::v1::Response::new(summary)),
|
|
|
|
|
| Accessibility::Inaccessible => {
|
|
|
|
|
Err!(Request(Forbidden("You may not preview this room."), FORBIDDEN))
|
2025-04-02 22:51:17 -04:00
|
|
|
},
|
2026-04-09 11:39:53 -04:00
|
|
|
| Accessibility::NotFound => {
|
|
|
|
|
Err!(Request(Forbidden("This room does not exist."), FORBIDDEN))
|
2025-04-02 22:51:17 -04:00
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
}
|