mcaptcha/api/v1/mcaptcha/
delete.rs1use actix_identity::Identity;
7use actix_web::{web, HttpResponse, Responder};
8use libmcaptcha::master::messages::RemoveCaptcha;
9use serde::{Deserialize, Serialize};
10
11use db_core::Login;
12
13use crate::errors::*;
14use crate::AppData;
15
16#[derive(Clone, Debug, Deserialize, Serialize)]
17pub struct DeleteCaptcha {
18 pub key: String,
19 pub password: String,
20}
21
22#[my_codegen::post(
23 path = "crate::V1_API_ROUTES.captcha.delete",
24 wrap = "crate::api::v1::get_middleware()"
25)]
26async fn delete(
27 payload: web::Json<DeleteCaptcha>,
28 data: AppData,
29 id: Identity,
30) -> ServiceResult<impl Responder> {
31 use argon2_creds::Config;
32
33 let username = id.identity().unwrap();
34
35 let hash = data.db.get_password(&Login::Username(&username)).await?;
36
37 if !Config::verify(&hash.hash, &payload.password)? {
38 return Err(ServiceError::WrongPassword);
39 }
40 let payload = payload.into_inner();
41 data.db.delete_captcha(&username, &payload.key).await?;
42
43 if let Err(err) = data.captcha.remove(RemoveCaptcha(payload.key)).await {
44 log::error!("Error while trying to remove captcha from cache {}", err);
45 }
46 Ok(HttpResponse::Ok())
47}