pub mod compliance;
pub mod security;
pub mod tracking;
use crate::types::config::AnalysisConfig;
use crate::types::{AnalysisResult, Cookie};
pub struct Analyzer {
config: AnalysisConfig,
}
impl Analyzer {
#[must_use]
pub fn new() -> Self {
Self {
config: AnalysisConfig::default(),
}
}
#[must_use]
pub fn with_config(config: AnalysisConfig) -> Self {
Self { config }
}
#[must_use]
pub fn analyze(&self, cookie: &Cookie) -> AnalysisResult {
let scan_id = uuid::Uuid::new_v4().to_string();
let mut result = AnalysisResult::new(scan_id);
if self.config.security_enabled {
let security_issues = security::analyze_security(std::slice::from_ref(cookie));
result.security_issues.extend(security_issues);
}
if self.config.compliance_enabled {
for regulation in &self.config.regulations {
let compliance_issues = compliance::check_compliance(cookie, *regulation);
result.compliance_issues.extend(compliance_issues);
}
}
if self.config.tracking_enabled {
if let Some(tracking) = tracking::detect_tracking(cookie) {
result.tracking_info.push(tracking);
}
}
result.calculate_scores();
result
}
#[must_use]
pub fn analyze_batch(&self, cookies: &[Cookie]) -> AnalysisResult {
let scan_id = uuid::Uuid::new_v4().to_string();
let mut result = AnalysisResult::new(scan_id);
if self.config.security_enabled {
let security_issues = security::analyze_security(cookies);
result.security_issues.extend(security_issues);
}
for cookie in cookies {
if self.config.compliance_enabled {
for regulation in &self.config.regulations {
let compliance_issues = compliance::check_compliance(cookie, *regulation);
result.compliance_issues.extend(compliance_issues);
}
}
if self.config.tracking_enabled {
if let Some(tracking) = tracking::detect_tracking(cookie) {
result.tracking_info.push(tracking);
}
}
}
result.calculate_scores();
result
}
}
impl Default for Analyzer {
fn default() -> Self {
Self::new()
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_analyzer_creation() {
let analyzer = Analyzer::new();
assert!(analyzer.config.security_enabled);
}
#[test]
fn test_analyze_cookie() {
let analyzer = Analyzer::new();
let cookie = Cookie::new("test".to_string(), "value".to_string());
let result = analyzer.analyze(&cookie);
assert!(!result.id.is_empty());
}
#[test]
fn test_analyze_batch() {
let analyzer = Analyzer::new();
let cookies = vec![
Cookie::new("test1".to_string(), "value1".to_string()),
Cookie::new("test2".to_string(), "value2".to_string()),
];
let result = analyzer.analyze_batch(&cookies);
assert!(!result.id.is_empty());
}
}