Skip to main content

threexui_rs/models/
settings.rs

1use serde::{Deserialize, Serialize};
2
3#[derive(Debug, Clone, Serialize, Deserialize, Default)]
4#[serde(rename_all = "camelCase")]
5pub struct AllSetting {
6    // Web server settings
7    #[serde(default)]
8    pub web_listen: String,
9    #[serde(default)]
10    pub web_domain: String,
11    #[serde(default)]
12    pub web_port: i32,
13    #[serde(default)]
14    pub web_cert_file: String,
15    #[serde(default)]
16    pub web_key_file: String,
17    #[serde(default)]
18    pub web_base_path: String,
19    #[serde(default)]
20    pub session_max_age: i32,
21    // UI settings
22    #[serde(default)]
23    pub page_size: i32,
24    #[serde(default)]
25    pub expire_diff: i32,
26    #[serde(default)]
27    pub traffic_diff: i32,
28    #[serde(default)]
29    pub remark_model: String,
30    #[serde(default)]
31    pub datepicker: String,
32    // Telegram bot settings
33    #[serde(default)]
34    pub tg_bot_enable: bool,
35    #[serde(default)]
36    pub tg_bot_token: String,
37    #[serde(default)]
38    pub tg_bot_proxy: String,
39    #[serde(default)]
40    pub tg_bot_api_server: String,
41    #[serde(default)]
42    pub tg_bot_chat_id: String,
43    #[serde(default)]
44    pub tg_run_time: String,
45    #[serde(default)]
46    pub tg_bot_backup: bool,
47    #[serde(default)]
48    pub tg_bot_login_notify: bool,
49    #[serde(default)]
50    pub tg_cpu: i32,
51    #[serde(default)]
52    pub tg_lang: String,
53    // Security settings
54    #[serde(default)]
55    pub time_location: String,
56    #[serde(default)]
57    pub two_factor_enable: bool,
58    #[serde(default)]
59    pub two_factor_token: String,
60    // Subscription settings
61    #[serde(default)]
62    pub sub_enable: bool,
63    #[serde(default)]
64    pub sub_json_enable: bool,
65    #[serde(default)]
66    pub sub_title: String,
67    #[serde(default)]
68    pub sub_support_url: String,
69    #[serde(default)]
70    pub sub_profile_url: String,
71    #[serde(default)]
72    pub sub_announce: String,
73    #[serde(default)]
74    pub sub_enable_routing: bool,
75    #[serde(default)]
76    pub sub_routing_rules: String,
77    #[serde(default)]
78    pub sub_listen: String,
79    #[serde(default)]
80    pub sub_port: i32,
81    #[serde(default)]
82    pub sub_path: String,
83    #[serde(default)]
84    pub sub_domain: String,
85    #[serde(default)]
86    pub sub_cert_file: String,
87    #[serde(default)]
88    pub sub_key_file: String,
89    #[serde(default)]
90    pub sub_updates: i32,
91    #[serde(default)]
92    pub external_traffic_inform_enable: bool,
93    #[serde(default)]
94    pub external_traffic_inform_uri: String,
95    #[serde(default)]
96    pub sub_encrypt: bool,
97    #[serde(default)]
98    pub sub_show_info: bool,
99    #[serde(default)]
100    pub sub_uri: String,
101    #[serde(default)]
102    pub sub_json_path: String,
103    #[serde(default)]
104    pub sub_json_uri: String,
105    #[serde(default)]
106    pub sub_clash_enable: bool,
107    #[serde(default)]
108    pub sub_clash_path: String,
109    #[serde(default)]
110    pub sub_clash_uri: String,
111    #[serde(default)]
112    pub sub_json_fragment: String,
113    #[serde(default)]
114    pub sub_json_noises: String,
115    #[serde(default)]
116    pub sub_json_mux: String,
117    #[serde(default)]
118    pub sub_json_rules: String,
119    // LDAP settings
120    #[serde(default)]
121    pub ldap_enable: bool,
122    #[serde(default)]
123    pub ldap_host: String,
124    #[serde(default)]
125    pub ldap_port: i32,
126    #[serde(default)]
127    pub ldap_use_tls: bool,
128    #[serde(default)]
129    pub ldap_bind_dn: String,
130    #[serde(default)]
131    pub ldap_password: String,
132    #[serde(default)]
133    pub ldap_base_dn: String,
134    #[serde(default)]
135    pub ldap_user_filter: String,
136    #[serde(default)]
137    pub ldap_user_attr: String,
138    #[serde(default)]
139    pub ldap_vless_field: String,
140    #[serde(default)]
141    pub ldap_sync_cron: String,
142    #[serde(default)]
143    pub ldap_flag_field: String,
144    #[serde(default)]
145    pub ldap_truthy_values: String,
146    #[serde(default)]
147    pub ldap_invert_flag: bool,
148    #[serde(default)]
149    pub ldap_inbound_tags: String,
150    #[serde(default)]
151    pub ldap_auto_create: bool,
152    #[serde(default)]
153    pub ldap_auto_delete: bool,
154    #[serde(default)]
155    #[serde(rename = "ldapDefaultTotalGB")]
156    pub ldap_default_total_gb: i32,
157    #[serde(default)]
158    pub ldap_default_expiry_days: i32,
159    #[serde(default)]
160    pub ldap_default_limit_ip: i32,
161}
162
163#[cfg(test)]
164mod tests {
165    use super::*;
166
167    #[test]
168    fn all_setting_deserializes_partial() {
169        let raw = r#"{"webPort":2053,"tgBotEnable":false,"subEnable":true}"#;
170        let s: AllSetting = serde_json::from_str(raw).unwrap();
171        assert_eq!(s.web_port, 2053);
172        assert!(!s.tg_bot_enable);
173        assert!(s.sub_enable);
174    }
175
176    #[test]
177    fn all_setting_empty_defaults() {
178        let s: AllSetting = serde_json::from_str("{}").unwrap();
179        assert_eq!(s.web_port, 0);
180        assert_eq!(s.sub_title, "");
181    }
182}