use serde::{Deserialize, Serialize}; use crate::config::settings::{Validate, ValidationError}; /// Authentication settings #[derive(Debug, Clone, Serialize, Deserialize)] pub struct AuthSettings { pub jwt_secret: String, #[serde(default = "default_jwt_expiration_hours")] pub jwt_expiration_hours: u64, } impl Validate for AuthSettings { fn validate(&self) -> Result<(), ValidationError> { if self.jwt_secret.is_empty() { return Err("JWT secret cannot be empty".into()); } if self.jwt_expiration_hours == 0 { return Err("JWT expiration hours must be greater than 0".into()); } Ok(()) } } fn default_jwt_expiration_hours() -> u64 { 24 } #[cfg(test)] mod tests { use std::{ fs, net::{IpAddr, Ipv4Addr}, path::PathBuf, time::{SystemTime, UNIX_EPOCH}, }; use super::*; #[test] fn test_esnure_send_and_sync() { fn assert_send_sync() {} assert_send_sync::(); } #[test] fn auth_validate_fails_for_empty_secret() { let auth = AuthSettings { jwt_secret: "".to_string(), jwt_expiration_hours: 24, }; let result = auth.validate(); assert!(result.is_err()); let msg = result.err().unwrap_or_default(); assert!(msg.contains("JWT secret cannot be empty")); } }