From 5ed91e9f6e55eada166590513c410e869a745ad3 Mon Sep 17 00:00:00 2001 From: link2xt Date: Mon, 13 May 2024 13:45:41 +0000 Subject: [PATCH] refactor: make MimeMessage.get_header() return Option<&str> --- src/mimeparser.rs | 26 +++++++++++++++++--------- src/receive_imf.rs | 6 ++---- src/securejoin.rs | 22 ++++++++++------------ src/securejoin/bobstate.rs | 2 +- 4 files changed, 30 insertions(+), 26 deletions(-) diff --git a/src/mimeparser.rs b/src/mimeparser.rs index dfa0820dbb..af4f86b0d2 100644 --- a/src/mimeparser.rs +++ b/src/mimeparser.rs @@ -556,19 +556,25 @@ impl MimeMessage { /// Parses avatar action headers. async fn parse_avatar_headers(&mut self, context: &Context) { - if let Some(header_value) = self.get_header(HeaderDef::ChatGroupAvatar).cloned() { - self.group_avatar = self.avatar_action_from_header(context, header_value).await; + if let Some(header_value) = self.get_header(HeaderDef::ChatGroupAvatar) { + self.group_avatar = self + .avatar_action_from_header(context, header_value.to_string()) + .await; } - if let Some(header_value) = self.get_header(HeaderDef::ChatUserAvatar).cloned() { - self.user_avatar = self.avatar_action_from_header(context, header_value).await; + if let Some(header_value) = self.get_header(HeaderDef::ChatUserAvatar) { + self.user_avatar = self + .avatar_action_from_header(context, header_value.to_string()) + .await; } } fn parse_videochat_headers(&mut self) { - if let Some(value) = self.get_header(HeaderDef::ChatContent).cloned() { + if let Some(value) = self.get_header(HeaderDef::ChatContent) { if value == "videochat-invitation" { - let instance = self.get_header(HeaderDef::ChatWebrtcRoom).cloned(); + let instance = self + .get_header(HeaderDef::ChatWebrtcRoom) + .map(|s| s.to_string()); if let Some(part) = self.parts.first_mut() { part.typ = Viewtype::VideochatInvitation; part.param @@ -815,12 +821,14 @@ impl MimeMessage { .map(|s| s.to_string()) } - pub fn get_header(&self, headerdef: HeaderDef) -> Option<&String> { - self.headers.get(headerdef.get_headername()) + pub fn get_header(&self, headerdef: HeaderDef) -> Option<&str> { + self.headers + .get(headerdef.get_headername()) + .map(|s| s.as_str()) } /// Returns `Chat-Group-ID` header value if it is a valid group ID. - pub fn get_chat_group_id(&self) -> Option<&String> { + pub fn get_chat_group_id(&self) -> Option<&str> { self.get_header(HeaderDef::ChatGroupId) .filter(|s| validate_id(s)) } diff --git a/src/receive_imf.rs b/src/receive_imf.rs index e5b13a69ad..9810abc3b3 100644 --- a/src/receive_imf.rs +++ b/src/receive_imf.rs @@ -1373,11 +1373,9 @@ async fn add_parts( let mime_in_reply_to = mime_parser .get_header(HeaderDef::InReplyTo) - .cloned() .unwrap_or_default(); let mime_references = mime_parser .get_header(HeaderDef::References) - .cloned() .unwrap_or_default(); // fine, so far. now, split the message into simple parts usable as "short messages" @@ -1437,7 +1435,7 @@ async fn add_parts( let reaction_str = simplify::remove_footers(part.msg.as_str()); set_msg_reaction( context, - &mime_in_reply_to, + mime_in_reply_to, orig_chat_id.unwrap_or_default(), from_id, sort_timestamp, @@ -2463,7 +2461,7 @@ async fn apply_mailinglist_changes( fn try_getting_grpid(mime_parser: &MimeMessage) -> Option { if let Some(optional_field) = mime_parser.get_chat_group_id() { - return Some(optional_field.clone()); + return Some(optional_field.to_string()); } // Useful for undecipherable messages sent to known group. diff --git a/src/securejoin.rs b/src/securejoin.rs index edc6727eac..8bbbac1d97 100644 --- a/src/securejoin.rs +++ b/src/securejoin.rs @@ -294,7 +294,7 @@ pub(crate) async fn handle_securejoin_handshake( let join_vg = step.starts_with("vg-"); - if !matches!(step.as_str(), "vg-request" | "vc-request") { + if !matches!(step, "vg-request" | "vc-request") { let mut self_found = false; let self_fingerprint = load_self_public_key(context).await?.fingerprint(); for (addr, key) in &mime_message.gossiped_keys { @@ -311,7 +311,7 @@ pub(crate) async fn handle_securejoin_handshake( } } - match step.as_str() { + match step { "vg-request" | "vc-request" => { /*======================================================= ==== Alice - the inviter side ==== @@ -487,7 +487,7 @@ pub(crate) async fn handle_securejoin_handshake( =======================================================*/ "vc-contact-confirm" => { if let Some(mut bobstate) = BobState::from_db(&context.sql).await? { - if !bobstate.is_msg_expected(context, step.as_str()) { + if !bobstate.is_msg_expected(context, step) { warn!(context, "Unexpected vc-contact-confirm."); return Ok(HandshakeMessage::Ignore); } @@ -498,9 +498,7 @@ pub(crate) async fn handle_securejoin_handshake( Ok(HandshakeMessage::Ignore) } "vg-member-added" => { - let Some(member_added) = mime_message - .get_header(HeaderDef::ChatGroupMemberAdded) - .map(|s| s.as_str()) + let Some(member_added) = mime_message.get_header(HeaderDef::ChatGroupMemberAdded) else { warn!( context, @@ -516,7 +514,7 @@ pub(crate) async fn handle_securejoin_handshake( return Ok(HandshakeMessage::Propagate); } if let Some(mut bobstate) = BobState::from_db(&context.sql).await? { - if !bobstate.is_msg_expected(context, step.as_str()) { + if !bobstate.is_msg_expected(context, step) { warn!(context, "Unexpected vg-member-added."); return Ok(HandshakeMessage::Propagate); } @@ -571,7 +569,7 @@ pub(crate) async fn observe_securejoin_on_other_device( info!(context, "Observing secure-join message {step:?}."); if !matches!( - step.as_str(), + step, "vg-request-with-auth" | "vc-request-with-auth" | "vg-member-added" | "vc-contact-confirm" ) { return Ok(HandshakeMessage::Ignore); @@ -642,21 +640,21 @@ pub(crate) async fn observe_securejoin_on_other_device( ChatId::set_protection_for_contact(context, contact_id, mime_message.timestamp_sent).await?; - if step.as_str() == "vg-member-added" { + if step == "vg-member-added" { inviter_progress(context, contact_id, 800); } - if step.as_str() == "vg-member-added" || step.as_str() == "vc-contact-confirm" { + if step == "vg-member-added" || step == "vc-contact-confirm" { inviter_progress(context, contact_id, 1000); } - if step.as_str() == "vg-request-with-auth" || step.as_str() == "vc-request-with-auth" { + if step == "vg-request-with-auth" || step == "vc-request-with-auth" { // This actually reflects what happens on the first device (which does the secure // join) and causes a subsequent "vg-member-added" message to create an unblocked // verified group. ChatId::create_for_contact_with_blocked(context, contact_id, Blocked::Not).await?; } - if step.as_str() == "vg-member-added" { + if step == "vg-member-added" { Ok(HandshakeMessage::Propagate) } else { Ok(HandshakeMessage::Ignore) diff --git a/src/securejoin/bobstate.rs b/src/securejoin/bobstate.rs index 708987fb5a..264a66f643 100644 --- a/src/securejoin/bobstate.rs +++ b/src/securejoin/bobstate.rs @@ -261,7 +261,7 @@ impl BobState { return Ok(None); } }; - if !self.is_msg_expected(context, step.as_str()) { + if !self.is_msg_expected(context, step) { info!(context, "{} message out of sync for BobState", step); return Ok(None); }