Skip to main content

modo/config/
modo.rs

1use serde::Deserialize;
2
3/// Top-level framework configuration.
4///
5/// Deserializes from a YAML file loaded by [`crate::config::load`]. All fields
6/// use `#[serde(default)]`, so any section omitted from the YAML file falls
7/// back to the type's own `Default` implementation.
8///
9/// Applications that need extra config fields can embed `Config` with
10/// `#[serde(flatten)]` inside their own config struct.
11#[non_exhaustive]
12#[derive(Debug, Clone, Deserialize, Default)]
13#[serde(default)]
14pub struct Config {
15    /// HTTP server bind address and shutdown behaviour.
16    pub server: crate::server::Config,
17    /// libsql database settings.
18    #[serde(default)]
19    pub database: crate::db::Config,
20    /// Log level, format, and optional Sentry integration.
21    pub tracing: crate::tracing::Config,
22    /// Signed cookie secret and attributes. When absent, signed/private cookies
23    /// are disabled.
24    pub cookie: Option<crate::cookie::CookieConfig>,
25    /// HTTP security-header middleware settings.
26    pub security_headers: crate::middleware::SecurityHeadersConfig,
27    /// CORS policy.
28    pub cors: crate::middleware::CorsConfig,
29    /// CSRF protection settings.
30    pub csrf: crate::middleware::CsrfConfig,
31    /// Token-bucket rate-limiting settings.
32    pub rate_limit: crate::middleware::RateLimitConfig,
33    /// Session TTL, cookie name, fingerprint validation, touch interval, and
34    /// per-user session limit.
35    #[serde(default)]
36    pub session: crate::auth::session::SessionConfig,
37    /// Background job queue settings.
38    #[serde(default)]
39    pub job: crate::job::JobConfig,
40    /// CIDR ranges of trusted reverse proxies used by [`crate::ip::ClientIpLayer`].
41    ///
42    /// Accepts any string parseable as [`ipnet::IpNet`], e.g. `"10.0.0.0/8"`.
43    #[serde(default)]
44    pub trusted_proxies: Vec<String>,
45    /// OAuth provider settings.
46    #[serde(default)]
47    pub oauth: crate::auth::oauth::OAuthConfig,
48    /// SMTP / email delivery settings.
49    #[serde(default)]
50    pub email: crate::email::EmailConfig,
51    /// MiniJinja template engine settings.
52    #[serde(default)]
53    pub template: crate::template::TemplateConfig,
54    /// MaxMind GeoIP database path and settings.
55    #[serde(default)]
56    pub geolocation: crate::geolocation::GeolocationConfig,
57    /// S3-compatible storage bucket settings.
58    #[serde(default)]
59    pub storage: crate::storage::BucketConfig,
60    /// DNS verification settings.
61    #[serde(default)]
62    pub dns: crate::dns::DnsConfig,
63    /// API key module settings.
64    #[serde(default)]
65    pub apikey: crate::auth::apikey::ApiKeyConfig,
66    /// JWT signing and validation settings.
67    #[serde(default)]
68    pub jwt: crate::auth::jwt::JwtConfig,
69}