From 2ae9165bfbe6f81079d9f8ed92116745b9454e3b Mon Sep 17 00:00:00 2001 From: link2xt Date: Fri, 25 Nov 2022 21:06:14 +0000 Subject: [PATCH] Remove different states of ToSave in peerstate --- src/e2ee.rs | 3 +-- src/peerstate.rs | 61 +++++++++++++++-------------------------------- src/qr.rs | 3 +-- src/securejoin.rs | 6 ++--- src/tests/aeap.rs | 2 +- 5 files changed, 25 insertions(+), 50 deletions(-) diff --git a/src/e2ee.rs b/src/e2ee.rs index cd92c5a3d..f8fe11453 100644 --- a/src/e2ee.rs +++ b/src/e2ee.rs @@ -147,7 +147,6 @@ mod tests { use crate::chat; use crate::message::{Message, Viewtype}; use crate::param::Param; - use crate::peerstate::ToSave; use crate::test_utils::{bob_keypair, TestContext}; use super::*; @@ -297,7 +296,7 @@ Sent with my Delta Chat Messenger: https://delta.chat"; gossip_key_fingerprint: Some(pub_key.fingerprint()), verified_key: Some(pub_key.clone()), verified_key_fingerprint: Some(pub_key.fingerprint()), - to_save: Some(ToSave::All), + to_save: true, fingerprint_changed: false, }; vec![(Some(peerstate), addr)] diff --git a/src/peerstate.rs b/src/peerstate.rs index 165fd05fc..09453cac7 100644 --- a/src/peerstate.rs +++ b/src/peerstate.rs @@ -46,7 +46,7 @@ pub struct Peerstate { pub gossip_key_fingerprint: Option, pub verified_key: Option, pub verified_key_fingerprint: Option, - pub to_save: Option, + pub to_save: bool, pub fingerprint_changed: bool, } @@ -90,13 +90,6 @@ impl fmt::Debug for Peerstate { } } -#[derive(Debug, Copy, Clone, PartialEq, Eq, FromPrimitive, ToPrimitive)] -#[repr(u8)] -pub enum ToSave { - Timestamps = 0x01, - All = 0x02, -} - impl Peerstate { pub fn from_header(header: &Aheader, message_time: i64) -> Self { Peerstate { @@ -111,7 +104,7 @@ impl Peerstate { gossip_timestamp: 0, verified_key: None, verified_key_fingerprint: None, - to_save: Some(ToSave::All), + to_save: true, fingerprint_changed: false, } } @@ -137,7 +130,7 @@ impl Peerstate { gossip_timestamp: message_time, verified_key: None, verified_key_fingerprint: None, - to_save: Some(ToSave::All), + to_save: true, fingerprint_changed: false, } } @@ -229,7 +222,7 @@ impl Peerstate { .map(|s| s.parse::()) .transpose() .unwrap_or_default(), - to_save: None, + to_save: false, fingerprint_changed: false, }; @@ -252,7 +245,7 @@ impl Peerstate { || self.public_key_fingerprint.is_none() || old_public_fingerprint != self.public_key_fingerprint { - self.to_save = Some(ToSave::All); + self.to_save = true; if old_public_fingerprint.is_some() { self.fingerprint_changed = true; } @@ -267,7 +260,7 @@ impl Peerstate { || self.gossip_key_fingerprint.is_none() || old_gossip_fingerprint != self.gossip_key_fingerprint { - self.to_save = Some(ToSave::All); + self.to_save = true; // Warn about gossip key change only if there is no public key obtained from // Autocrypt header, which overrides gossip key. @@ -281,7 +274,7 @@ impl Peerstate { pub fn degrade_encryption(&mut self, message_time: i64) { self.prefer_encrypt = EncryptPreference::Reset; self.last_seen = message_time; - self.to_save = Some(ToSave::All); + self.to_save = true; } pub fn apply_header(&mut self, header: &Aheader, message_time: i64) { @@ -292,19 +285,17 @@ impl Peerstate { if message_time > self.last_seen { self.last_seen = message_time; self.last_seen_autocrypt = message_time; - self.to_save = Some(ToSave::Timestamps); + self.to_save = true; if (header.prefer_encrypt == EncryptPreference::Mutual || header.prefer_encrypt == EncryptPreference::NoPreference) && header.prefer_encrypt != self.prefer_encrypt { self.prefer_encrypt = header.prefer_encrypt; - self.to_save = Some(ToSave::All) } if self.public_key.as_ref() != Some(&header.public_key) { self.public_key = Some(header.public_key.clone()); self.recalc_fingerprint(); - self.to_save = Some(ToSave::All); } } } @@ -316,11 +307,10 @@ impl Peerstate { if message_time > self.gossip_timestamp { self.gossip_timestamp = message_time; - self.to_save = Some(ToSave::Timestamps); + self.to_save = true; if self.gossip_key.as_ref() != Some(&gossip_header.public_key) { self.gossip_key = Some(gossip_header.public_key.clone()); self.recalc_fingerprint(); - self.to_save = Some(ToSave::All) } // This is non-standard. @@ -339,7 +329,6 @@ impl Peerstate { && gossip_header.prefer_encrypt == EncryptPreference::Mutual { self.prefer_encrypt = EncryptPreference::Mutual; - self.to_save = Some(ToSave::All); } }; } @@ -395,7 +384,7 @@ impl Peerstate { if self.public_key_fingerprint.is_some() && self.public_key_fingerprint.as_ref().unwrap() == fingerprint { - self.to_save = Some(ToSave::All); + self.to_save = true; self.verified_key = self.public_key.clone(); self.verified_key_fingerprint = self.public_key_fingerprint.clone(); true @@ -407,7 +396,7 @@ impl Peerstate { if self.gossip_key_fingerprint.is_some() && self.gossip_key_fingerprint.as_ref().unwrap() == fingerprint { - self.to_save = Some(ToSave::All); + self.to_save = true; self.verified_key = self.gossip_key.clone(); self.verified_key_fingerprint = self.gossip_key_fingerprint.clone(); true @@ -422,7 +411,7 @@ impl Peerstate { } pub async fn save_to_db(&self, sql: &Sql, create: bool) -> Result<()> { - if self.to_save == Some(ToSave::All) || create { + if self.to_save || create { sql.execute( if create { "INSERT INTO acpeerstates ( \ @@ -467,18 +456,6 @@ impl Peerstate { ], ) .await?; - } else if self.to_save == Some(ToSave::Timestamps) { - sql.execute( - "UPDATE acpeerstates SET last_seen=?, last_seen_autocrypt=?, gossip_timestamp=? \ - WHERE addr=?;", - paramsv![ - self.last_seen, - self.last_seen_autocrypt, - self.gossip_timestamp, - self.addr - ], - ) - .await?; } Ok(()) @@ -651,7 +628,7 @@ pub async fn maybe_do_aeap_transition( "Internal error: Tried to do an AEAP transition without an autocrypt header??", )?; peerstate.apply_header(header, info.message_time); - peerstate.to_save = Some(ToSave::All); + peerstate.to_save = true; // We don't know whether a peerstate with this address already existed, or a // new one should be created, so just try both create=false and create=true, @@ -722,7 +699,7 @@ mod tests { gossip_key_fingerprint: Some(pub_key.fingerprint()), verified_key: Some(pub_key.clone()), verified_key_fingerprint: Some(pub_key.fingerprint()), - to_save: Some(ToSave::All), + to_save: true, fingerprint_changed: false, }; @@ -737,7 +714,7 @@ mod tests { .expect("no peerstate found in the database"); // clear to_save, as that is not persissted - peerstate.to_save = None; + peerstate.to_save = false; assert_eq!(peerstate, peerstate_new); let peerstate_new2 = Peerstate::from_fingerprint(&ctx.ctx, &pub_key.fingerprint()) .await @@ -764,7 +741,7 @@ mod tests { gossip_key_fingerprint: None, verified_key: None, verified_key_fingerprint: None, - to_save: Some(ToSave::All), + to_save: true, fingerprint_changed: false, }; @@ -797,7 +774,7 @@ mod tests { gossip_key_fingerprint: None, verified_key: None, verified_key_fingerprint: None, - to_save: Some(ToSave::All), + to_save: true, fingerprint_changed: false, }; @@ -811,7 +788,7 @@ mod tests { .expect("failed to load peerstate from db"); // clear to_save, as that is not persissted - peerstate.to_save = None; + peerstate.to_save = false; assert_eq!(Some(peerstate), peerstate_new); } @@ -862,7 +839,7 @@ mod tests { gossip_key_fingerprint: None, verified_key: None, verified_key_fingerprint: None, - to_save: None, + to_save: false, fingerprint_changed: false, }; assert_eq!(peerstate.prefer_encrypt, EncryptPreference::NoPreference); diff --git a/src/qr.rs b/src/qr.rs index 800eb4872..2b6a7954a 100644 --- a/src/qr.rs +++ b/src/qr.rs @@ -641,7 +641,6 @@ mod tests { use crate::aheader::EncryptPreference; use crate::chat::{create_group_chat, ProtectionStatus}; use crate::key::DcKey; - use crate::peerstate::ToSave; use crate::securejoin::get_securejoin_qr; use crate::test_utils::{alice_keypair, TestContext}; use anyhow::Result; @@ -894,7 +893,7 @@ mod tests { gossip_key_fingerprint: None, verified_key: None, verified_key_fingerprint: None, - to_save: Some(ToSave::All), + to_save: true, fingerprint_changed: false, }; assert!( diff --git a/src/securejoin.rs b/src/securejoin.rs index 81d0bd78d..69ffc0a15 100644 --- a/src/securejoin.rs +++ b/src/securejoin.rs @@ -18,7 +18,7 @@ use crate::key::{DcKey, Fingerprint, SignedPublicKey}; use crate::message::{Message, Viewtype}; use crate::mimeparser::{MimeMessage, SystemMessage}; use crate::param::Param; -use crate::peerstate::{Peerstate, PeerstateKeyType, PeerstateVerifiedStatus, ToSave}; +use crate::peerstate::{Peerstate, PeerstateKeyType, PeerstateVerifiedStatus}; use crate::qr::check_qr; use crate::stock_str; use crate::token; @@ -640,7 +640,7 @@ async fn mark_peer_as_verified(context: &Context, fingerprint: &Fingerprint) -> PeerstateVerifiedStatus::BidirectVerified, ) { peerstate.prefer_encrypt = EncryptPreference::Mutual; - peerstate.to_save = Some(ToSave::All); + peerstate.to_save = true; peerstate .save_to_db(&context.sql, false) .await @@ -932,7 +932,7 @@ mod tests { gossip_key_fingerprint: Some(alice_pubkey.fingerprint()), verified_key: None, verified_key_fingerprint: None, - to_save: Some(ToSave::All), + to_save: true, fingerprint_changed: false, }; peerstate.save_to_db(&bob.ctx.sql, true).await?; diff --git a/src/tests/aeap.rs b/src/tests/aeap.rs index 7391e87b1..0f52d4a7e 100644 --- a/src/tests/aeap.rs +++ b/src/tests/aeap.rs @@ -341,7 +341,7 @@ async fn mark_as_verified(this: &TestContext, other: &TestContext) { peerstate.verified_key = peerstate.public_key.clone(); peerstate.verified_key_fingerprint = peerstate.public_key_fingerprint.clone(); - peerstate.to_save = Some(peerstate::ToSave::All); + peerstate.to_save = true; peerstate.save_to_db(&this.sql, false).await.unwrap(); }