refactor: reorganize settings into separate modules for improved structure and maintainability
This commit is contained in:
58
apps/nxmesh-master/src/config/settings/auth.rs
Normal file
58
apps/nxmesh-master/src/config/settings/auth.rs
Normal file
@@ -0,0 +1,58 @@
|
||||
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"));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user