]> Untitled Git - lemmy.git/blob - crates/api_crud/src/user/delete.rs
add enable_federated_downvotes site option
[lemmy.git] / crates / api_crud / src / user / delete.rs
1 use activitypub_federation::config::Data;
2 use actix_web::web::Json;
3 use bcrypt::verify;
4 use lemmy_api_common::{
5   context::LemmyContext,
6   person::{DeleteAccount, DeleteAccountResponse},
7   send_activity::{ActivityChannel, SendActivityData},
8   utils::local_user_view_from_jwt,
9 };
10 use lemmy_utils::error::{LemmyError, LemmyErrorType};
11
12 #[tracing::instrument(skip(context))]
13 pub async fn delete_account(
14   data: Json<DeleteAccount>,
15   context: Data<LemmyContext>,
16 ) -> Result<Json<DeleteAccountResponse>, LemmyError> {
17   let local_user_view = local_user_view_from_jwt(data.auth.as_ref(), &context).await?;
18
19   // Verify the password
20   let valid: bool = verify(
21     &data.password,
22     &local_user_view.local_user.password_encrypted,
23   )
24   .unwrap_or(false);
25   if !valid {
26     return Err(LemmyErrorType::IncorrectLogin)?;
27   }
28
29   ActivityChannel::submit_activity(
30     SendActivityData::DeleteUser(local_user_view.person),
31     &context,
32   )
33   .await?;
34
35   Ok(Json(DeleteAccountResponse {}))
36 }