59 lines
1.4 KiB
Rust
59 lines
1.4 KiB
Rust
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<T: Send + Sync>() {}
|
|
assert_send_sync::<AuthSettings>();
|
|
}
|
|
|
|
#[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"));
|
|
}
|
|
}
|