use super::*;
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum SameSite {
Strict,
Lax,
None,
}
impl std::fmt::Display for SameSite {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
Self::Strict => f.write_str("Strict"),
Self::Lax => f.write_str("Lax"),
Self::None => f.write_str("None"),
}
}
}
#[derive(Debug, Clone, Default)]
pub struct AdvancedConfig {
pub trust_forwarded_host: bool,
pub ip_address: IpAddressConfig,
pub disable_csrf_check: Option<bool>,
pub disable_origin_check: bool,
pub disable_origin_check_paths: Vec<String>,
pub skip_trailing_slashes: bool,
pub use_secure_cookies: Option<bool>,
pub cross_sub_domain_cookies: Option<CrossSubDomainConfig>,
pub cookies: HashMap<String, CookieOverride>,
pub default_cookie_attributes: CookieAttributes,
pub cookie_prefix: Option<String>,
pub database: AdvancedDatabaseConfig,
pub trusted_proxy_headers: Vec<String>,
}
#[derive(Debug, Clone)]
pub struct IpAddressConfig {
pub headers: Vec<String>,
pub trusted_proxies: Vec<String>,
pub ipv6_subnet: f64,
pub localhost_fallback: bool,
pub disable_ip_tracking: bool,
}
#[derive(Debug, Clone, Default)]
pub struct CrossSubDomainConfig {
pub domain: String,
}
#[derive(Debug, Clone, Default)]
pub struct CookieAttributes {
pub secure: Option<bool>,
pub http_only: Option<bool>,
pub same_site: Option<SameSite>,
pub path: Option<String>,
pub max_age: Option<f64>,
pub expires: Option<chrono::DateTime<chrono::Utc>>,
pub partitioned: Option<bool>,
pub domain: Option<String>,
}
#[derive(Debug, Clone, Default)]
pub struct CookieOverride {
pub name: Option<String>,
pub attributes: CookieAttributes,
}
#[derive(Debug, Clone)]
pub struct AdvancedDatabaseConfig {
pub default_find_many_limit: usize,
pub use_number_id: bool,
}
impl Default for IpAddressConfig {
fn default() -> Self {
Self {
headers: vec!["x-forwarded-for".to_owned()],
trusted_proxies: Vec::new(),
ipv6_subnet: 64.0,
localhost_fallback: matches!(
std::env::var("NODE_ENV").as_deref(),
Ok("dev" | "development" | "test")
) || std::env::var("TEST")
.is_ok_and(|value| !matches!(value.as_str(), "" | "false")),
disable_ip_tracking: false,
}
}
}
impl Default for AdvancedDatabaseConfig {
fn default() -> Self {
Self {
default_find_many_limit: 100,
use_number_id: false,
}
}
}