feat: simplify e2ee decision logic

Removed remaining majority vote code.
This commit is contained in:
link2xt
2025-03-27 16:01:39 +00:00
parent a8f8d34c25
commit 568c044a90

View File

@@ -54,34 +54,25 @@ impl EncryptHelper {
peerstates: &[(Option<Peerstate>, String)], peerstates: &[(Option<Peerstate>, String)],
) -> Result<bool> { ) -> Result<bool> {
let is_chatmail = context.is_chatmail().await?; let is_chatmail = context.is_chatmail().await?;
let mut prefer_encrypt_count = 1; let missing_peerstate_addr = peerstates.iter().find_map(|(peerstate, addr)| {
for (peerstate, addr) in peerstates { if let Some(peerstate) = peerstate {
match peerstate { if is_chatmail
Some(peerstate) => { || e2ee_guaranteed
if match peerstate.prefer_encrypt { || peerstate.prefer_encrypt != EncryptPreference::Reset
EncryptPreference::Reset => is_chatmail, {
EncryptPreference::NoPreference | EncryptPreference::Mutual => true, return None;
} {
prefer_encrypt_count += 1;
}
}
None => {
let msg = format!("Peerstate for {addr:?} missing, cannot encrypt");
if e2ee_guaranteed {
return Err(format_err!("{msg}"));
} else {
info!(context, "{msg}.");
return Ok(false);
}
} }
} }
Some(addr)
});
if let Some(addr) = missing_peerstate_addr {
if e2ee_guaranteed {
return Err(format_err!(
"Peerstate for {addr:?} missing, cannot encrypt"
));
}
} }
Ok(missing_peerstate_addr.is_none())
// Count number of recipients, including self.
// This does not depend on whether we send a copy to self or not.
let recipients_count = peerstates.len() + 1;
Ok(e2ee_guaranteed || 2 * prefer_encrypt_count > recipients_count)
} }
/// Tries to encrypt the passed in `mail`. /// Tries to encrypt the passed in `mail`.