use std::path::PathBuf;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(default)]
pub struct HttpConfig {
pub http_address: String,
pub https_address: Option<String>,
pub https_cert_path: Option<PathBuf>,
pub https_private_key_path: Option<PathBuf>,
pub enable_doc: bool,
pub proxy: ProxyConfig,
pub cors: CorsConfig,
pub self_signed_cert: SelfSignedCertConfig,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(default)]
pub struct ProxyConfig {
pub trusted_proxies: Vec<String>,
pub trust_x_forwarded_for: bool,
pub trust_x_real_ip: bool,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(default)]
pub struct SelfSignedCertConfig {
pub enabled: bool,
pub common_name: String,
pub san: Vec<String>,
pub validity_days: u32,
pub renew_before_days: u32,
pub check_interval_secs: u64,
}
impl Default for SelfSignedCertConfig {
fn default() -> Self {
Self {
enabled: false,
common_name: "localhost".to_string(),
san: vec!["127.0.0.1".to_string(), "::1".to_string()],
validity_days: 365,
renew_before_days: 30,
check_interval_secs: 3600, }
}
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(default)]
pub struct CorsConfig {
pub enabled: bool,
pub allow_any_origin: bool,
pub allowed_origins: Vec<String>,
pub allow_credentials: bool,
}
impl Default for HttpConfig {
fn default() -> Self {
Self {
http_address: "0.0.0.0:3000".to_string(),
https_address: Default::default(),
https_cert_path: Default::default(),
https_private_key_path: Default::default(),
enable_doc: Default::default(),
proxy: ProxyConfig::default(),
cors: CorsConfig::default(),
self_signed_cert: SelfSignedCertConfig::default(),
}
}
}
impl Default for ProxyConfig {
fn default() -> Self {
Self {
trusted_proxies: Vec::new(),
trust_x_forwarded_for: true,
trust_x_real_ip: true,
}
}
}
impl Default for CorsConfig {
fn default() -> Self {
Self {
enabled: true,
allow_any_origin: true,
allowed_origins: vec![],
allow_credentials: false,
}
}
}