Files
SAP-PLEX-SYNC/backend/src/config.rs
b0rbor4d 5b447acd1c
Some checks failed
CI/CD Pipeline / Backend Tests (push) Failing after 27s
CI/CD Pipeline / Frontend Tests (push) Failing after 15s
CI/CD Pipeline / Docker Build (push) Has been skipped
CI/CD Pipeline / Security Scan (push) Has been skipped
Initial commit
2026-04-15 01:41:49 +02:00

160 lines
4.6 KiB
Rust
Executable File

use serde::Deserialize;
#[derive(Debug, Clone, Deserialize)]
pub struct Config {
#[serde(default = "default_database_url")]
pub database_url: String,
#[serde(default = "default_port")]
pub server_port: u16,
#[serde(default)]
pub session_secure: bool,
#[serde(default = "default_admin_username")]
pub admin_username: String,
#[serde(default = "default_admin_email")]
pub admin_email: String,
#[serde(default = "default_admin_password")]
pub admin_password: String,
#[serde(default = "default_mfa_enabled")]
pub mfa_enabled: bool,
#[serde(default = "default_mfa_service_name")]
pub mfa_service_name: String,
#[serde(default = "default_sync_interval")]
pub sync_interval_secs: u64,
#[serde(default = "default_sync_direction")]
pub default_sync_direction: String,
#[serde(default = "default_conflict_resolution")]
pub conflict_resolution: String,
#[serde(default = "default_max_workers")]
pub max_workers: usize,
#[serde(default = "default_smtp_host")]
pub smtp_host: String,
#[serde(default = "default_smtp_port")]
pub smtp_port: u16,
#[serde(default)]
pub smtp_username: String,
#[serde(default)]
pub smtp_password: String,
#[serde(default = "default_smtp_from")]
pub smtp_from: String,
}
fn default_database_url() -> String {
"postgresql://sap_user:papsync123@localhost:5432/sap_sync".to_string()
}
fn default_port() -> u16 {
3001
}
fn default_admin_username() -> String {
"admin".to_string()
}
fn default_admin_email() -> String {
"admin@sap-sync.local".to_string()
}
fn default_admin_password() -> String {
"Admin123!".to_string()
}
fn default_mfa_enabled() -> bool {
true
}
fn default_mfa_service_name() -> String {
"SAP Sync".to_string()
}
fn default_sync_interval() -> u64 {
3600
}
fn default_sync_direction() -> String {
"sap_to_plesk".to_string()
}
fn default_conflict_resolution() -> String {
"timestamp_based".to_string()
}
fn default_max_workers() -> usize {
4
}
fn default_smtp_host() -> String {
"localhost".to_string()
}
fn default_smtp_port() -> u16 {
1025
}
fn default_smtp_from() -> String {
"noreply@sap-sync.local".to_string()
}
impl Config {
pub fn from_env() -> Self {
dotenvy::dotenv().ok();
Config {
database_url: std::env::var("DATABASE_URL").unwrap_or_else(|_| default_database_url()),
server_port: std::env::var("APP__SERVER__PORT")
.or_else(|_| std::env::var("PORT"))
.unwrap_or_else(|_| "3001".to_string())
.parse()
.unwrap_or(default_port()),
session_secure: std::env::var("APP__SESSION__SECURE")
.map(|v| v == "1" || v == "true")
.unwrap_or(false),
admin_username: std::env::var("ADMIN_USERNAME")
.unwrap_or_else(|_| default_admin_username()),
admin_email: std::env::var("ADMIN_EMAIL").unwrap_or_else(|_| default_admin_email()),
admin_password: std::env::var("ADMIN_PASSWORD")
.unwrap_or_else(|_| default_admin_password()),
mfa_enabled: std::env::var("APP__MFA__ENABLED")
.map(|v| v == "1" || v == "true")
.unwrap_or(default_mfa_enabled()),
mfa_service_name: std::env::var("APP__MFA__QR_CODE_SERVICE_NAME")
.unwrap_or_else(|_| default_mfa_service_name()),
sync_interval_secs: std::env::var("APP__SYNC__DEFAULT_INTERVAL_SECONDS")
.unwrap_or_else(|_| "3600".to_string())
.parse()
.unwrap_or(default_sync_interval()),
default_sync_direction: std::env::var("APP__SYNC__DEFAULT_DIRECTION")
.unwrap_or_else(|_| default_sync_direction()),
conflict_resolution: std::env::var("APP__SYNC__CONFLICT_RESOLUTION")
.unwrap_or_else(|_| default_conflict_resolution()),
max_workers: std::env::var("APP__SYNC__MAX_WORKERS")
.unwrap_or_else(|_| "4".to_string())
.parse()
.unwrap_or(default_max_workers()),
smtp_host: std::env::var("SMTP_HOST").unwrap_or_else(|_| default_smtp_host()),
smtp_port: std::env::var("SMTP_PORT")
.unwrap_or_else(|_| "1025".to_string())
.parse()
.unwrap_or(default_smtp_port()),
smtp_username: std::env::var("SMTP_USERNAME").unwrap_or_default(),
smtp_password: std::env::var("SMTP_PASSWORD").unwrap_or_default(),
smtp_from: std::env::var("SMTP_FROM").unwrap_or_else(|_| default_smtp_from()),
}
}
}