]> Untitled Git - lemmy.git/blob - crates/utils/src/settings/structs.rs
Add additional slurs configuration option. Closes #1464. (#1612)
[lemmy.git] / crates / utils / src / settings / structs.rs
1 use merge::Merge;
2 use serde::Deserialize;
3 use std::net::IpAddr;
4
5 #[derive(Debug, Deserialize, Clone, Merge)]
6 pub struct Settings {
7   pub(crate) database: Option<DatabaseConfig>,
8   pub(crate) rate_limit: Option<RateLimitConfig>,
9   pub(crate) federation: Option<FederationConfig>,
10   pub(crate) hostname: Option<String>,
11   pub(crate) bind: Option<IpAddr>,
12   pub(crate) port: Option<u16>,
13   pub(crate) tls_enabled: Option<bool>,
14   pub(crate) jwt_secret: Option<String>,
15   pub(crate) pictrs_url: Option<String>,
16   pub(crate) iframely_url: Option<String>,
17   pub(crate) captcha: Option<CaptchaConfig>,
18   pub(crate) email: Option<EmailConfig>,
19   pub(crate) setup: Option<SetupConfig>,
20   pub(crate) additional_slurs: Option<String>,
21 }
22
23 #[derive(Debug, Deserialize, Clone)]
24 pub struct CaptchaConfig {
25   pub enabled: bool,
26   pub difficulty: String,
27 }
28
29 #[derive(Debug, Deserialize, Clone)]
30 pub struct DatabaseConfig {
31   pub(super) user: Option<String>,
32   pub password: String,
33   pub host: String,
34   pub(super) port: Option<i32>,
35   pub(super) database: Option<String>,
36   pub(super) pool_size: Option<u32>,
37 }
38
39 impl DatabaseConfig {
40   pub fn user(&self) -> String {
41     self
42       .user
43       .to_owned()
44       .unwrap_or_else(|| DatabaseConfig::default().user.expect("missing user"))
45   }
46   pub fn port(&self) -> i32 {
47     self
48       .port
49       .unwrap_or_else(|| DatabaseConfig::default().port.expect("missing port"))
50   }
51   pub fn database(&self) -> String {
52     self.database.to_owned().unwrap_or_else(|| {
53       DatabaseConfig::default()
54         .database
55         .expect("missing database")
56     })
57   }
58   pub fn pool_size(&self) -> u32 {
59     self.pool_size.unwrap_or_else(|| {
60       DatabaseConfig::default()
61         .pool_size
62         .expect("missing pool_size")
63     })
64   }
65 }
66
67 #[derive(Debug, Deserialize, Clone)]
68 pub struct EmailConfig {
69   pub smtp_server: String,
70   pub smtp_login: Option<String>,
71   pub smtp_password: Option<String>,
72   pub smtp_from_address: String,
73   pub use_tls: bool,
74 }
75
76 #[derive(Debug, Deserialize, Clone)]
77 pub struct FederationConfig {
78   pub enabled: bool,
79   pub allowed_instances: Option<Vec<String>>,
80   pub blocked_instances: Option<Vec<String>>,
81   pub strict_allowlist: Option<bool>,
82 }
83
84 #[derive(Debug, Deserialize, Clone)]
85 pub struct RateLimitConfig {
86   pub message: i32,
87   pub message_per_second: i32,
88   pub post: i32,
89   pub post_per_second: i32,
90   pub register: i32,
91   pub register_per_second: i32,
92   pub image: i32,
93   pub image_per_second: i32,
94 }
95
96 #[derive(Debug, Deserialize, Clone)]
97 pub struct SetupConfig {
98   pub admin_username: String,
99   pub admin_password: String,
100   pub admin_email: Option<String>,
101   pub site_name: String,
102 }