diff --git a/Cargo.lock b/Cargo.lock index c95b1718..13647296 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -965,9 +965,9 @@ dependencies = [ [[package]] name = "fastrand" -version = "1.4.1" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77b705829d1e87f762c2df6da140b26af5839e1033aa84aa5f56bb688e4e1bdb" +checksum = "b394ed3d285a429378d3b384b9eb1285267e7df4b166df24b7a6939a04dc392e" dependencies = [ "instant", ] @@ -1457,7 +1457,7 @@ checksum = "320cfe77175da3a483efed4bc0adc1968ca050b098ce4f2f1c13a56626128790" [[package]] name = "libmcaptcha" version = "0.1.4" -source = "git+https://github.com/mCaptcha/libmcaptcha?branch=master#22f1a4ccc0a29b5f0fe8437cea1bdc08dc9f4c9b" +source = "git+https://github.com/mCaptcha/libmcaptcha?branch=master#6eac51de1035c20954752642b4fbdbf6ae3bec6d" dependencies = [ "actix", "derive_builder", @@ -3057,9 +3057,9 @@ checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" [[package]] name = "tokio" -version = "1.8.1" +version = "1.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98c8b05dc14c75ea83d63dd391100353789f5f24b8b3866542a5e85c8be8e985" +checksum = "c2602b8af3767c285202012822834005f596c811042315fa7e9f5b12b2a43207" dependencies = [ "autocfg", "bytes", diff --git a/src/api/v1/mcaptcha/captcha.rs b/src/api/v1/mcaptcha/captcha.rs index d54981ad..30fa48a4 100644 --- a/src/api/v1/mcaptcha/captcha.rs +++ b/src/api/v1/mcaptcha/captcha.rs @@ -18,7 +18,7 @@ use std::borrow::Cow; use actix_identity::Identity; use actix_web::{web, HttpResponse, Responder}; -use libmcaptcha::master::messages::RenameBuilder; +use libmcaptcha::master::messages::{RemoveCaptcha, RenameBuilder}; use serde::{Deserialize, Serialize}; use super::get_random; @@ -205,6 +205,7 @@ async fn delete_mcaptcha( match rec { Ok(rec) => { if Config::verify(&rec.password, &payload.password)? { + let payload = payload.into_inner(); sqlx::query!( "DELETE FROM mcaptcha_levels WHERE config_id = ( @@ -224,6 +225,12 @@ async fn delete_mcaptcha( ) .execute(&data.db) .await?; + if let Err(err) = data.captcha.remove(RemoveCaptcha(payload.key)).await { + log::error!( + "Error while trying to remove captcha from cache {}", + err + ); + } Ok(HttpResponse::Ok()) } else { Err(ServiceError::WrongPassword) diff --git a/src/data.rs b/src/data.rs index 4d7f86dd..8ec213fa 100644 --- a/src/data.rs +++ b/src/data.rs @@ -32,7 +32,7 @@ use libmcaptcha::{ cache::messages::VerifyCaptchaResult, cache::Save, errors::CaptchaResult, - master::messages::{AddSite, Rename}, + master::messages::{AddSite, RemoveCaptcha, Rename}, master::{embedded::master::Master as EmbeddedMaster, Master as MasterTrait}, pow::ConfigBuilder as PoWConfigBuilder, pow::PoWConfig, @@ -100,6 +100,15 @@ impl SystemGroup { Ok(()) } + /// utility function to remove captcha + pub async fn remove(&self, msg: RemoveCaptcha) -> CaptchaResult<()> { + match self { + Self::Embedded(val) => val.master.send(msg).await?, + Self::Redis(val) => val.master.send(msg).await?, + }; + Ok(()) + } + fn new_system(m: Addr, c: Addr) -> System { let pow = PoWConfigBuilder::default() .salt(SETTINGS.pow.salt.clone())