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:
Hocuri
2023-09-05 09:15:15 +02:00
committed by GitHub
parent 4815e9b990
commit 2587ebbacd

View File

@@ -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(())
} }