mirror of
https://github.com/chatmail/core.git
synced 2026-04-19 14:36:29 +03:00
feat: Sync Config::{MdnsEnabled,ShowEmails} across devices (#4954)
Motivation: Syncing these options will improve UX in very most cases and should be done. Other candidates are less clear or are advanced options, we can reconsider that at some point later. Approach: - Sync options one-by-one when the corresponding option is set (even if to the same value). - Don't sync when an option is reset to a default as defaults may differ across client versions. - Check on both sides that the option should be synced so that if there are different client versions, the synchronisation of the option is either done or not done in both directions. Moreover, receivers of a config value need to check if a key can be synced because some settings (e.g. Avatar path) could otherwise lead to exfiltration of files from a receiver's device if we assume an attacker to have control of a device in a multi-device setting or if multiple users are sharing an account. - Don't sync `SyncMsgs` itself.
This commit is contained in:
@@ -34,6 +34,7 @@ use crate::provider::{Protocol, Socket, UsernamePattern};
|
||||
use crate::smtp::Smtp;
|
||||
use crate::socks::Socks5Config;
|
||||
use crate::stock_str;
|
||||
use crate::sync::Sync::*;
|
||||
use crate::tools::{time, EmailAddress};
|
||||
use crate::{chat, e2ee, provider};
|
||||
|
||||
@@ -132,7 +133,9 @@ async fn on_configure_completed(
|
||||
for def in config_defaults {
|
||||
if !context.config_exists(def.key).await? {
|
||||
info!(context, "apply config_defaults {}={}", def.key, def.value);
|
||||
context.set_config(def.key, Some(def.value)).await?;
|
||||
context
|
||||
.set_config_ex(Nosync, def.key, Some(def.value))
|
||||
.await?;
|
||||
} else {
|
||||
info!(
|
||||
context,
|
||||
|
||||
Reference in New Issue
Block a user