Skip to main content

tuwunel_api/client/admin/rooms/
make_room_admin.rs

1use axum::extract::State;
2use synapse_admin_api::rooms::make_room_admin::v1::{Request, Response};
3use tuwunel_core::Result;
4
5use crate::{Ruma, client::admin::require_admin};
6
7/// # `POST /_synapse/admin/v1/rooms/{room_id_or_alias}/make_room_admin`
8///
9/// Grants room admin powers to a user by impersonating the highest-powered
10/// local member. The target defaults to the requesting admin.
11pub(crate) async fn admin_make_room_admin_route(
12	State(services): State<crate::State>,
13	body: Ruma<Request>,
14) -> Result<Response> {
15	let sender_user = body.sender_user();
16
17	require_admin(&services, sender_user).await?;
18
19	let (room_id, _servers) = services
20		.alias
21		.maybe_resolve_with_servers(&body.room_id_or_alias, None)
22		.await?;
23
24	let target = body.user_id.as_deref().unwrap_or(sender_user);
25
26	services
27		.admin
28		.make_room_admin(&room_id, target)
29		.await?;
30
31	Ok(Response {})
32}