use serde::{Deserialize, Serialize};
use std::time::Instant;
use uuid::Uuid;
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub struct OobConfig {
pub provider: OobProvider,
pub poll_interval_secs: u64,
pub timeout_secs: u64,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub enum OobProvider {
Interactsh { server: String },
BurpCollaborator { url: String },
CustomDns { pattern: String },
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub struct OobCanary {
pub id: Uuid,
pub expected_dns: String,
pub expected_http_path: String,
#[serde(skip)]
pub created_at: Option<Instant>,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub enum OobInteraction {
DnsQuery { query: String, source_ip: String },
HttpRequest { path: String, headers: Vec<(String, String)>, body: Option<String> },
}
#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
pub enum OobConfirmation {
Confirmed,
Timeout,
Error,
}