From ee8364913b4deb7b0a66e84a4139a3ce683326fb Mon Sep 17 00:00:00 2001 From: link2xt Date: Sun, 29 Jun 2025 23:39:47 +0000 Subject: [PATCH] fix: allow to scan invite links before configuration --- src/contact.rs | 10 ++++++---- src/qr/qr_tests.rs | 33 ++++++++++++++++++++++----------- 2 files changed, 28 insertions(+), 15 deletions(-) diff --git a/src/contact.rs b/src/contact.rs index 4754f2ac0..c6d8591a3 100644 --- a/src/contact.rs +++ b/src/contact.rs @@ -786,7 +786,7 @@ impl Contact { let addr_normalized = addr_normalize(addr); - if context.is_self_addr(&addr_normalized).await? { + if context.is_configured().await? && context.is_self_addr(addr).await? { return Ok(Some(ContactId::SELF)); } @@ -860,12 +860,14 @@ impl Contact { ); ensure!(origin != Origin::Unknown, "Missing valid origin"); - if context.is_self_addr(addr).await? { + if context.is_configured().await? && context.is_self_addr(addr).await? { return Ok((ContactId::SELF, sth_modified)); } - if !fingerprint.is_empty() { - let fingerprint_self = self_fingerprint(context).await?; + if !fingerprint.is_empty() && context.is_configured().await? { + let fingerprint_self = self_fingerprint(context) + .await + .context("self_fingerprint")?; if fingerprint == fingerprint_self { return Ok((ContactId::SELF, sth_modified)); } diff --git a/src/qr/qr_tests.rs b/src/qr/qr_tests.rs index 171d54e7c..01cb0edbe 100644 --- a/src/qr/qr_tests.rs +++ b/src/qr/qr_tests.rs @@ -210,19 +210,30 @@ async fn test_decode_smtp() -> Result<()> { #[tokio::test(flavor = "multi_thread", worker_threads = 2)] async fn test_decode_ideltachat_link() -> Result<()> { - let ctx = TestContext::new_alice().await; + let mut tcm = TestContextManager::new(); + let ctx_configured = &tcm.alice().await; - let qr = check_qr( - &ctx.ctx, - "https://i.delta.chat/#79252762C34C5096AF57958F4FC3D21A81B0F0A7&a=cli%40deltachat.de&g=test%20%3F+test%20%21&x=h-0oKQf2CDK&i=9JEXlxAqGM0&s=0V7LzL9cxRL" - ).await?; - assert!(matches!(qr, Qr::AskVerifyGroup { .. })); + // Explicitly test that scanning QR codes works + // with unconfigured accounts. + // This is needed for the flow where + // user scans a QR code or follows invite link + // and then creates a profile and e.g. joins a group + // at the same time. + let ctx_unconfigured = &tcm.unconfigured().await; - let qr = check_qr( - &ctx.ctx, - "https://i.delta.chat#79252762C34C5096AF57958F4FC3D21A81B0F0A7&a=cli%40deltachat.de&g=test%20%3F+test%20%21&x=h-0oKQf2CDK&i=9JEXlxAqGM0&s=0V7LzL9cxRL" - ).await?; - assert!(matches!(qr, Qr::AskVerifyGroup { .. })); + for ctx in &[ctx_configured, ctx_unconfigured] { + let qr = check_qr( + ctx, + "https://i.delta.chat/#79252762C34C5096AF57958F4FC3D21A81B0F0A7&a=cli%40deltachat.de&g=test%20%3F+test%20%21&x=h-0oKQf2CDK&i=9JEXlxAqGM0&s=0V7LzL9cxRL" + ).await?; + assert!(matches!(qr, Qr::AskVerifyGroup { .. })); + + let qr = check_qr( + ctx, + "https://i.delta.chat#79252762C34C5096AF57958F4FC3D21A81B0F0A7&a=cli%40deltachat.de&g=test%20%3F+test%20%21&x=h-0oKQf2CDK&i=9JEXlxAqGM0&s=0V7LzL9cxRL" + ).await?; + assert!(matches!(qr, Qr::AskVerifyGroup { .. })); + } Ok(()) }