mirror of
https://github.com/chatmail/core.git
synced 2026-04-19 14:36:29 +03:00
feat: simplify e2ee decision logic
Removed remaining majority vote code.
This commit is contained in:
41
src/e2ee.rs
41
src/e2ee.rs
@@ -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`.
|
||||||
|
|||||||
Reference in New Issue
Block a user