tuwunel_api/client/admin/
suspend_user.rs1use axum::extract::State;
2use ruma::api::client::admin::suspend_user;
3use tuwunel_core::Result;
4
5use super::authorize;
6use crate::Ruma;
7
8pub(crate) async fn suspend_user_route(
10 State(services): State<crate::State>,
11 body: Ruma<suspend_user::v1::Request>,
12) -> Result<suspend_user::v1::Response> {
13 let sender_user = body.sender_user();
14 let user_id = &body.user_id;
15
16 authorize(&services, sender_user, user_id).await?;
17
18 if services.users.is_suspended(user_id).await == body.suspended {
19 return Ok(suspend_user::v1::Response::new(body.suspended));
20 }
21
22 let action = match body.suspended {
23 | true => {
24 services.users.set_suspended(user_id, sender_user);
25 "suspended"
26 },
27 | false => {
28 services.users.clear_suspended(user_id);
29 "unsuspended"
30 },
31 };
32
33 if services.server.config.admin_room_notices {
34 services
35 .admin
36 .send_text(&format!("{user_id} has been {action} by {sender_user}."))
37 .await;
38 }
39
40 Ok(suspend_user::v1::Response::new(body.suspended))
41}