use crate::saas::validation::ReservedDomains;
use std::sync::Arc;
use std::time::Duration;
pub const DEFAULT_JWT_AUDIENCE: &str = "postrust-proxy";
#[derive(Clone, Debug)]
#[non_exhaustive]
pub struct SaasOptions {
pub jwt_secret: Option<String>,
pub jwt_audience: String,
pub jwt_issuer: Option<String>,
pub domains: DomainPolicy,
}
impl Default for SaasOptions {
fn default() -> Self {
Self {
jwt_secret: None,
jwt_audience: DEFAULT_JWT_AUDIENCE.to_string(),
jwt_issuer: None,
domains: DomainPolicy::default(),
}
}
}
#[derive(Clone, Debug)]
#[non_exhaustive]
pub struct DomainPolicy {
pub reserved: ReservedDomains,
pub pending_ttl: Duration,
pub verification_min_interval: Duration,
pub verification_max_attempts: i32,
pub upload_trust: UploadTrust,
}
impl Default for DomainPolicy {
fn default() -> Self {
Self {
reserved: ReservedDomains::default(),
pending_ttl: Duration::from_secs(7 * 24 * 60 * 60),
verification_min_interval: Duration::from_secs(10),
verification_max_attempts: 50,
upload_trust: UploadTrust::PublicRoots,
}
}
}
#[derive(Clone, Debug)]
pub enum UploadTrust {
PublicRoots,
Roots(Arc<rustls::RootCertStore>),
Unchecked,
}