|
|
@@ -13,17 +13,14 @@ lazy_static! {
|
|
|
}
|
|
|
|
|
|
macro_rules! make_config {
|
|
|
- (
|
|
|
+ ($(
|
|
|
+ $(#[doc = $groupdoc:literal])?
|
|
|
+ $group:ident $(: $group_enabled:ident)? {
|
|
|
$(
|
|
|
- $(#[doc = $groupdoc:literal])?
|
|
|
- $group:ident $(: $group_enabled:ident)? {
|
|
|
- $(
|
|
|
- $(#[doc = $doc:literal])+
|
|
|
- $name:ident : $ty:ty, $editable:literal, $none_action:ident $(, $default:expr)?;
|
|
|
- )+
|
|
|
- },)+
|
|
|
-
|
|
|
- ) => {
|
|
|
+ $(#[doc = $doc:literal])+
|
|
|
+ $name:ident : $ty:ty, $editable:literal, $none_action:ident $(, $default:expr)?;
|
|
|
+ )+},
|
|
|
+ )+) => {
|
|
|
pub struct Config { inner: RwLock<Inner> }
|
|
|
|
|
|
struct Inner {
|
|
|
@@ -199,7 +196,7 @@ make_config! {
|
|
|
rsa_key_filename: String, false, auto, |c| format!("{}/{}", c.data_folder, "rsa_key");
|
|
|
/// Web vault folder
|
|
|
web_vault_folder: String, false, def, "web-vault/".to_string();
|
|
|
- },
|
|
|
+ },
|
|
|
ws {
|
|
|
/// Enable websocket notifications
|
|
|
websocket_enabled: bool, false, def, false;
|
|
|
@@ -208,7 +205,7 @@ make_config! {
|
|
|
/// Websocket port
|
|
|
websocket_port: u16, false, def, 3012;
|
|
|
},
|
|
|
-
|
|
|
+
|
|
|
/// General settings
|
|
|
settings {
|
|
|
/// Domain URL |> This needs to be set to the URL used to access the server, including 'http[s]://' and port, if it's different than the default. Some server functions don't work correctly without this value
|
|
|
@@ -236,7 +233,7 @@ make_config! {
|
|
|
},
|
|
|
|
|
|
/// Advanced settings
|
|
|
- advanced {
|
|
|
+ advanced {
|
|
|
/// Positive icon cache expiry |> Number of seconds to consider that an already cached icon is fresh. After this period, the icon will be redownloaded
|
|
|
icon_cache_ttl: u64, true, def, 2_592_000;
|
|
|
/// Negative icon cache expiry |> Number of seconds before trying to download an icon that failed again.
|
|
|
@@ -355,6 +352,28 @@ impl Config {
|
|
|
Ok(())
|
|
|
}
|
|
|
|
|
|
+ pub fn delete_user_config(&self) -> Result<(), Error> {
|
|
|
+ crate::util::delete_file(&CONFIG_FILE)?;
|
|
|
+
|
|
|
+ // Empty user config
|
|
|
+ let usr = ConfigBuilder::default();
|
|
|
+
|
|
|
+ // Config now is env + defaults
|
|
|
+ let config = {
|
|
|
+ let env = &self.inner.read().unwrap()._env;
|
|
|
+ env.build()
|
|
|
+ };
|
|
|
+
|
|
|
+ // Save configs
|
|
|
+ {
|
|
|
+ let mut writer = self.inner.write().unwrap();
|
|
|
+ writer.config = config;
|
|
|
+ writer._usr = usr;
|
|
|
+ }
|
|
|
+
|
|
|
+ Ok(())
|
|
|
+ }
|
|
|
+
|
|
|
pub fn private_rsa_key(&self) -> String {
|
|
|
format!("{}.der", CONFIG.rsa_key_filename())
|
|
|
}
|
|
|
@@ -366,14 +385,11 @@ impl Config {
|
|
|
}
|
|
|
pub fn mail_enabled(&self) -> bool {
|
|
|
let inner = &self.inner.read().unwrap().config;
|
|
|
- inner._enable_smtp
|
|
|
- && inner.smtp_host.is_some()
|
|
|
+ inner._enable_smtp && inner.smtp_host.is_some()
|
|
|
}
|
|
|
pub fn yubico_enabled(&self) -> bool {
|
|
|
let inner = &self.inner.read().unwrap().config;
|
|
|
- inner._enable_yubico
|
|
|
- && inner.yubico_client_id.is_some()
|
|
|
- && inner.yubico_secret_key.is_some()
|
|
|
+ inner._enable_yubico && inner.yubico_client_id.is_some() && inner.yubico_secret_key.is_some()
|
|
|
}
|
|
|
|
|
|
pub fn render_template<T: serde::ser::Serialize>(
|