diff --git a/CHANGELOG.md b/CHANGELOG.md index 4f1dbae..a6f39da 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,7 +2,7 @@ ## Added: -- `Master` trait: provides methods to manage mcaptcha +- `Master` trait: provides methods to manage mCaptcha - `MCaptcha::get_defense()`: returns the `MCaptcha` instance's defense configuration diff --git a/Cargo.lock b/Cargo.lock index d33671d..b582c9a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -253,13 +253,14 @@ dependencies = [ [[package]] name = "derive_more" -version = "0.99.14" +version = "0.99.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cc7b9cef1e351660e5443924e4f43ab25fbbed3e9a5f052df3677deb4d6b320" +checksum = "40eebddd2156ce1bb37b20bbe5151340a31828b1f2d22ba4141f3531710e38df" dependencies = [ "convert_case", "proc-macro2", "quote", + "rustc_version", "syn", ] @@ -406,9 +407,9 @@ dependencies = [ [[package]] name = "instant" -version = "0.1.9" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61124eeebbd69b8190558df225adf7e4caafce0d743919e5d6b19652314ec5ec" +checksum = "bee0328b1209d157ef001c94dd85b4f8f64139adb0eac2659f4b08382b2f474d" dependencies = [ "cfg-if", ] @@ -427,9 +428,9 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] name = "libc" -version = "0.2.97" +version = "0.2.98" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12b8adadd720df158f4d70dfe7ccc6adb0472d7c55ca83445f6a5ab3e36f8fb6" +checksum = "320cfe77175da3a483efed4bc0adc1968ca050b098ce4f2f1c13a56626128790" [[package]] name = "libmcaptcha" @@ -631,6 +632,15 @@ version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e" +[[package]] +name = "pest" +version = "2.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10f4872ae94d7b90ae48754df22fd42ad52ce740b8f370b03da4835417403e53" +dependencies = [ + "ucd-trie", +] + [[package]] name = "pin-project-lite" version = "0.2.7" @@ -783,6 +793,15 @@ version = "0.6.25" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b" +[[package]] +name = "rustc_version" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0dfe2087c51c460008730de8b57e6a320782fbfb312e1f4d520e6c6fae155ee" +dependencies = [ + "semver", +] + [[package]] name = "ryu" version = "1.0.5" @@ -795,6 +814,24 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" +[[package]] +name = "semver" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f301af10236f6df4160f7c3f04eec6dbc70ace82d23326abad5edee88801c6b6" +dependencies = [ + "semver-parser", +] + +[[package]] +name = "semver-parser" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b0bef5b7f9e0df16536d3961cfb6e84331c065b4066afb39768d0e319411f7" +dependencies = [ + "pest", +] + [[package]] name = "serde" version = "1.0.126" @@ -909,9 +946,9 @@ checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" [[package]] name = "tokio" -version = "1.7.1" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fb2ed024293bb19f7a5dc54fe83bf86532a44c12a2bb8ba40d64a4509395ca2" +checksum = "98c8b05dc14c75ea83d63dd391100353789f5f24b8b3866542a5e85c8be8e985" dependencies = [ "autocfg", "bytes", @@ -945,6 +982,12 @@ version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "879f6906492a7cd215bfa4cf595b600146ccfac0c79bcbd1f3000162af5e8b06" +[[package]] +name = "ucd-trie" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56dee185309b50d1f11bfedef0fe6d036842e3fb77413abef29f8f8d1c5d4c1c" + [[package]] name = "unicode-bidi" version = "0.3.5" diff --git a/src/master/mod.rs b/src/master/mod.rs index d4f1815..02c89bc 100644 --- a/src/master/mod.rs +++ b/src/master/mod.rs @@ -28,7 +28,10 @@ pub mod redis; #[cfg(feature = "full")] /// Describes actor handler trait impls that are required by a cache implementation pub trait Master: - actix::Actor + actix::Handler + actix::Handler + actix::Actor + + actix::Handler + + actix::Handler + + actix::Handler { } diff --git a/src/master/redis/master.rs b/src/master/redis/master.rs index d482735..3628ce9 100644 --- a/src/master/redis/master.rs +++ b/src/master/redis/master.rs @@ -19,7 +19,7 @@ use actix::dev::*; use tokio::sync::oneshot; use crate::errors::*; -use crate::master::messages::{AddSite, AddVisitor}; +use crate::master::messages::{AddSite, AddVisitor, Rename}; use crate::master::Master as MasterTrait; use crate::redis::mcaptcha_redis::MCaptchaRedis; use crate::redis::RedisConfig; @@ -76,10 +76,28 @@ impl Handler for Master { } } +impl Handler for Master { + type Result = MessageResult; + + fn handle(&mut self, m: Rename, ctx: &mut Self::Context) -> Self::Result { + let (tx, rx) = oneshot::channel(); + + let con = self.redis.get_client(); + let fut = async move { + let res = con.rename_captcha(&m.name, &m.rename_to).await; + let _ = tx.send(res); + } + .into_actor(self); + ctx.wait(fut); + MessageResult(rx) + } +} + #[cfg(test)] mod tests { use super::*; use crate::master::embedded::counter::tests::get_mcaptcha; + use crate::master::messages::RenameBuilder; use crate::master::redis::master::Master; use crate::redis::RedisConfig; @@ -88,6 +106,8 @@ mod tests { #[actix_rt::test] async fn redis_master_works() { const CAPTCHA_NAME: &str = "REDIS_MASTER_CAPTCHA_TEST"; + const RENAME_CAPTCHA_NAME: &str = "RENAME_REDIS_MASTER_CAPTCHA_TEST"; + let master = Master::new(RedisConfig::Single(REDIS_URL.into())).await; let sec_master = Master::new(RedisConfig::Single(REDIS_URL.into())).await; let r = sec_master.unwrap().redis.get_client(); @@ -96,6 +116,11 @@ mod tests { let master = master.unwrap(); { let _ = master.redis.get_client().delete_captcha(CAPTCHA_NAME).await; + let _ = master + .redis + .get_client() + .delete_captcha(RENAME_CAPTCHA_NAME) + .await; } let addr = master.start(); @@ -118,6 +143,13 @@ mod tests { actix::clock::sleep(timer_expire).await; let visitors = r.get_visitors(CAPTCHA_NAME).await.unwrap(); assert_eq!(visitors, 0); + + let rename = RenameBuilder::default() + .name(CAPTCHA_NAME.into()) + .rename_to(RENAME_CAPTCHA_NAME.into()) + .build() + .unwrap(); + assert!(addr.send(rename).await.is_ok()); } #[actix_rt::test]