Skip to main content

tuwunel_api/client/admin/users/
deactivate_account.rs

1use axum::extract::State;
2use synapse_admin_api::users::deactivate_account::v1 as deactivate_account;
3use tuwunel_core::{Err, Result};
4
5use crate::{Ruma, client::admin::require_admin};
6
7/// # `POST /_synapse/admin/v1/deactivate/{user_id}`
8pub(crate) async fn admin_deactivate_account_route(
9	State(services): State<crate::State>,
10	body: Ruma<deactivate_account::Request>,
11) -> Result<deactivate_account::Response> {
12	require_admin(&services, body.sender_user()).await?;
13
14	if !services.globals.user_is_local(&body.user_id) {
15		return Err!(Request(InvalidParam("Can only deactivate local users")));
16	}
17
18	if !services.users.exists(&body.user_id).await {
19		return Err!(Request(NotFound("User not found")));
20	}
21
22	services
23		.users
24		.deactivate_account(&body.user_id)
25		.await?;
26
27	if body.erase {
28		services.users.set_erased(&body.user_id);
29	}
30
31	Ok(deactivate_account::Response::new("success".to_owned()))
32}