From 8c09ca369104f1f93179c38f964407462a793440 Mon Sep 17 00:00:00 2001 From: iequidoo Date: Mon, 10 Nov 2025 05:36:10 -0300 Subject: [PATCH] feat: Do not copy Auto-Submitted header into outer part Before, copying Auto-Submitted to the outer headers was needed for moving such messages, e.g. multi-device sync messages, to the DeltaChat folder. Now all encrypted messages are moved. --- src/mimefactory.rs | 2 +- src/securejoin/securejoin_tests.rs | 36 +++++++++++++++++++++++------- 2 files changed, 29 insertions(+), 9 deletions(-) diff --git a/src/mimefactory.rs b/src/mimefactory.rs index 6aed5e6dc..d746177ec 100644 --- a/src/mimefactory.rs +++ b/src/mimefactory.rs @@ -1062,7 +1062,7 @@ impl MimeFactory { mail_builder::headers::raw::Raw::new("[...]").into(), )); } - "in-reply-to" | "references" | "auto-submitted" | "autocrypt-setup-message" => { + "in-reply-to" | "references" | "autocrypt-setup-message" => { unprotected_headers.push(header.clone()); } _ => { diff --git a/src/securejoin/securejoin_tests.rs b/src/securejoin/securejoin_tests.rs index 0462f2f9f..ebc22e3ed 100644 --- a/src/securejoin/securejoin_tests.rs +++ b/src/securejoin/securejoin_tests.rs @@ -60,13 +60,13 @@ async fn test_setup_contact_ex(case: SetupContactCase) { bob.set_config(Config::Displayname, Some("Bob Examplenet")) .await .unwrap(); - let alice_auto_submitted_hdr; + let alice_auto_submitted_val; match case { SetupContactCase::AliceIsBot => { alice.set_config_bool(Config::Bot, true).await.unwrap(); - alice_auto_submitted_hdr = "Auto-Submitted: auto-generated"; + alice_auto_submitted_val = "auto-generated"; } - _ => alice_auto_submitted_hdr = "Auto-Submitted: auto-replied", + _ => alice_auto_submitted_val = "auto-replied", }; assert_eq!( @@ -121,7 +121,7 @@ async fn test_setup_contact_ex(case: SetupContactCase) { ); let sent = alice.pop_sent_msg().await; - assert!(sent.payload.contains(alice_auto_submitted_hdr)); + assert!(!sent.payload.contains("Auto-Submitted:")); assert!(!sent.payload.contains("Alice Exampleorg")); let msg = bob.parse_msg(&sent).await; assert!(msg.was_encrypted()); @@ -129,6 +129,10 @@ async fn test_setup_contact_ex(case: SetupContactCase) { msg.get_header(HeaderDef::SecureJoin).unwrap(), "vc-auth-required" ); + assert_eq!( + msg.get_header(HeaderDef::AutoSubmitted).unwrap(), + alice_auto_submitted_val + ); let bob_chat = bob.get_chat(&alice).await; assert_eq!(bob_chat.can_send(&bob).await.unwrap(), true); @@ -157,7 +161,7 @@ async fn test_setup_contact_ex(case: SetupContactCase) { // Check Bob sent the right message. let sent = bob.pop_sent_msg().await; - assert!(sent.payload.contains("Auto-Submitted: auto-replied")); + assert!(!sent.payload.contains("Auto-Submitted:")); assert!(!sent.payload.contains("Bob Examplenet")); let mut msg = alice.parse_msg(&sent).await; assert!(msg.was_encrypted()); @@ -171,6 +175,10 @@ async fn test_setup_contact_ex(case: SetupContactCase) { msg.get_header(HeaderDef::SecureJoinFingerprint).unwrap(), bob_fp ); + assert_eq!( + msg.get_header(HeaderDef::AutoSubmitted).unwrap(), + "auto-replied" + ); if case == SetupContactCase::WrongAliceGossip { let wrong_pubkey = GossipedKey { @@ -248,7 +256,7 @@ async fn test_setup_contact_ex(case: SetupContactCase) { // Check Alice sent the right message to Bob. let sent = alice.pop_sent_msg().await; - assert!(sent.payload.contains(alice_auto_submitted_hdr)); + assert!(!sent.payload.contains("Auto-Submitted:")); assert!(!sent.payload.contains("Alice Exampleorg")); let msg = bob.parse_msg(&sent).await; assert!(msg.was_encrypted()); @@ -256,6 +264,10 @@ async fn test_setup_contact_ex(case: SetupContactCase) { msg.get_header(HeaderDef::SecureJoin).unwrap(), "vc-contact-confirm" ); + assert_eq!( + msg.get_header(HeaderDef::AutoSubmitted).unwrap(), + alice_auto_submitted_val + ); // Bob has verified Alice already. // @@ -465,13 +477,17 @@ async fn test_secure_join() -> Result<()> { alice.recv_msg_trash(&sent).await; let sent = alice.pop_sent_msg().await; - assert!(sent.payload.contains("Auto-Submitted: auto-replied")); + assert!(!sent.payload.contains("Auto-Submitted:")); let msg = bob.parse_msg(&sent).await; assert!(msg.was_encrypted()); assert_eq!( msg.get_header(HeaderDef::SecureJoin).unwrap(), "vg-auth-required" ); + assert_eq!( + msg.get_header(HeaderDef::AutoSubmitted).unwrap(), + "auto-replied" + ); tcm.section("Step 4: Bob receives vg-auth-required, sends vg-request-with-auth"); bob.recv_msg_trash(&sent).await; @@ -503,7 +519,7 @@ async fn test_secure_join() -> Result<()> { } // Check Bob sent the right handshake message. - assert!(sent.payload.contains("Auto-Submitted: auto-replied")); + assert!(!sent.payload.contains("Auto-Submitted:")); let msg = alice.parse_msg(&sent).await; assert!(msg.was_encrypted()); assert_eq!( @@ -516,6 +532,10 @@ async fn test_secure_join() -> Result<()> { msg.get_header(HeaderDef::SecureJoinFingerprint).unwrap(), bob_fp ); + assert_eq!( + msg.get_header(HeaderDef::AutoSubmitted).unwrap(), + "auto-replied" + ); // Alice should not yet have Bob verified let contact_bob = alice.add_or_lookup_contact_no_key(&bob).await;