Skip to content

Commit 568c044

Browse files
committed
feat: simplify e2ee decision logic
Removed remaining majority vote code.
1 parent a8f8d34 commit 568c044

File tree

1 file changed

+16
-25
lines changed

1 file changed

+16
-25
lines changed

src/e2ee.rs

Lines changed: 16 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -54,34 +54,25 @@ impl EncryptHelper {
5454
peerstates: &[(Option<Peerstate>, String)],
5555
) -> Result<bool> {
5656
let is_chatmail = context.is_chatmail().await?;
57-
let mut prefer_encrypt_count = 1;
58-
for (peerstate, addr) in peerstates {
59-
match peerstate {
60-
Some(peerstate) => {
61-
if match peerstate.prefer_encrypt {
62-
EncryptPreference::Reset => is_chatmail,
63-
EncryptPreference::NoPreference | EncryptPreference::Mutual => true,
64-
} {
65-
prefer_encrypt_count += 1;
66-
}
67-
}
68-
None => {
69-
let msg = format!("Peerstate for {addr:?} missing, cannot encrypt");
70-
if e2ee_guaranteed {
71-
return Err(format_err!("{msg}"));
72-
} else {
73-
info!(context, "{msg}.");
74-
return Ok(false);
75-
}
57+
let missing_peerstate_addr = peerstates.iter().find_map(|(peerstate, addr)| {
58+
if let Some(peerstate) = peerstate {
59+
if is_chatmail
60+
|| e2ee_guaranteed
61+
|| peerstate.prefer_encrypt != EncryptPreference::Reset
62+
{
63+
return None;
7664
}
7765
}
66+
Some(addr)
67+
});
68+
if let Some(addr) = missing_peerstate_addr {
69+
if e2ee_guaranteed {
70+
return Err(format_err!(
71+
"Peerstate for {addr:?} missing, cannot encrypt"
72+
));
73+
}
7874
}
79-
80-
// Count number of recipients, including self.
81-
// This does not depend on whether we send a copy to self or not.
82-
let recipients_count = peerstates.len() + 1;
83-
84-
Ok(e2ee_guaranteed || 2 * prefer_encrypt_count > recipients_count)
75+
Ok(missing_peerstate_addr.is_none())
8576
}
8677

8778
/// Tries to encrypt the passed in `mail`.

0 commit comments

Comments
 (0)