Skip to main content

tuwunel_api_admin/users/
reset_password.rs

1use axum::extract::State;
2use synapse_admin_api::users::reset_password::v1 as reset_password;
3use tuwunel_core::{Err, Result};
4
5use crate::{Ruma, refuse_server_user, require_admin};
6
7/// # `POST /_synapse/admin/v1/reset_password/{user_id}`
8pub(crate) async fn admin_reset_password_route(
9	State(services): State<crate::State>,
10	body: Ruma<reset_password::Request>,
11) -> Result<reset_password::Response> {
12	require_admin(&services, body.sender_user()).await?;
13	refuse_server_user(services, &body.user_id)?;
14
15	if !services.users.exists(&body.user_id).await {
16		return Err!(Request(NotFound("User not found")));
17	}
18
19	services
20		.users
21		.set_password(&body.user_id, Some(&body.new_password))
22		.await?;
23
24	if body.logout_devices {
25		services
26			.users
27			.remove_devices(&body.user_id, None)
28			.await;
29	}
30
31	Ok(reset_password::Response::new())
32}