mirror of
https://github.com/chatmail/core.git
synced 2026-05-07 17:06:35 +03:00
fix: Clear VerifiedOneOnOneChats config on backup (#4681)
If the user makes a backup from a UI that supports the experimental verified 1:1 chats (e.g. nightly Android) and imports it into a UI that doesn't, then this config should be cleared. We already talked about this a long time ago after @Simon-Laux noticed this problem, but I think we didn't actually solve it back then? Best to review with whitespace changes disabled.
This commit is contained in:
25
src/imex.rs
25
src/imex.rs
@@ -771,6 +771,11 @@ async fn export_database(context: &Context, dest: &Path, passphrase: String) ->
|
|||||||
let res = conn
|
let res = conn
|
||||||
.query_row("SELECT sqlcipher_export('backup')", [], |_row| Ok(()))
|
.query_row("SELECT sqlcipher_export('backup')", [], |_row| Ok(()))
|
||||||
.context("failed to export to attached backup database");
|
.context("failed to export to attached backup database");
|
||||||
|
conn.execute(
|
||||||
|
"UPDATE backup.config SET value='0' WHERE keyname='verified_one_on_one_chats';",
|
||||||
|
[],
|
||||||
|
)
|
||||||
|
.ok(); // If verified_one_on_one_chats was not set, this errors, which we ignore
|
||||||
conn.execute("DETACH DATABASE backup", [])
|
conn.execute("DETACH DATABASE backup", [])
|
||||||
.context("failed to detach backup database")?;
|
.context("failed to detach backup database")?;
|
||||||
res?;
|
res?;
|
||||||
@@ -880,10 +885,16 @@ mod tests {
|
|||||||
|
|
||||||
#[tokio::test(flavor = "multi_thread", worker_threads = 2)]
|
#[tokio::test(flavor = "multi_thread", worker_threads = 2)]
|
||||||
async fn test_export_and_import_backup() -> Result<()> {
|
async fn test_export_and_import_backup() -> Result<()> {
|
||||||
|
for set_verified_oneonone_chats in [true, false] {
|
||||||
let backup_dir = tempfile::tempdir().unwrap();
|
let backup_dir = tempfile::tempdir().unwrap();
|
||||||
|
|
||||||
let context1 = TestContext::new_alice().await;
|
let context1 = TestContext::new_alice().await;
|
||||||
assert!(context1.is_configured().await?);
|
assert!(context1.is_configured().await?);
|
||||||
|
if set_verified_oneonone_chats {
|
||||||
|
context1
|
||||||
|
.set_config_bool(Config::VerifiedOneOnOneChats, true)
|
||||||
|
.await?;
|
||||||
|
}
|
||||||
|
|
||||||
let context2 = TestContext::new().await;
|
let context2 = TestContext::new().await;
|
||||||
assert!(!context2.is_configured().await?);
|
assert!(!context2.is_configured().await?);
|
||||||
@@ -928,7 +939,19 @@ mod tests {
|
|||||||
context2.get_config(Config::Addr).await?,
|
context2.get_config(Config::Addr).await?,
|
||||||
Some("alice@example.org".to_string())
|
Some("alice@example.org".to_string())
|
||||||
);
|
);
|
||||||
|
assert_eq!(
|
||||||
|
context2
|
||||||
|
.get_config_bool(Config::VerifiedOneOnOneChats)
|
||||||
|
.await?,
|
||||||
|
false
|
||||||
|
);
|
||||||
|
assert_eq!(
|
||||||
|
context1
|
||||||
|
.get_config_bool(Config::VerifiedOneOnOneChats)
|
||||||
|
.await?,
|
||||||
|
set_verified_oneonone_chats
|
||||||
|
);
|
||||||
|
}
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user