do not downgrade protected chats over the wire

downgrading is possible only for oneself,
not for the whole group.

enabling is still done for all as a "best effort".

this gives the user who enabled protection
strong guarantess about ones state.

downside may be different views on a chat by different users,
however, that could also happen before.
This commit is contained in:
B. Petersen
2021-10-17 14:08:11 +02:00
parent 7fb305e898
commit 3253d427ec

View File

@@ -955,35 +955,40 @@ async fn add_parts(
warn!(context, "verification problem: {}", err); warn!(context, "verification problem: {}", err);
let s = format!("{}. See 'Info' for more details", err); let s = format!("{}. See 'Info' for more details", err);
mime_parser.repl_msg_by_error(s); mime_parser.repl_msg_by_error(s);
} else { } else if let Some(new_status) = new_status {
// change chat protection only when verification check passes if !chat.is_protected()
if let Some(new_status) = new_status { && new_status == ProtectionStatus::Protected
if chat_id && chat_id
.update_timestamp( .update_timestamp(
context, context,
Param::ProtectionSettingsTimestamp, Param::ProtectionSettingsTimestamp,
sent_timestamp, sent_timestamp,
) )
.await? .await?
{
// Upgrade chat to a protected chat.
// As this gives some guarantees to the user,
// we do not allow downgrades over the wire.
if let Err(e) = chat_id
.inner_set_protection(context, ProtectionStatus::Protected)
.await
{ {
if let Err(e) = chat_id.inner_set_protection(context, new_status).await { chat::add_info_msg(
chat::add_info_msg( context,
context, chat_id,
chat_id, format!("Cannot set protection: {}", e),
format!("Cannot set protection: {}", e), sort_timestamp,
sort_timestamp, )
) .await?;
.await?; return Ok(chat_id); // do not return an error as this would result in retrying the message
return Ok(chat_id); // do not return an error as this would result in retrying the message
}
} }
set_better_msg(
mime_parser,
context
.stock_protection_msg(new_status, from_id as u32)
.await,
);
} }
set_better_msg(
mime_parser,
context
.stock_protection_msg(new_status, from_id as u32)
.await,
);
} }
} }
} }