mirror of
https://github.com/chatmail/core.git
synced 2026-05-08 01:16:31 +03:00
Fix #4982: Allow to send unverified securejoin messages to protected chats
This commit is contained in:
@@ -316,7 +316,15 @@ impl<'a> MimeFactory<'a> {
|
|||||||
match &self.loaded {
|
match &self.loaded {
|
||||||
Loaded::Message { chat } => {
|
Loaded::Message { chat } => {
|
||||||
if chat.is_protected() {
|
if chat.is_protected() {
|
||||||
PeerstateVerifiedStatus::BidirectVerified
|
if self.msg.get_info_type() == SystemMessage::SecurejoinMessage {
|
||||||
|
// Securejoin messages are supposed to verify a key.
|
||||||
|
// In order to do this, it is necessary that they can be sent
|
||||||
|
// to a key that is not yet verified.
|
||||||
|
// This has to work independently of whether the chat is protected right now.
|
||||||
|
PeerstateVerifiedStatus::Unverified
|
||||||
|
} else {
|
||||||
|
PeerstateVerifiedStatus::BidirectVerified
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
PeerstateVerifiedStatus::Unverified
|
PeerstateVerifiedStatus::Unverified
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -712,6 +712,39 @@ async fn test_break_protection_then_verify_again() -> Result<()> {
|
|||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Regression test for the following bug:
|
||||||
|
///
|
||||||
|
/// - Scan your chat partner's QR Code
|
||||||
|
/// - They change devices
|
||||||
|
/// - Scan their QR code again
|
||||||
|
///
|
||||||
|
/// -> The re-verification fails.
|
||||||
|
#[tokio::test(flavor = "multi_thread", worker_threads = 2)]
|
||||||
|
async fn test_verify_then_verify_again() -> Result<()> {
|
||||||
|
let mut tcm = TestContextManager::new();
|
||||||
|
let alice = tcm.alice().await;
|
||||||
|
let bob = tcm.bob().await;
|
||||||
|
enable_verified_oneonone_chats(&[&alice, &bob]).await;
|
||||||
|
|
||||||
|
mark_as_verified(&alice, &bob).await;
|
||||||
|
mark_as_verified(&bob, &alice).await;
|
||||||
|
|
||||||
|
alice.create_chat(&bob).await;
|
||||||
|
assert_verified(&alice, &bob, ProtectionStatus::Protected).await;
|
||||||
|
|
||||||
|
tcm.section("Bob reinstalls DC");
|
||||||
|
drop(bob);
|
||||||
|
let bob_new = tcm.unconfigured().await;
|
||||||
|
enable_verified_oneonone_chats(&[&bob_new]).await;
|
||||||
|
bob_new.configure_addr("bob@example.net").await;
|
||||||
|
e2ee::ensure_secret_key_exists(&bob_new).await?;
|
||||||
|
|
||||||
|
tcm.execute_securejoin(&bob_new, &alice).await;
|
||||||
|
assert_verified(&alice, &bob_new, ProtectionStatus::Protected).await;
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
/// Regression test:
|
/// Regression test:
|
||||||
/// - Verify a contact
|
/// - Verify a contact
|
||||||
/// - The contact stops using DC and sends a message from a classical MUA instead
|
/// - The contact stops using DC and sends a message from a classical MUA instead
|
||||||
|
|||||||
Reference in New Issue
Block a user