mirror of
https://github.com/chatmail/core.git
synced 2026-05-23 00:36:32 +03:00
refactor: make MimeMessage.get_header() return Option<&str>
This commit is contained in:
@@ -556,19 +556,25 @@ impl MimeMessage {
|
|||||||
|
|
||||||
/// Parses avatar action headers.
|
/// Parses avatar action headers.
|
||||||
async fn parse_avatar_headers(&mut self, context: &Context) {
|
async fn parse_avatar_headers(&mut self, context: &Context) {
|
||||||
if let Some(header_value) = self.get_header(HeaderDef::ChatGroupAvatar).cloned() {
|
if let Some(header_value) = self.get_header(HeaderDef::ChatGroupAvatar) {
|
||||||
self.group_avatar = self.avatar_action_from_header(context, header_value).await;
|
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() {
|
if let Some(header_value) = self.get_header(HeaderDef::ChatUserAvatar) {
|
||||||
self.user_avatar = self.avatar_action_from_header(context, header_value).await;
|
self.user_avatar = self
|
||||||
|
.avatar_action_from_header(context, header_value.to_string())
|
||||||
|
.await;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn parse_videochat_headers(&mut self) {
|
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" {
|
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() {
|
if let Some(part) = self.parts.first_mut() {
|
||||||
part.typ = Viewtype::VideochatInvitation;
|
part.typ = Viewtype::VideochatInvitation;
|
||||||
part.param
|
part.param
|
||||||
@@ -815,12 +821,14 @@ impl MimeMessage {
|
|||||||
.map(|s| s.to_string())
|
.map(|s| s.to_string())
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn get_header(&self, headerdef: HeaderDef) -> Option<&String> {
|
pub fn get_header(&self, headerdef: HeaderDef) -> Option<&str> {
|
||||||
self.headers.get(headerdef.get_headername())
|
self.headers
|
||||||
|
.get(headerdef.get_headername())
|
||||||
|
.map(|s| s.as_str())
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Returns `Chat-Group-ID` header value if it is a valid group ID.
|
/// 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)
|
self.get_header(HeaderDef::ChatGroupId)
|
||||||
.filter(|s| validate_id(s))
|
.filter(|s| validate_id(s))
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1373,11 +1373,9 @@ async fn add_parts(
|
|||||||
|
|
||||||
let mime_in_reply_to = mime_parser
|
let mime_in_reply_to = mime_parser
|
||||||
.get_header(HeaderDef::InReplyTo)
|
.get_header(HeaderDef::InReplyTo)
|
||||||
.cloned()
|
|
||||||
.unwrap_or_default();
|
.unwrap_or_default();
|
||||||
let mime_references = mime_parser
|
let mime_references = mime_parser
|
||||||
.get_header(HeaderDef::References)
|
.get_header(HeaderDef::References)
|
||||||
.cloned()
|
|
||||||
.unwrap_or_default();
|
.unwrap_or_default();
|
||||||
|
|
||||||
// fine, so far. now, split the message into simple parts usable as "short messages"
|
// 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());
|
let reaction_str = simplify::remove_footers(part.msg.as_str());
|
||||||
set_msg_reaction(
|
set_msg_reaction(
|
||||||
context,
|
context,
|
||||||
&mime_in_reply_to,
|
mime_in_reply_to,
|
||||||
orig_chat_id.unwrap_or_default(),
|
orig_chat_id.unwrap_or_default(),
|
||||||
from_id,
|
from_id,
|
||||||
sort_timestamp,
|
sort_timestamp,
|
||||||
@@ -2463,7 +2461,7 @@ async fn apply_mailinglist_changes(
|
|||||||
|
|
||||||
fn try_getting_grpid(mime_parser: &MimeMessage) -> Option<String> {
|
fn try_getting_grpid(mime_parser: &MimeMessage) -> Option<String> {
|
||||||
if let Some(optional_field) = mime_parser.get_chat_group_id() {
|
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.
|
// Useful for undecipherable messages sent to known group.
|
||||||
|
|||||||
@@ -294,7 +294,7 @@ pub(crate) async fn handle_securejoin_handshake(
|
|||||||
|
|
||||||
let join_vg = step.starts_with("vg-");
|
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 mut self_found = false;
|
||||||
let self_fingerprint = load_self_public_key(context).await?.fingerprint();
|
let self_fingerprint = load_self_public_key(context).await?.fingerprint();
|
||||||
for (addr, key) in &mime_message.gossiped_keys {
|
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" => {
|
"vg-request" | "vc-request" => {
|
||||||
/*=======================================================
|
/*=======================================================
|
||||||
==== Alice - the inviter side ====
|
==== Alice - the inviter side ====
|
||||||
@@ -487,7 +487,7 @@ pub(crate) async fn handle_securejoin_handshake(
|
|||||||
=======================================================*/
|
=======================================================*/
|
||||||
"vc-contact-confirm" => {
|
"vc-contact-confirm" => {
|
||||||
if let Some(mut bobstate) = BobState::from_db(&context.sql).await? {
|
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.");
|
warn!(context, "Unexpected vc-contact-confirm.");
|
||||||
return Ok(HandshakeMessage::Ignore);
|
return Ok(HandshakeMessage::Ignore);
|
||||||
}
|
}
|
||||||
@@ -498,9 +498,7 @@ pub(crate) async fn handle_securejoin_handshake(
|
|||||||
Ok(HandshakeMessage::Ignore)
|
Ok(HandshakeMessage::Ignore)
|
||||||
}
|
}
|
||||||
"vg-member-added" => {
|
"vg-member-added" => {
|
||||||
let Some(member_added) = mime_message
|
let Some(member_added) = mime_message.get_header(HeaderDef::ChatGroupMemberAdded)
|
||||||
.get_header(HeaderDef::ChatGroupMemberAdded)
|
|
||||||
.map(|s| s.as_str())
|
|
||||||
else {
|
else {
|
||||||
warn!(
|
warn!(
|
||||||
context,
|
context,
|
||||||
@@ -516,7 +514,7 @@ pub(crate) async fn handle_securejoin_handshake(
|
|||||||
return Ok(HandshakeMessage::Propagate);
|
return Ok(HandshakeMessage::Propagate);
|
||||||
}
|
}
|
||||||
if let Some(mut bobstate) = BobState::from_db(&context.sql).await? {
|
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.");
|
warn!(context, "Unexpected vg-member-added.");
|
||||||
return Ok(HandshakeMessage::Propagate);
|
return Ok(HandshakeMessage::Propagate);
|
||||||
}
|
}
|
||||||
@@ -571,7 +569,7 @@ pub(crate) async fn observe_securejoin_on_other_device(
|
|||||||
info!(context, "Observing secure-join message {step:?}.");
|
info!(context, "Observing secure-join message {step:?}.");
|
||||||
|
|
||||||
if !matches!(
|
if !matches!(
|
||||||
step.as_str(),
|
step,
|
||||||
"vg-request-with-auth" | "vc-request-with-auth" | "vg-member-added" | "vc-contact-confirm"
|
"vg-request-with-auth" | "vc-request-with-auth" | "vg-member-added" | "vc-contact-confirm"
|
||||||
) {
|
) {
|
||||||
return Ok(HandshakeMessage::Ignore);
|
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?;
|
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);
|
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);
|
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
|
// 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
|
// join) and causes a subsequent "vg-member-added" message to create an unblocked
|
||||||
// verified group.
|
// verified group.
|
||||||
ChatId::create_for_contact_with_blocked(context, contact_id, Blocked::Not).await?;
|
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)
|
Ok(HandshakeMessage::Propagate)
|
||||||
} else {
|
} else {
|
||||||
Ok(HandshakeMessage::Ignore)
|
Ok(HandshakeMessage::Ignore)
|
||||||
|
|||||||
@@ -261,7 +261,7 @@ impl BobState {
|
|||||||
return Ok(None);
|
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);
|
info!(context, "{} message out of sync for BobState", step);
|
||||||
return Ok(None);
|
return Ok(None);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user