pub mod config;
pub mod default;
pub use config::{RedactionStrategy, SecurityConfig, SensitivityLevel};
pub use default::{DefaultSecurityConfig, DefaultSecurityProvider, SensitivePattern};
use crate::hooks::HookEngine;
pub trait SecurityProvider: Send + Sync {
fn taint_input(&self, _text: &str) {}
fn sanitize_output(&self, text: &str) -> String {
text.to_string()
}
fn wipe(&self) {}
fn register_hooks(&self, _hook_engine: &HookEngine) {}
fn teardown(&self, _hook_engine: &HookEngine) {}
}
pub struct NoOpSecurityProvider;
impl SecurityProvider for NoOpSecurityProvider {}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_noop_provider_passthrough() {
let provider = NoOpSecurityProvider;
provider.taint_input("SSN: 123-45-6789");
let output = provider.sanitize_output("SSN: 123-45-6789");
assert_eq!(output, "SSN: 123-45-6789");
}
#[test]
fn test_noop_provider_wipe() {
let provider = NoOpSecurityProvider;
provider.wipe(); }
#[test]
fn test_noop_provider_hooks() {
let engine = HookEngine::new();
let provider = NoOpSecurityProvider;
provider.register_hooks(&engine);
provider.teardown(&engine);
assert_eq!(engine.hook_count(), 0);
}
}