2 use serde::Deserialize;
3 use std::net::{IpAddr, Ipv4Addr};
5 #[derive(Debug, Deserialize, Clone, SmartDefault)]
9 pub database: DatabaseConfig,
10 #[default(Some(RateLimitConfig::default()))]
11 pub rate_limit: Option<RateLimitConfig>,
12 #[default(FederationConfig::default())]
13 pub federation: FederationConfig,
14 #[default(CaptchaConfig::default())]
15 pub captcha: CaptchaConfig,
17 pub email: Option<EmailConfig>,
19 pub setup: Option<SetupConfig>,
22 #[default(IpAddr::V4(Ipv4Addr::new(0, 0, 0, 0)))]
27 pub tls_enabled: bool,
29 pub pictrs_url: Option<String>,
31 pub additional_slurs: Option<String>,
33 pub actor_name_max_length: usize,
36 pub webfinger_community_regex: Option<Regex>,
39 pub webfinger_username_regex: Option<Regex>,
42 #[derive(Debug, Deserialize, Clone, SmartDefault)]
44 pub struct CaptchaConfig {
48 pub difficulty: String,
51 #[derive(Debug, Deserialize, Clone, SmartDefault)]
53 pub struct DatabaseConfig {
55 pub(super) user: String,
56 #[default("password")]
58 #[default("localhost")]
63 pub(super) database: String,
68 #[derive(Debug, Deserialize, Clone)]
69 pub struct EmailConfig {
70 pub smtp_server: String,
71 pub smtp_login: Option<String>,
72 pub smtp_password: Option<String>,
73 pub smtp_from_address: String,
77 #[derive(Debug, Deserialize, Clone, SmartDefault)]
79 pub struct FederationConfig {
83 pub allowed_instances: Option<Vec<String>>,
85 pub blocked_instances: Option<Vec<String>>,
87 pub strict_allowlist: bool,
90 #[derive(Debug, Deserialize, Clone, SmartDefault)]
92 pub struct RateLimitConfig {
96 pub message_per_second: i32,
100 pub post_per_second: i32,
104 pub register_per_second: i32,
108 pub image_per_second: i32,
111 #[derive(Debug, Deserialize, Clone, SmartDefault)]
112 pub struct SetupConfig {
113 pub admin_username: String,
114 pub admin_password: String,
115 pub site_name: String,
117 pub admin_email: Option<String>,
119 pub sidebar: Option<String>,
121 pub description: Option<String>,
123 pub icon: Option<String>,
125 pub banner: Option<String>,
127 pub enable_downvotes: Option<bool>,
129 pub open_registration: Option<bool>,
131 pub enable_nsfw: Option<bool>,
133 pub community_creation_admin_only: Option<bool>,