diff --git a/src/dc_receive_imf.rs b/src/dc_receive_imf.rs index 3c31246a8..bc7a0f390 100644 --- a/src/dc_receive_imf.rs +++ b/src/dc_receive_imf.rs @@ -93,7 +93,7 @@ pub(crate) async fn dc_receive_imf_inner( } let mut sent_timestamp = if let Some(value) = mime_parser - .get(HeaderDef::Date) + .get_header(HeaderDef::Date) .and_then(|value| mailparse::dateparse(value).ok()) { value @@ -134,7 +134,7 @@ pub(crate) async fn dc_receive_imf_inner( let mut create_event_to_send = Some(CreateEvent::MsgsChanged); let prevent_rename = - mime_parser.is_mailinglist_message() || mime_parser.get(HeaderDef::Sender).is_some(); + mime_parser.is_mailinglist_message() || mime_parser.get_header(HeaderDef::Sender).is_some(); // get From: (it can be an address list!) and check if it is known (for known From:'s we add // the other To:/Cc: in the 3rd pass) @@ -425,7 +425,7 @@ async fn add_parts( to_id = DC_CONTACT_ID_SELF; // handshake may mark contacts as verified and must be processed before chats are created - if mime_parser.get(HeaderDef::SecureJoin).is_some() { + if mime_parser.get_header(HeaderDef::SecureJoin).is_some() { is_dc_message = MessengerMessage::Yes; // avoid discarding by show_emails setting chat_id = None; allow_creation = true; @@ -526,7 +526,7 @@ async fn add_parts( // check if the message belongs to a mailing list match mime_parser.get_mailinglist_type() { MailinglistType::ListIdBased => { - if let Some(list_id) = mime_parser.get(HeaderDef::ListId) { + if let Some(list_id) = mime_parser.get_header(HeaderDef::ListId) { if let Some((new_chat_id, new_chat_id_blocked)) = create_or_lookup_mailinglist( context, @@ -542,7 +542,7 @@ async fn add_parts( } } MailinglistType::SenderBased => { - if let Some(sender) = mime_parser.get(HeaderDef::Sender) { + if let Some(sender) = mime_parser.get_header(HeaderDef::Sender) { if let Some((new_chat_id, new_chat_id_blocked)) = create_or_lookup_mailinglist( context, @@ -649,7 +649,7 @@ async fn add_parts( to_id = to_ids.get_index(0).cloned().unwrap_or_default(); // handshake may mark contacts as verified and must be processed before chats are created - if mime_parser.get(HeaderDef::SecureJoin).is_some() { + if mime_parser.get_header(HeaderDef::SecureJoin).is_some() { is_dc_message = MessengerMessage::Yes; // avoid discarding by show_emails setting chat_id = None; allow_creation = true; @@ -675,8 +675,8 @@ async fn add_parts( // such as systemli.org in June 2021 remove their own Received headers on incoming mails) // and we know Delta Chat never stores drafts on IMAP servers. let is_draft = !context.is_sentbox(server_folder).await? - && mime_parser.get(HeaderDef::Received).is_none() - && mime_parser.get(HeaderDef::ChatVersion).is_none(); + && mime_parser.get_header(HeaderDef::Received).is_none() + && mime_parser.get_header(HeaderDef::ChatVersion).is_none(); // Mozilla Thunderbird does not set \Draft flag on "Templates", but sets // X-Mozilla-Draft-Info header, which can be used to detect both drafts and templates @@ -684,7 +684,10 @@ async fn add_parts( // // This check is not necessary now, but may become useful if the `Received:` header check // is removed completely later. - let is_draft = is_draft || mime_parser.get(HeaderDef::XMozillaDraftInfo).is_some(); + let is_draft = is_draft + || mime_parser + .get_header(HeaderDef::XMozillaDraftInfo) + .is_some(); if is_draft { // Most mailboxes have a "Drafts" folder where constantly new emails appear but we don't actually want to show them @@ -783,7 +786,8 @@ async fn add_parts( }); // Extract ephemeral timer from the message. - let mut ephemeral_timer = if let Some(value) = mime_parser.get(HeaderDef::EphemeralTimer) { + let mut ephemeral_timer = if let Some(value) = mime_parser.get_header(HeaderDef::EphemeralTimer) + { match value.parse::() { Ok(timer) => timer, Err(err) => { @@ -913,11 +917,11 @@ async fn add_parts( let save_mime_headers = context.get_config_bool(Config::SaveMimeHeaders).await?; let mime_in_reply_to = mime_parser - .get(HeaderDef::InReplyTo) + .get_header(HeaderDef::InReplyTo) .cloned() .unwrap_or_default(); let mime_references = mime_parser - .get(HeaderDef::References) + .get_header(HeaderDef::References) .cloned() .unwrap_or_default(); @@ -1369,10 +1373,13 @@ async fn create_or_lookup_group( // now we have a grpid that is non-empty // but we might not know about this group - let grpname = mime_parser.get(HeaderDef::ChatGroupName).cloned(); + let grpname = mime_parser.get_header(HeaderDef::ChatGroupName).cloned(); let mut removed_id = None; - if let Some(removed_addr) = mime_parser.get(HeaderDef::ChatGroupMemberRemoved).cloned() { + if let Some(removed_addr) = mime_parser + .get_header(HeaderDef::ChatGroupMemberRemoved) + .cloned() + { removed_id = Contact::lookup_id_by_addr(context, &removed_addr, Origin::Unknown).await?; match removed_id { Some(contact_id) => { @@ -1386,12 +1393,14 @@ async fn create_or_lookup_group( None => warn!(context, "removed {:?} has no contact_id", removed_addr), } } else { - let field = mime_parser.get(HeaderDef::ChatGroupMemberAdded).cloned(); + let field = mime_parser + .get_header(HeaderDef::ChatGroupMemberAdded) + .cloned(); if let Some(added_member) = field { mime_parser.is_system_message = SystemMessage::MemberAddedToGroup; better_msg = stock_str::msg_add_member(context, &added_member, from_id).await; X_MrAddToGrp = Some(added_member); - } else if let Some(old_name) = mime_parser.get(HeaderDef::ChatGroupNameChanged) { + } else if let Some(old_name) = mime_parser.get_header(HeaderDef::ChatGroupNameChanged) { X_MrGrpNameChanged = true; better_msg = stock_str::msg_grp_name( context, @@ -1405,7 +1414,7 @@ async fn create_or_lookup_group( ) .await; mime_parser.is_system_message = SystemMessage::GroupNameChanged; - } else if let Some(value) = mime_parser.get(HeaderDef::ChatContent) { + } else if let Some(value) = mime_parser.get_header(HeaderDef::ChatContent) { if value == "group-avatar-changed" { if let Some(avatar_action) = &mime_parser.group_avatar { // this is just an explicit message containing the group-avatar, @@ -1445,7 +1454,7 @@ async fn create_or_lookup_group( || X_MrAddToGrp.is_some() && addr_cmp(&self_addr, X_MrAddToGrp.as_ref().unwrap())) { // group does not exist but should be created - let create_protected = if mime_parser.get(HeaderDef::ChatVerified).is_some() { + let create_protected = if mime_parser.get_header(HeaderDef::ChatVerified).is_some() { if let Err(err) = check_verified_properties(context, mime_parser, from_id, to_ids).await { warn!(context, "verification problem: {}", err); @@ -1704,7 +1713,7 @@ async fn create_or_lookup_mailinglist( } fn try_getting_grpid(mime_parser: &MimeMessage) -> Option { - if let Some(optional_field) = mime_parser.get(HeaderDef::ChatGroupId) { + if let Some(optional_field) = mime_parser.get_header(HeaderDef::ChatGroupId) { return Some(optional_field.clone()); } @@ -1726,7 +1735,7 @@ fn try_getting_grpid(mime_parser: &MimeMessage) -> Option { /// try extract a grpid from a message-id list header value fn extract_grpid(mime_parser: &MimeMessage, headerdef: HeaderDef) -> Option<&str> { - let header = mime_parser.get(headerdef)?; + let header = mime_parser.get_header(headerdef)?; let parts = header .split(',') .map(str::trim) @@ -1891,7 +1900,7 @@ async fn check_verified_properties( ensure!(mimeparser.was_encrypted(), "This message is not encrypted."); - if mimeparser.get(HeaderDef::ChatVerified).is_none() { + if mimeparser.get_header(HeaderDef::ChatVerified).is_none() { // we do not fail here currently, this would exclude (a) non-deltas // and (b) deltas with different protection views across multiple devices. // for group creation or protection enabled/disabled, however, Chat-Verified is respected. @@ -2037,13 +2046,13 @@ async fn get_parent_message( context: &Context, mime_parser: &MimeMessage, ) -> Result> { - if let Some(field) = mime_parser.get(HeaderDef::References) { + if let Some(field) = mime_parser.get_header(HeaderDef::References) { if let Some(msg) = get_rfc724_mid_in_list(context, field).await? { return Ok(Some(msg)); } } - if let Some(field) = mime_parser.get(HeaderDef::InReplyTo) { + if let Some(field) = mime_parser.get_header(HeaderDef::InReplyTo) { if let Some(msg) = get_rfc724_mid_in_list(context, field).await? { return Ok(Some(msg)); } @@ -2124,13 +2133,13 @@ fn dc_create_incoming_rfc724_mid(mime: &MimeMessage) -> String { "{}@stub", hex_hash(&format!( "{}-{}-{}", - mime.get(HeaderDef::Date) + mime.get_header(HeaderDef::Date) .map(|s| s.to_string()) .unwrap_or_default(), - mime.get(HeaderDef::From_) + mime.get_header(HeaderDef::From_) .map(|s| s.to_string()) .unwrap_or_default(), - mime.get(HeaderDef::To) + mime.get_header(HeaderDef::To) .map(|s| s.to_string()) .unwrap_or_default() )) diff --git a/src/mimeparser.rs b/src/mimeparser.rs index 248b4a116..f07933109 100644 --- a/src/mimeparser.rs +++ b/src/mimeparser.rs @@ -295,7 +295,7 @@ impl MimeMessage { /// Parses system messages. fn parse_system_message_headers(&mut self, context: &Context) { - if self.get(HeaderDef::AutocryptSetupMessage).is_some() { + if self.get_header(HeaderDef::AutocryptSetupMessage).is_some() { self.parts = self .parts .iter() @@ -311,7 +311,7 @@ impl MimeMessage { } else { warn!(context, "could not determine ASM mime-part"); } - } else if let Some(value) = self.get(HeaderDef::ChatContent) { + } else if let Some(value) = self.get_header(HeaderDef::ChatContent) { if value == "location-streaming-enabled" { self.is_system_message = SystemMessage::LocationStreamingEnabled; } else if value == "ephemeral-timer-changed" { @@ -326,19 +326,19 @@ impl MimeMessage { /// Parses avatar action headers. async fn parse_avatar_headers(&mut self, context: &Context) { - if let Some(header_value) = self.get(HeaderDef::ChatGroupAvatar).cloned() { + 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(HeaderDef::ChatUserAvatar).cloned() { + if let Some(header_value) = self.get_header(HeaderDef::ChatUserAvatar).cloned() { self.user_avatar = self.avatar_action_from_header(context, header_value).await; } } fn parse_videochat_headers(&mut self) { - if let Some(value) = self.get(HeaderDef::ChatContent).cloned() { + if let Some(value) = self.get_header(HeaderDef::ChatContent).cloned() { if value == "videochat-invitation" { - let instance = self.get(HeaderDef::ChatWebrtcRoom).cloned(); + let instance = self.get_header(HeaderDef::ChatWebrtcRoom).cloned(); if let Some(part) = self.parts.first_mut() { part.typ = Viewtype::VideochatInvitation; part.param @@ -395,11 +395,12 @@ impl MimeMessage { } if let Some(mut part) = self.parts.pop() { - if part.typ == Viewtype::Audio && self.get(HeaderDef::ChatVoiceMessage).is_some() { + if part.typ == Viewtype::Audio && self.get_header(HeaderDef::ChatVoiceMessage).is_some() + { part.typ = Viewtype::Voice; } if part.typ == Viewtype::Image || part.typ == Viewtype::Gif { - if let Some(value) = self.get(HeaderDef::ChatContent) { + if let Some(value) = self.get_header(HeaderDef::ChatContent) { if value == "sticker" { part.typ = Viewtype::Sticker; } @@ -409,7 +410,7 @@ impl MimeMessage { || part.typ == Viewtype::Voice || part.typ == Viewtype::Video { - if let Some(field_0) = self.get(HeaderDef::ChatDuration) { + if let Some(field_0) = self.get_header(HeaderDef::ChatDuration) { let duration_ms = field_0.parse().unwrap_or_default(); if duration_ms > 0 && duration_ms < 24 * 60 * 60 * 1000 { part.param.set_int(Param::Duration, duration_ms); @@ -591,12 +592,12 @@ impl MimeMessage { } pub(crate) fn get_subject(&self) -> Option { - self.get(HeaderDef::Subject) + self.get_header(HeaderDef::Subject) .filter(|s| !s.is_empty()) .map(|s| s.to_string()) } - pub fn get(&self, headerdef: HeaderDef) -> Option<&String> { + pub fn get_header(&self, headerdef: HeaderDef) -> Option<&String> { self.header.get(headerdef.get_headername()) } @@ -1019,12 +1020,12 @@ impl MimeMessage { } pub(crate) fn get_mailinglist_type(&self) -> MailinglistType { - if self.get(HeaderDef::ListId).is_some() { + if self.get_header(HeaderDef::ListId).is_some() { return MailinglistType::ListIdBased; - } else if self.get(HeaderDef::Sender).is_some() { + } else if self.get_header(HeaderDef::Sender).is_some() { // the `Sender:`-header alone is no indicator for mailing list // as also used for bot-impersonation via `set_override_sender_name()` - if let Some(precedence) = self.get(HeaderDef::Precedence) { + if let Some(precedence) = self.get_header(HeaderDef::Precedence) { if precedence == "list" || precedence == "bulk" { return MailinglistType::SenderBased; } @@ -1050,8 +1051,8 @@ impl MimeMessage { } pub fn get_rfc724_mid(&self) -> Option { - self.get(HeaderDef::XMicrosoftOriginalMessageId) - .or_else(|| self.get(HeaderDef::MessageId)) + self.get_header(HeaderDef::XMicrosoftOriginalMessageId) + .or_else(|| self.get_header(HeaderDef::MessageId)) .and_then(|msgid| parse_message_id(msgid).ok()) } @@ -1238,7 +1239,7 @@ impl MimeMessage { /// Also you should add a test in dc_receive_imf.rs (there already are lots of test_parse_ndn_* tests). #[allow(clippy::indexing_slicing)] async fn heuristically_parse_ndn(&mut self, context: &Context) { - let maybe_ndn = if let Some(from) = self.get(HeaderDef::From_) { + let maybe_ndn = if let Some(from) = self.get_header(HeaderDef::From_) { let from = from.to_ascii_lowercase(); from.contains("mailer-daemon") || from.contains("mail-daemon") } else { @@ -1313,7 +1314,7 @@ impl MimeMessage { /// database, returns None. pub async fn get_parent_timestamp(&self, context: &Context) -> Result> { let parent_timestamp = if let Some(field) = self - .get(HeaderDef::InReplyTo) + .get_header(HeaderDef::InReplyTo) .and_then(|msgid| parse_message_id(msgid).ok()) { context @@ -1982,11 +1983,11 @@ mod tests { .unwrap(); // non-overwritten headers do not bubble up - let of = mimeparser.get(HeaderDef::SecureJoinGroup).unwrap(); + let of = mimeparser.get_header(HeaderDef::SecureJoinGroup).unwrap(); assert_eq!(of, "no"); // unknown headers do not bubble upwards - let of = mimeparser.get(HeaderDef::_TestHeader).unwrap(); + let of = mimeparser.get_header(HeaderDef::_TestHeader).unwrap(); assert_eq!(of, "Bar"); // the following fields would bubble up @@ -1995,13 +1996,15 @@ mod tests { // for Chat-Version, also the case-insensivity is tested. assert_eq!(mimeparser.get_subject(), Some("outer-subject".into())); - let of = mimeparser.get(HeaderDef::ChatVersion).unwrap(); + let of = mimeparser.get_header(HeaderDef::ChatVersion).unwrap(); assert_eq!(of, "0.0"); assert_eq!(mimeparser.parts.len(), 1); // make sure, headers that are only allowed in the encrypted part // cannot be set from the outer part - assert!(mimeparser.get(HeaderDef::SecureJoinFingerprint).is_none()); + assert!(mimeparser + .get_header(HeaderDef::SecureJoinFingerprint) + .is_none()); } #[async_std::test] diff --git a/src/securejoin.rs b/src/securejoin.rs index ef47fdf5d..fb7573a00 100644 --- a/src/securejoin.rs +++ b/src/securejoin.rs @@ -484,7 +484,7 @@ pub(crate) async fn handle_securejoin_handshake( return Err(Error::msg("Can not be called with special contact ID")); } let step = mime_message - .get(HeaderDef::SecureJoin) + .get_header(HeaderDef::SecureJoin) .context("Not a Secure-Join message")?; info!( @@ -520,7 +520,7 @@ pub(crate) async fn handle_securejoin_handshake( // it just ensures, we have Bobs key now. If we do _not_ have the key because eg. MitM has removed it, // send_message() will fail with the error "End-to-end-encryption unavailable unexpectedly.", so, there is no additional check needed here. // verify that the `Secure-Join-Invitenumber:`-header matches invitenumber written to the QR code - let invitenumber = match mime_message.get(HeaderDef::SecureJoinInvitenumber) { + let invitenumber = match mime_message.get_header(HeaderDef::SecureJoinInvitenumber) { Some(n) => n, None => { warn!(context, "Secure-join denied (invitenumber missing)"); @@ -576,19 +576,19 @@ pub(crate) async fn handle_securejoin_handshake( ==========================================================*/ // verify that Secure-Join-Fingerprint:-header matches the fingerprint of Bob - let fingerprint: Fingerprint = match mime_message.get(HeaderDef::SecureJoinFingerprint) - { - Some(fp) => fp.parse()?, - None => { - could_not_establish_secure_connection( - context, - contact_chat_id, - "Fingerprint not provided.", - ) - .await?; - return Ok(HandshakeMessage::Ignore); - } - }; + let fingerprint: Fingerprint = + match mime_message.get_header(HeaderDef::SecureJoinFingerprint) { + Some(fp) => fp.parse()?, + None => { + could_not_establish_secure_connection( + context, + contact_chat_id, + "Fingerprint not provided.", + ) + .await?; + return Ok(HandshakeMessage::Ignore); + } + }; if !encrypted_and_signed(context, mime_message, Some(&fingerprint)) { could_not_establish_secure_connection( context, @@ -609,7 +609,7 @@ pub(crate) async fn handle_securejoin_handshake( } info!(context, "Fingerprint verified.",); // verify that the `Secure-Join-Auth:`-header matches the secret written to the QR code - let auth_0 = match mime_message.get(HeaderDef::SecureJoinAuth) { + let auth_0 = match mime_message.get_header(HeaderDef::SecureJoinAuth) { Some(auth) => auth, None => { could_not_establish_secure_connection( @@ -644,7 +644,7 @@ pub(crate) async fn handle_securejoin_handshake( // the vg-member-added message is special: // this is a normal Chat-Group-Member-Added message // with an additional Secure-Join header - let field_grpid = match mime_message.get(HeaderDef::SecureJoinGroup) { + let field_grpid = match mime_message.get_header(HeaderDef::SecureJoinGroup) { Some(s) => s.as_str(), None => { warn!(context, "Missing Secure-Join-Group header"); @@ -729,7 +729,7 @@ pub(crate) async fn handle_securejoin_handshake( inviter_progress!(context, contact_id, 800); inviter_progress!(context, contact_id, 1000); let field_grpid = mime_message - .get(HeaderDef::SecureJoinGroup) + .get_header(HeaderDef::SecureJoinGroup) .map(|s| s.as_str()) .unwrap_or_else(|| ""); if let Err(err) = chat::get_chat_id_by_grpid(context, &field_grpid).await { @@ -778,7 +778,7 @@ pub(crate) async fn observe_securejoin_on_other_device( return Err(Error::msg("Can not be called with special contact ID")); } let step = mime_message - .get(HeaderDef::SecureJoin) + .get_header(HeaderDef::SecureJoin) .context("Not a Secure-Join message")?; info!(context, "observing secure-join message \'{}\'", step); @@ -815,19 +815,19 @@ pub(crate) async fn observe_securejoin_on_other_device( .await?; return Ok(HandshakeMessage::Ignore); } - let fingerprint: Fingerprint = match mime_message.get(HeaderDef::SecureJoinFingerprint) - { - Some(fp) => fp.parse()?, - None => { - could_not_establish_secure_connection( + let fingerprint: Fingerprint = + match mime_message.get_header(HeaderDef::SecureJoinFingerprint) { + Some(fp) => fp.parse()?, + None => { + could_not_establish_secure_connection( context, contact_chat_id, "Fingerprint not provided, please update Delta Chat on all your devices.", ) .await?; - return Ok(HandshakeMessage::Ignore); - } - }; + return Ok(HandshakeMessage::Ignore); + } + }; if mark_peer_as_verified(context, &fingerprint).await.is_err() { could_not_establish_secure_connection( context, @@ -985,8 +985,8 @@ mod tests { assert_eq!(sent.recipient(), "alice@example.com".parse().unwrap()); let msg = alice.parse_msg(&sent).await; assert!(!msg.was_encrypted()); - assert_eq!(msg.get(HeaderDef::SecureJoin).unwrap(), "vc-request"); - assert!(msg.get(HeaderDef::SecureJoinInvitenumber).is_some()); + assert_eq!(msg.get_header(HeaderDef::SecureJoin).unwrap(), "vc-request"); + assert!(msg.get_header(HeaderDef::SecureJoinInvitenumber).is_some()); // Step 3: Alice receives vc-request, sends vc-auth-required alice.recv_msg(&sent).await; @@ -994,7 +994,10 @@ mod tests { let sent = alice.pop_sent_msg().await; let msg = bob.parse_msg(&sent).await; assert!(msg.was_encrypted()); - assert_eq!(msg.get(HeaderDef::SecureJoin).unwrap(), "vc-auth-required"); + assert_eq!( + msg.get_header(HeaderDef::SecureJoin).unwrap(), + "vc-auth-required" + ); // Step 4: Bob receives vc-auth-required, sends vc-request-with-auth bob.recv_msg(&sent).await; @@ -1029,16 +1032,16 @@ mod tests { let msg = alice.parse_msg(&sent).await; assert!(msg.was_encrypted()); assert_eq!( - msg.get(HeaderDef::SecureJoin).unwrap(), + msg.get_header(HeaderDef::SecureJoin).unwrap(), "vc-request-with-auth" ); - assert!(msg.get(HeaderDef::SecureJoinAuth).is_some()); + assert!(msg.get_header(HeaderDef::SecureJoinAuth).is_some()); let bob_fp = SignedPublicKey::load_self(&bob.ctx) .await .unwrap() .fingerprint(); assert_eq!( - *msg.get(HeaderDef::SecureJoinFingerprint).unwrap(), + *msg.get_header(HeaderDef::SecureJoinFingerprint).unwrap(), bob_fp.hex() ); @@ -1087,7 +1090,7 @@ mod tests { let msg = bob.parse_msg(&sent).await; assert!(msg.was_encrypted()); assert_eq!( - msg.get(HeaderDef::SecureJoin).unwrap(), + msg.get_header(HeaderDef::SecureJoin).unwrap(), "vc-contact-confirm" ); @@ -1136,7 +1139,7 @@ mod tests { let msg = alice.parse_msg(&sent).await; assert!(msg.was_encrypted()); assert_eq!( - msg.get(HeaderDef::SecureJoin).unwrap(), + msg.get_header(HeaderDef::SecureJoin).unwrap(), "vc-contact-confirm-received" ); } @@ -1221,16 +1224,16 @@ mod tests { let msg = alice.parse_msg(&sent).await; assert!(msg.was_encrypted()); assert_eq!( - msg.get(HeaderDef::SecureJoin).unwrap(), + msg.get_header(HeaderDef::SecureJoin).unwrap(), "vc-request-with-auth" ); - assert!(msg.get(HeaderDef::SecureJoinAuth).is_some()); + assert!(msg.get_header(HeaderDef::SecureJoinAuth).is_some()); let bob_fp = SignedPublicKey::load_self(&bob.ctx) .await .unwrap() .fingerprint(); assert_eq!( - *msg.get(HeaderDef::SecureJoinFingerprint).unwrap(), + *msg.get_header(HeaderDef::SecureJoinFingerprint).unwrap(), bob_fp.hex() ); @@ -1262,7 +1265,7 @@ mod tests { let msg = bob.parse_msg(&sent).await; assert!(msg.was_encrypted()); assert_eq!( - msg.get(HeaderDef::SecureJoin).unwrap(), + msg.get_header(HeaderDef::SecureJoin).unwrap(), "vc-contact-confirm" ); @@ -1291,7 +1294,7 @@ mod tests { let msg = alice.parse_msg(&sent).await; assert!(msg.was_encrypted()); assert_eq!( - msg.get(HeaderDef::SecureJoin).unwrap(), + msg.get_header(HeaderDef::SecureJoin).unwrap(), "vc-contact-confirm-received" ); } @@ -1334,8 +1337,8 @@ mod tests { assert_eq!(sent.recipient(), "alice@example.com".parse().unwrap()); let msg = alice.parse_msg(&sent).await; assert!(!msg.was_encrypted()); - assert_eq!(msg.get(HeaderDef::SecureJoin).unwrap(), "vg-request"); - assert!(msg.get(HeaderDef::SecureJoinInvitenumber).is_some()); + assert_eq!(msg.get_header(HeaderDef::SecureJoin).unwrap(), "vg-request"); + assert!(msg.get_header(HeaderDef::SecureJoinInvitenumber).is_some()); // Step 3: Alice receives vg-request, sends vg-auth-required alice.recv_msg(&sent).await; @@ -1343,7 +1346,10 @@ mod tests { let sent = alice.pop_sent_msg().await; let msg = bob.parse_msg(&sent).await; assert!(msg.was_encrypted()); - assert_eq!(msg.get(HeaderDef::SecureJoin).unwrap(), "vg-auth-required"); + assert_eq!( + msg.get_header(HeaderDef::SecureJoin).unwrap(), + "vg-auth-required" + ); // Step 4: Bob receives vg-auth-required, sends vg-request-with-auth bob.recv_msg(&sent).await; @@ -1378,16 +1384,16 @@ mod tests { let msg = alice.parse_msg(&sent).await; assert!(msg.was_encrypted()); assert_eq!( - msg.get(HeaderDef::SecureJoin).unwrap(), + msg.get_header(HeaderDef::SecureJoin).unwrap(), "vg-request-with-auth" ); - assert!(msg.get(HeaderDef::SecureJoinAuth).is_some()); + assert!(msg.get_header(HeaderDef::SecureJoinAuth).is_some()); let bob_fp = SignedPublicKey::load_self(&bob.ctx) .await .unwrap() .fingerprint(); assert_eq!( - *msg.get(HeaderDef::SecureJoinFingerprint).unwrap(), + *msg.get_header(HeaderDef::SecureJoinFingerprint).unwrap(), bob_fp.hex() ); @@ -1415,7 +1421,10 @@ mod tests { let sent = alice.pop_sent_msg().await; let msg = bob.parse_msg(&sent).await; assert!(msg.was_encrypted()); - assert_eq!(msg.get(HeaderDef::SecureJoin).unwrap(), "vg-member-added"); + assert_eq!( + msg.get_header(HeaderDef::SecureJoin).unwrap(), + "vg-member-added" + ); // Bob should not yet have Alice verified let contact_alice_id = @@ -1442,7 +1451,7 @@ mod tests { let msg = alice.parse_msg(&sent).await; assert!(msg.was_encrypted()); assert_eq!( - msg.get(HeaderDef::SecureJoin).unwrap(), + msg.get_header(HeaderDef::SecureJoin).unwrap(), "vg-member-added-received" ); diff --git a/src/securejoin/bobstate.rs b/src/securejoin/bobstate.rs index df374dd97..d4a0afffe 100644 --- a/src/securejoin/bobstate.rs +++ b/src/securejoin/bobstate.rs @@ -236,7 +236,7 @@ impl BobState { context: &Context, mime_message: &MimeMessage, ) -> Result> { - let step = match mime_message.get(HeaderDef::SecureJoin) { + let step = match mime_message.get_header(HeaderDef::SecureJoin) { Some(step) => step, None => { warn!( @@ -362,7 +362,7 @@ impl BobState { if let QrInvite::Group { .. } = self.invite { let member_added = mime_message - .get(HeaderDef::ChatGroupMemberAdded) + .get_header(HeaderDef::ChatGroupMemberAdded) .map(|s| s.as_str()) .ok_or_else(|| Error::msg("Missing Chat-Group-Member-Added header"))?; if !context.is_self_addr(member_added).await? {