use std::path::PathBuf;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TlsConfig {
#[serde(default)]
pub enabled: bool,
#[serde(default = "default_intercepted_ports")]
pub intercepted_ports: Vec<u16>,
#[serde(default)]
pub bypass: Vec<String>,
#[serde(default = "default_true")]
pub verify_upstream: bool,
#[serde(default = "default_true")]
pub block_quic_on_intercept: bool,
#[serde(default)]
pub upstream_ca_cert: Vec<PathBuf>,
#[serde(default, alias = "ca")]
pub intercept_ca: InterceptCaConfig,
#[serde(default)]
pub cache: CertCacheConfig,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct InterceptCaConfig {
#[serde(default)]
pub cert_path: Option<PathBuf>,
#[serde(default)]
pub key_path: Option<PathBuf>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CertCacheConfig {
#[serde(default = "default_cache_capacity")]
pub capacity: usize,
#[serde(default = "default_cert_validity_hours")]
pub validity_hours: u64,
}
impl Default for TlsConfig {
fn default() -> Self {
Self {
enabled: false,
intercepted_ports: default_intercepted_ports(),
bypass: Vec::new(),
verify_upstream: true,
block_quic_on_intercept: true,
upstream_ca_cert: Vec::new(),
intercept_ca: InterceptCaConfig::default(),
cache: CertCacheConfig::default(),
}
}
}
impl Default for CertCacheConfig {
fn default() -> Self {
Self {
capacity: default_cache_capacity(),
validity_hours: default_cert_validity_hours(),
}
}
}
fn default_true() -> bool {
true
}
fn default_intercepted_ports() -> Vec<u16> {
vec![443]
}
fn default_cache_capacity() -> usize {
1000
}
fn default_cert_validity_hours() -> u64 {
24
}