shared/settings/
activity.rs1use super::{
2 ExtensionSettings, SettingsDeserializeExt, SettingsDeserializer, SettingsSerializeExt,
3 SettingsSerializer,
4};
5use compact_str::ToCompactString;
6use serde::{Deserialize, Serialize};
7use utoipa::ToSchema;
8
9#[derive(ToSchema, Serialize, Deserialize, Clone, Copy)]
10#[serde(rename_all = "snake_case")]
11pub enum ActivityIpHiding {
12 Admins,
13 AllUsers,
14 None,
15}
16
17#[derive(Clone, ToSchema, Serialize, Deserialize)]
18pub struct AppSettingsActivity {
19 pub admin_log_retention_days: u16,
20 pub admin_log_retention_count: Option<u64>,
21 pub user_log_retention_days: u16,
22 pub user_log_retention_count: Option<u64>,
23 pub server_log_retention_days: u16,
24 pub server_log_retention_count: Option<u64>,
25
26 pub server_log_admin_activity: bool,
27 pub server_log_schedule_activity: bool,
28 pub server_hide_activity_ips: ActivityIpHiding,
29}
30
31#[async_trait::async_trait]
32impl SettingsSerializeExt for AppSettingsActivity {
33 async fn serialize(
34 &self,
35 serializer: SettingsSerializer,
36 ) -> Result<SettingsSerializer, anyhow::Error> {
37 Ok(serializer
38 .write_raw_setting(
39 "admin_log_retention_days",
40 self.admin_log_retention_days.to_compact_string(),
41 )
42 .write_raw_setting(
43 "admin_log_retention_count",
44 self.admin_log_retention_count
45 .map_or("".into(), |c| c.to_compact_string()),
46 )
47 .write_raw_setting(
48 "user_log_retention_days",
49 self.user_log_retention_days.to_compact_string(),
50 )
51 .write_raw_setting(
52 "user_log_retention_count",
53 self.user_log_retention_count
54 .map_or("".into(), |c| c.to_compact_string()),
55 )
56 .write_raw_setting(
57 "server_log_retention_days",
58 self.server_log_retention_days.to_compact_string(),
59 )
60 .write_raw_setting(
61 "server_log_retention_count",
62 self.server_log_retention_count
63 .map_or("".into(), |c| c.to_compact_string()),
64 )
65 .write_raw_setting(
66 "server_log_admin_activity",
67 self.server_log_admin_activity.to_compact_string(),
68 )
69 .write_raw_setting(
70 "server_log_schedule_activity",
71 self.server_log_schedule_activity.to_compact_string(),
72 )
73 .write_raw_setting(
74 "server_hide_activity_ips",
75 match self.server_hide_activity_ips {
76 ActivityIpHiding::Admins => "admins",
77 ActivityIpHiding::AllUsers => "all_users",
78 ActivityIpHiding::None => "none",
79 },
80 ))
81 }
82}
83
84pub struct AppSettingsActivityDeserializer;
85
86#[async_trait::async_trait]
87impl SettingsDeserializeExt for AppSettingsActivityDeserializer {
88 async fn deserialize_boxed(
89 &self,
90 mut deserializer: SettingsDeserializer<'_>,
91 ) -> Result<ExtensionSettings, anyhow::Error> {
92 Ok(Box::new(AppSettingsActivity {
93 admin_log_retention_days: deserializer
94 .take_raw_setting("admin_log_retention_days")
95 .and_then(|s| s.parse().ok())
96 .unwrap_or(180),
97 admin_log_retention_count: deserializer
98 .take_raw_setting("admin_log_retention_count")
99 .and_then(|s| s.parse().ok()),
100 user_log_retention_days: deserializer
101 .take_raw_setting("user_log_retention_days")
102 .and_then(|s| s.parse().ok())
103 .unwrap_or(180),
104 user_log_retention_count: deserializer
105 .take_raw_setting("user_log_retention_count")
106 .and_then(|s| s.parse().ok()),
107 server_log_retention_days: deserializer
108 .take_raw_setting("server_log_retention_days")
109 .and_then(|s| s.parse().ok())
110 .unwrap_or(90),
111 server_log_retention_count: deserializer
112 .take_raw_setting("server_log_retention_count")
113 .and_then(|s| s.parse().ok()),
114 server_log_admin_activity: deserializer
115 .take_raw_setting("server_log_admin_activity")
116 .map(|s| s == "true")
117 .unwrap_or(true),
118 server_log_schedule_activity: deserializer
119 .take_raw_setting("server_log_schedule_activity")
120 .map(|s| s == "true")
121 .unwrap_or(true),
122 server_hide_activity_ips: match deserializer
123 .take_raw_setting("server_hide_activity_ips")
124 .as_deref()
125 {
126 Some("admins") => ActivityIpHiding::Admins,
127 Some("all_users") => ActivityIpHiding::AllUsers,
128 _ => ActivityIpHiding::None,
129 },
130 }))
131 }
132}