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);
let s = format!("{}. See 'Info' for more details", err);
mime_parser.repl_msg_by_error(s);
} else {
// change chat protection only when verification check passes
if let Some(new_status) = new_status {
if chat_id
} else if let Some(new_status) = new_status {
if !chat.is_protected()
&& new_status == ProtectionStatus::Protected
&& chat_id
.update_timestamp(
context,
Param::ProtectionSettingsTimestamp,
sent_timestamp,
)
.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(
context,
chat_id,
format!("Cannot set protection: {}", e),
sort_timestamp,
)
.await?;
return Ok(chat_id); // do not return an error as this would result in retrying the message
}
chat::add_info_msg(
context,
chat_id,
format!("Cannot set protection: {}", e),
sort_timestamp,
)
.await?;
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,
);
}
}
}