use serde::{Deserialize, Serialize};
use crate::mcaptcha::*;
#[cfg(feature = "full")]
pub mod embedded;
#[cfg(feature = "full")]
pub mod redis;
#[cfg(feature = "full")]
pub trait Master:
actix::Actor
+ actix::Handler<messages::AddVisitor>
+ actix::Handler<messages::AddSite>
+ actix::Handler<messages::Rename>
+ actix::Handler<messages::RemoveCaptcha>
+ actix::Handler<messages::SetInternalData>
+ actix::Handler<messages::GetInternalData>
{
}
#[derive(Serialize, Deserialize)]
pub struct CreateMCaptcha {
pub levels: Vec<crate::defense::Level>,
pub duration: u64,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct AddVisitorResult {
pub duration: u64,
pub difficulty_factor: u32,
}
impl AddVisitorResult {
pub fn new(m: &MCaptcha) -> Self {
AddVisitorResult {
duration: m.get_duration(),
difficulty_factor: m.get_difficulty(),
}
}
}
#[cfg(feature = "full")]
pub mod messages {
use std::collections::HashMap;
use actix::dev::*;
use derive_builder::Builder;
use serde::{Deserialize, Serialize};
use tokio::sync::oneshot::Receiver;
use crate::errors::CaptchaResult;
use crate::mcaptcha::MCaptcha;
#[derive(Message, Clone, Debug, Deserialize, Serialize)]
#[rtype(result = "Receiver<CaptchaResult<Option<super::AddVisitorResult>>>")]
pub struct AddVisitor(pub String);
#[derive(Message, Builder, Clone, Debug, Deserialize, Serialize)]
#[rtype(result = "Receiver<CaptchaResult<()>>")]
pub struct AddSite {
pub id: String,
pub mcaptcha: MCaptcha,
}
#[derive(Message, Builder, Clone, Debug, Deserialize, Serialize)]
#[rtype(result = "Receiver<CaptchaResult<()>>")]
pub struct Rename {
pub name: String,
pub rename_to: String,
}
#[derive(Message, Clone, Debug, Deserialize, Serialize)]
#[rtype(result = "Receiver<CaptchaResult<()>>")]
pub struct RemoveCaptcha(pub String);
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct InternalData {
pub name: String,
pub mcaptcha: MCaptcha,
}
#[derive(Message)]
#[rtype(result = "Receiver<CaptchaResult<HashMap<String, MCaptcha>>>")]
pub struct GetInternalData;
#[derive(Message)]
#[rtype(result = "Receiver<CaptchaResult<()>>")]
pub struct SetInternalData {
pub mcaptcha: HashMap<String, MCaptcha>,
}
}