tuwunel_api/client/admin/rooms/
context.rs1use axum::extract::State;
2use ruma::api::client::filter::RoomEventFilter;
3use synapse_admin_api::rooms::admin_context::v1::{Request, Response};
4use tuwunel_core::Result;
5
6use crate::{
7 Ruma,
8 client::{
9 admin::require_admin,
10 context::{ContextArgs, event_context},
11 },
12};
13
14pub(crate) async fn admin_room_context_route(
19 State(services): State<crate::State>,
20 body: Ruma<Request>,
21) -> Result<Response> {
22 require_admin(&services, body.sender_user()).await?;
23
24 let filter: RoomEventFilter = body
25 .filter
26 .as_deref()
27 .map(serde_json::from_str)
28 .transpose()?
29 .unwrap_or_default();
30
31 let response = event_context(&services, ContextArgs {
32 room_id: &body.room_id,
33 event_id: &body.event_id,
34 sender_user: body.sender_user(),
35 sender_device: body.sender_device.as_deref(),
36 filter: &filter,
37 limit: body.limit,
38 bypass_visibility: true,
39 })
40 .await?;
41
42 Ok(Response {
43 start: response.start.unwrap_or_default(),
44 end: response.end.unwrap_or_default(),
45 events_before: response.events_before,
46 event: response.event,
47 events_after: response.events_after,
48 state: response.state,
49 })
50}