From 8e065f805153d459a3244293e96d05e90ee170e2 Mon Sep 17 00:00:00 2001 From: realaravinth Date: Tue, 9 Mar 2021 15:35:33 +0530 Subject: [PATCH] renamed data to system, hashcache is not 'static --- .gitignore | 1 + src/lib.rs | 2 +- src/master.rs | 16 +++++------ src/{data.rs => system.rs} | 57 ++++++++++++++++++++++++++++++++++---- 4 files changed, 61 insertions(+), 15 deletions(-) rename src/{data.rs => system.rs} (75%) diff --git a/.gitignore b/.gitignore index d5aabfe..8bfa10a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ /target tarpaulin-report.html +.env diff --git a/src/lib.rs b/src/lib.rs index f68a93d..8816998 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -105,8 +105,8 @@ pub mod message { /// message datatypes to interact with [MCaptcha] actor pub mod cache; -pub mod data; pub mod pow; +pub mod system; mod utils; pub use crate::cache::hashcache::HashCache; diff --git a/src/master.rs b/src/master.rs index 87e1466..0a04de3 100644 --- a/src/master.rs +++ b/src/master.rs @@ -28,11 +28,11 @@ use crate::mcaptcha::MCaptcha; /// varying [Defense][crate::defense::Defense] configurations /// so a "master" actor is needed to manage them all #[derive(Clone)] -pub struct Master<'a> { - sites: BTreeMap<&'a str, Addr>, +pub struct Master { + sites: BTreeMap>, } -impl Master<'static> { +impl Master { /// add [MCaptcha] actor to [Master] pub fn add_site(&mut self, details: AddSite) { self.sites.insert(details.id, details.addr.to_owned()); @@ -51,7 +51,7 @@ impl Master<'static> { } } -impl Actor for Master<'static> { +impl Actor for Master { type Context = Context; } @@ -60,7 +60,7 @@ impl Actor for Master<'static> { #[rtype(result = "Option>")] pub struct GetSite(pub String); -impl Handler for Master<'static> { +impl Handler for Master { type Result = MessageResult; fn handle(&mut self, m: GetSite, _ctx: &mut Self::Context) -> Self::Result { @@ -77,11 +77,11 @@ impl Handler for Master<'static> { #[derive(Message, Builder)] #[rtype(result = "()")] pub struct AddSite { - pub id: &'static str, + pub id: String, pub addr: Addr, } -impl Handler for Master<'static> { +impl Handler for Master { type Result = (); fn handle(&mut self, m: AddSite, _ctx: &mut Self::Context) -> Self::Result { @@ -101,7 +101,7 @@ mod tests { let id = "yo"; let mcaptcha = get_counter().start(); let msg = AddSiteBuilder::default() - .id(id) + .id(id.into()) .addr(mcaptcha.clone()) .build() .unwrap(); diff --git a/src/data.rs b/src/system.rs similarity index 75% rename from src/data.rs rename to src/system.rs index d887f0b..2c0d8c4 100644 --- a/src/data.rs +++ b/src/system.rs @@ -15,7 +15,7 @@ * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . */ -//! module describing various bits of data required for an mCaptcha system +//! module describing mCaptcha system use actix::dev::*; use derive_builder::Builder; use pow_sha256::{Config, PoW}; @@ -24,17 +24,19 @@ use crate::cache::messages; use crate::cache::Save; use crate::errors::*; use crate::master::Master; +//use crate::models::*; use crate::pow::*; /// struct describing various bits of data required for an mCaptcha system #[derive(Clone, Builder)] -pub struct Data { - master: Addr>, +pub struct System { + pub master: Addr, cache: Addr, pow: Config, + // db: PgPool, } -impl Data +impl System where T: Save, ::Context: ToEnvelope + ToEnvelope, @@ -77,6 +79,48 @@ where Err(_) => Err(CaptchaError::Default), } } + + // pub async fn register(&self, u: &Users) { + // sqlx::query!("INSERT INTO mcaptcha_users (name) VALUES ($1)", u.name) + // .execute(&self.db) + // .await + // .unwrap(); + // } + // + // pub async fn levels(&self, l: &Levels) { + // sqlx::query!( + // "INSERT INTO mcaptcha_levels (id, difficulty_factor, visitor_threshold) VALUES ($1, $2, $3)", + // l.id, + // l.difficulty_factor, + // l.visitor_threshold + // ) + // .execute(&self.db) + // .await + // .unwrap(); + // } + // + // pub async fn add_mcaptcha(&self, m: &MCaptchaSystem) { + // sqlx::query!( + // "INSERT INTO mcaptcha_config (id, name, duration) VALUES ($1, $2, $3)", + // m.id, + // m.name, + // m.duration + // ) + // .execute(&self.db) + // .await + // .unwrap(); + // } + // + // async fn init_mcaptcha(&self, m: &MCaptchaSystem) { + // let id = sqlx::query_as!( + // Duration, + // "SELECT duration FROM mcaptcha_config WHERE id = ($1)", + // m.id, + // ) + // .fetch_one(&self.db) + // .await + // .unwrap(); + // } } #[cfg(test)] @@ -84,6 +128,7 @@ mod tests { use pow_sha256::ConfigBuilder; + use super::System; use super::*; use crate::cache::HashCache; use crate::master::*; @@ -91,7 +136,7 @@ mod tests { const MCAPTCHA_NAME: &str = "batsense.net"; - async fn boostrap_system() -> Data { + async fn boostrap_system() -> System { let master = Master::new().start(); let mcaptcha = get_counter().start(); let pow = get_config(); @@ -105,7 +150,7 @@ mod tests { master.send(msg).await.unwrap(); - DataBuilder::default() + SystemBuilder::default() .master(master) .cache(cache) .pow(pow)