Skip to content

Commit

Permalink
refactor: make MimeMessage.get_header() return Option<&str>
Browse files Browse the repository at this point in the history
  • Loading branch information
link2xt committed May 13, 2024
1 parent 2779737 commit 5ed91e9
Show file tree
Hide file tree
Showing 4 changed files with 30 additions and 26 deletions.
26 changes: 17 additions & 9 deletions src/mimeparser.rs
Expand Up @@ -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
Expand Down Expand Up @@ -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))
}
Expand Down
6 changes: 2 additions & 4 deletions src/receive_imf.rs
Expand Up @@ -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"
Expand Down Expand Up @@ -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,
Expand Down Expand Up @@ -2463,7 +2461,7 @@ async fn apply_mailinglist_changes(

fn try_getting_grpid(mime_parser: &MimeMessage) -> Option<String> {
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.
Expand Down
22 changes: 10 additions & 12 deletions src/securejoin.rs
Expand Up @@ -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 {
Expand All @@ -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 ====
Expand Down Expand Up @@ -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);
}
Expand All @@ -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,
Expand All @@ -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);
}
Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -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)
Expand Down
2 changes: 1 addition & 1 deletion src/securejoin/bobstate.rs
Expand Up @@ -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);
}
Expand Down

0 comments on commit 5ed91e9

Please sign in to comment.