mirror of
https://github.com/chatmail/core.git
synced 2026-05-22 16:26:31 +03:00
fix processing of protection-changed messages
by #2001, processing of protection-enabled and protection-disabled messages is only done if verification-checks pass. unfortunately, these verification checks were only applied on already protected chats, so that enabling via a protection-enabled message was not possible. this is fixed by this pr. moreover, when inner_set_protection() fails, the error is shown in the chat.
This commit is contained in:
committed by
holger krekel
parent
e15372531e
commit
9bf8799484
@@ -717,7 +717,13 @@ async fn add_parts(
|
|||||||
// if a chat is protected, check additional properties
|
// if a chat is protected, check additional properties
|
||||||
if !chat_id.is_special() {
|
if !chat_id.is_special() {
|
||||||
let chat = Chat::load_from_db(context, *chat_id).await?;
|
let chat = Chat::load_from_db(context, *chat_id).await?;
|
||||||
if chat.is_protected() {
|
let new_status = match mime_parser.is_system_message {
|
||||||
|
SystemMessage::ChatProtectionEnabled => Some(ProtectionStatus::Protected),
|
||||||
|
SystemMessage::ChatProtectionDisabled => Some(ProtectionStatus::Unprotected),
|
||||||
|
_ => None,
|
||||||
|
};
|
||||||
|
|
||||||
|
if chat.is_protected() || new_status.is_some() {
|
||||||
if let Err(err) =
|
if let Err(err) =
|
||||||
check_verified_properties(context, mime_parser, from_id as u32, to_ids).await
|
check_verified_properties(context, mime_parser, from_id as u32, to_ids).await
|
||||||
{
|
{
|
||||||
@@ -726,12 +732,16 @@ async fn add_parts(
|
|||||||
mime_parser.repl_msg_by_error(s);
|
mime_parser.repl_msg_by_error(s);
|
||||||
} else {
|
} else {
|
||||||
// change chat protection only when verification check passes
|
// change chat protection only when verification check passes
|
||||||
if let Some(new_status) = match mime_parser.is_system_message {
|
if let Some(new_status) = new_status {
|
||||||
SystemMessage::ChatProtectionEnabled => Some(ProtectionStatus::Protected),
|
if let Err(e) = chat_id.inner_set_protection(context, new_status).await {
|
||||||
SystemMessage::ChatProtectionDisabled => Some(ProtectionStatus::Unprotected),
|
chat::add_info_msg(
|
||||||
_ => None,
|
context,
|
||||||
} {
|
*chat_id,
|
||||||
chat_id.inner_set_protection(context, new_status).await?;
|
format!("Cannot set protection: {}", e),
|
||||||
|
)
|
||||||
|
.await;
|
||||||
|
return Ok(()); // do not return an error as this would result in retrying the message
|
||||||
|
}
|
||||||
set_better_msg(
|
set_better_msg(
|
||||||
mime_parser,
|
mime_parser,
|
||||||
context.stock_protection_msg(new_status, from_id).await,
|
context.stock_protection_msg(new_status, from_id).await,
|
||||||
|
|||||||
Reference in New Issue
Block a user