#![allow(dead_code)]
#[derive(Debug, Clone)]
pub struct AutoModeDenial {
pub tool_name: String,
pub display: String,
pub reason: String,
pub timestamp: u64,
}
const MAX_DENIALS: usize = 20;
static DENIALS: std::sync::Mutex<Vec<AutoModeDenial>> = std::sync::Mutex::new(Vec::new());
pub fn record_auto_mode_denial(denial: AutoModeDenial) {
if let Ok(mut denials) = DENIALS.lock() {
denials.insert(0, denial);
if denials.len() > MAX_DENIALS {
denials.truncate(MAX_DENIALS);
}
}
}
pub fn get_auto_mode_denials() -> Vec<AutoModeDenial> {
DENIALS.lock().map(|d| d.clone()).unwrap_or_default()
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_record_auto_mode_denial() {
let denial = AutoModeDenial {
tool_name: "Bash".to_string(),
display: "ls -la".to_string(),
reason: "Command denied".to_string(),
timestamp: 1234567890,
};
record_auto_mode_denial(denial);
let denials = get_auto_mode_denials();
assert_eq!(denials.len(), 1);
}
}