]> Untitled Git - lemmy.git/blob - crates/api_crud/src/user/delete.rs
Adding admin purging of DB items and pictures. #904 #1331 (#1809)
[lemmy.git] / crates / api_crud / src / user / delete.rs
1 use crate::PerformCrud;
2 use actix_web::web::Data;
3 use bcrypt::verify;
4 use lemmy_api_common::{
5   person::{DeleteAccount, DeleteAccountResponse},
6   utils::{delete_user_account, get_local_user_view_from_jwt},
7 };
8 use lemmy_apub::protocol::activities::deletion::delete_user::DeleteUser;
9 use lemmy_utils::{error::LemmyError, ConnectionId};
10 use lemmy_websocket::LemmyContext;
11
12 #[async_trait::async_trait(?Send)]
13 impl PerformCrud for DeleteAccount {
14   type Response = DeleteAccountResponse;
15
16   #[tracing::instrument(skip(self, context, _websocket_id))]
17   async fn perform(
18     &self,
19     context: &Data<LemmyContext>,
20     _websocket_id: Option<ConnectionId>,
21   ) -> Result<Self::Response, LemmyError> {
22     let data = self;
23     let local_user_view =
24       get_local_user_view_from_jwt(data.auth.as_ref(), context.pool(), context.secret()).await?;
25
26     // Verify the password
27     let valid: bool = verify(
28       &data.password,
29       &local_user_view.local_user.password_encrypted,
30     )
31     .unwrap_or(false);
32     if !valid {
33       return Err(LemmyError::from_message("password_incorrect"));
34     }
35
36     delete_user_account(
37       local_user_view.person.id,
38       context.pool(),
39       &context.settings(),
40       context.client(),
41     )
42     .await?;
43     DeleteUser::send(&local_user_view.person.into(), context).await?;
44
45     Ok(DeleteAccountResponse {})
46   }
47 }