]> Untitled Git - lemmy.git/blob - crates/utils/src/settings/structs.rs
Move jwt secret from config to database (fixes #1728)
[lemmy.git] / crates / utils / src / settings / structs.rs
1 use serde::Deserialize;
2 use std::net::{IpAddr, Ipv4Addr};
3
4 #[derive(Debug, Deserialize, Clone, SmartDefault)]
5 #[serde(default)]
6 pub struct Settings {
7   #[serde(default)]
8   pub database: DatabaseConfig,
9   #[default(Some(RateLimitConfig::default()))]
10   pub rate_limit: Option<RateLimitConfig>,
11   #[default(FederationConfig::default())]
12   pub federation: FederationConfig,
13   #[default(CaptchaConfig::default())]
14   pub captcha: CaptchaConfig,
15   #[default(None)]
16   pub email: Option<EmailConfig>,
17   #[default(None)]
18   pub setup: Option<SetupConfig>,
19   #[default("unset")]
20   pub hostname: String,
21   #[default(IpAddr::V4(Ipv4Addr::new(0, 0, 0, 0)))]
22   pub bind: IpAddr,
23   #[default(8536)]
24   pub port: u16,
25   #[default(true)]
26   pub tls_enabled: bool,
27   #[default(None)]
28   pub pictrs_url: Option<String>,
29   #[default(None)]
30   pub additional_slurs: Option<String>,
31   #[default(20)]
32   pub actor_name_max_length: usize,
33 }
34
35 #[derive(Debug, Deserialize, Clone, SmartDefault)]
36 #[serde(default)]
37 pub struct CaptchaConfig {
38   #[default(false)]
39   pub enabled: bool,
40   #[default("medium")]
41   pub difficulty: String,
42 }
43
44 #[derive(Debug, Deserialize, Clone, SmartDefault)]
45 #[serde(default)]
46 pub struct DatabaseConfig {
47   #[default("lemmy")]
48   pub(super) user: String,
49   #[default("password")]
50   pub password: String,
51   #[default("localhost")]
52   pub host: String,
53   #[default(5432)]
54   pub(super) port: i32,
55   #[default("lemmy")]
56   pub(super) database: String,
57   #[default(5)]
58   pub pool_size: u32,
59 }
60
61 #[derive(Debug, Deserialize, Clone)]
62 pub struct EmailConfig {
63   pub smtp_server: String,
64   pub smtp_login: Option<String>,
65   pub smtp_password: Option<String>,
66   pub smtp_from_address: String,
67   pub use_tls: bool,
68 }
69
70 #[derive(Debug, Deserialize, Clone, SmartDefault)]
71 #[serde(default)]
72 pub struct FederationConfig {
73   #[default(false)]
74   pub enabled: bool,
75   #[default(None)]
76   pub allowed_instances: Option<Vec<String>>,
77   #[default(None)]
78   pub blocked_instances: Option<Vec<String>>,
79   #[default(true)]
80   pub strict_allowlist: bool,
81 }
82
83 #[derive(Debug, Deserialize, Clone, SmartDefault)]
84 #[serde(default)]
85 pub struct RateLimitConfig {
86   #[default(180)]
87   pub message: i32,
88   #[default(60)]
89   pub message_per_second: i32,
90   #[default(6)]
91   pub post: i32,
92   #[default(600)]
93   pub post_per_second: i32,
94   #[default(3)]
95   pub register: i32,
96   #[default(3600)]
97   pub register_per_second: i32,
98   #[default(6)]
99   pub image: i32,
100   #[default(3600)]
101   pub image_per_second: i32,
102 }
103
104 #[derive(Debug, Deserialize, Clone, SmartDefault)]
105 pub struct SetupConfig {
106   pub admin_username: String,
107   pub admin_password: String,
108   pub site_name: String,
109   #[default(None)]
110   pub admin_email: Option<String>,
111   #[default(None)]
112   pub sidebar: Option<String>,
113   #[default(None)]
114   pub description: Option<String>,
115   #[default(None)]
116   pub icon: Option<String>,
117   #[default(None)]
118   pub banner: Option<String>,
119   #[default(None)]
120   pub enable_downvotes: Option<bool>,
121   #[default(None)]
122   pub open_registration: Option<bool>,
123   #[default(None)]
124   pub enable_nsfw: Option<bool>,
125   #[default(None)]
126   pub community_creation_admin_only: Option<bool>,
127 }