mirror of
https://github.com/chatmail/core.git
synced 2026-05-07 17:06:35 +03:00
fix: Securejoin: Mark 1:1s as protected regardless of the Config::VerifiedOneOnOneChats
As per the comment in `receive_imf.rs`, `chat.protected` must be maintained regardless of the `Config::VerifiedOneOnOneChats`. The only thing that mustn't be done if `VerifiedOneOnOneChats` is unset (i.e. for non-supporting UIs) is marking chats as "protection broken" because this needs showing the corresponding dialog to a user.
This commit is contained in:
@@ -2454,21 +2454,19 @@ async fn mark_recipients_as_verified(
|
|||||||
peerstate.set_verified(PeerstateKeyType::GossipKey, fp, verifier_addr)?;
|
peerstate.set_verified(PeerstateKeyType::GossipKey, fp, verifier_addr)?;
|
||||||
peerstate.save_to_db(&context.sql).await?;
|
peerstate.save_to_db(&context.sql).await?;
|
||||||
|
|
||||||
if !is_verified {
|
let (to_contact_id, _) = Contact::add_or_lookup(
|
||||||
let (to_contact_id, _) = Contact::add_or_lookup(
|
context,
|
||||||
context,
|
"",
|
||||||
"",
|
&ContactAddress::new(&to_addr)?,
|
||||||
&ContactAddress::new(&to_addr)?,
|
Origin::Hidden,
|
||||||
Origin::Hidden,
|
)
|
||||||
)
|
.await?;
|
||||||
.await?;
|
ChatId::set_protection_for_contact(
|
||||||
ChatId::set_protection_for_contact(
|
context,
|
||||||
context,
|
to_contact_id,
|
||||||
to_contact_id,
|
mimeparser.timestamp_sent,
|
||||||
mimeparser.timestamp_sent,
|
)
|
||||||
)
|
.await?;
|
||||||
.await?;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// The contact already has a verified key.
|
// The contact already has a verified key.
|
||||||
|
|||||||
@@ -689,22 +689,17 @@ async fn secure_connection_established(
|
|||||||
chat_id: ChatId,
|
chat_id: ChatId,
|
||||||
timestamp: i64,
|
timestamp: i64,
|
||||||
) -> Result<()> {
|
) -> Result<()> {
|
||||||
if context
|
let private_chat_id = ChatIdBlocked::get_for_contact(context, contact_id, Blocked::Yes)
|
||||||
.get_config_bool(Config::VerifiedOneOnOneChats)
|
|
||||||
.await?
|
.await?
|
||||||
{
|
.id;
|
||||||
let private_chat_id = ChatIdBlocked::get_for_contact(context, contact_id, Blocked::Yes)
|
private_chat_id
|
||||||
.await?
|
.set_protection(
|
||||||
.id;
|
context,
|
||||||
private_chat_id
|
ProtectionStatus::Protected,
|
||||||
.set_protection(
|
timestamp,
|
||||||
context,
|
Some(contact_id),
|
||||||
ProtectionStatus::Protected,
|
)
|
||||||
timestamp,
|
.await?;
|
||||||
Some(contact_id),
|
|
||||||
)
|
|
||||||
.await?;
|
|
||||||
}
|
|
||||||
context.emit_event(EventType::ChatModified(chat_id));
|
context.emit_event(EventType::ChatModified(chat_id));
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,7 +9,6 @@ use super::bobstate::{BobHandshakeStage, BobState};
|
|||||||
use super::qrinvite::QrInvite;
|
use super::qrinvite::QrInvite;
|
||||||
use super::HandshakeMessage;
|
use super::HandshakeMessage;
|
||||||
use crate::chat::{is_contact_in_chat, ChatId, ProtectionStatus};
|
use crate::chat::{is_contact_in_chat, ChatId, ProtectionStatus};
|
||||||
use crate::config::Config;
|
|
||||||
use crate::constants::{Blocked, Chattype};
|
use crate::constants::{Blocked, Chattype};
|
||||||
use crate::contact::Contact;
|
use crate::contact::Contact;
|
||||||
use crate::context::Context;
|
use crate::context::Context;
|
||||||
@@ -225,21 +224,14 @@ impl BobState {
|
|||||||
async fn notify_peer_verified(&self, context: &Context, timestamp: i64) -> Result<()> {
|
async fn notify_peer_verified(&self, context: &Context, timestamp: i64) -> Result<()> {
|
||||||
let contact = Contact::get_by_id(context, self.invite().contact_id()).await?;
|
let contact = Contact::get_by_id(context, self.invite().contact_id()).await?;
|
||||||
let chat_id = self.joining_chat_id(context).await?;
|
let chat_id = self.joining_chat_id(context).await?;
|
||||||
|
self.alice_chat()
|
||||||
if context
|
.set_protection(
|
||||||
.get_config_bool(Config::VerifiedOneOnOneChats)
|
context,
|
||||||
.await?
|
ProtectionStatus::Protected,
|
||||||
{
|
timestamp,
|
||||||
self.alice_chat()
|
Some(contact.id),
|
||||||
.set_protection(
|
)
|
||||||
context,
|
.await?;
|
||||||
ProtectionStatus::Protected,
|
|
||||||
timestamp,
|
|
||||||
Some(contact.id),
|
|
||||||
)
|
|
||||||
.await?;
|
|
||||||
}
|
|
||||||
|
|
||||||
context.emit_event(EventType::ChatModified(chat_id));
|
context.emit_event(EventType::ChatModified(chat_id));
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user