Skip to main content

tuwunel_api/client/admin/users/
memberships.rs

1use axum::extract::State;
2use futures::StreamExt;
3use synapse_admin_api::users::memberships::v1 as memberships;
4use tuwunel_core::Result;
5
6use crate::{Ruma, client::admin::require_admin};
7
8/// # `GET /_synapse/admin/v1/users/{user_id}/memberships`
9///
10/// For remote users this is limited to rooms the server participates in,
11/// matching Synapse.
12pub(crate) async fn admin_memberships_route(
13	State(services): State<crate::State>,
14	body: Ruma<memberships::Request>,
15) -> Result<memberships::Response> {
16	require_admin(&services, body.sender_user()).await?;
17
18	let map = services
19		.state_cache
20		.user_memberships(&body.user_id, None)
21		.map(|(membership, room_id)| (room_id.to_owned(), membership))
22		.collect()
23		.await;
24
25	Ok(memberships::Response::new(map))
26}