crypto: Make sure we send verification done events

master
Damir Jelić 2021-06-03 21:18:05 +02:00
parent 9b20b00908
commit cbcf673d21
3 changed files with 12 additions and 15 deletions

View File

@ -46,7 +46,6 @@ pub enum InnerSas {
Confirmed(SasState<Confirmed>), Confirmed(SasState<Confirmed>),
MacReceived(SasState<MacReceived>), MacReceived(SasState<MacReceived>),
WaitingForDone(SasState<WaitingForDone>), WaitingForDone(SasState<WaitingForDone>),
WaitingForDoneUnconfirmed(SasState<WaitingForDone>),
Done(SasState<Done>), Done(SasState<Done>),
Cancelled(SasState<Cancelled>), Cancelled(SasState<Cancelled>),
} }
@ -88,7 +87,6 @@ impl InnerSas {
.short_auth_string .short_auth_string
.contains(&ShortAuthenticationString::Emoji), .contains(&ShortAuthenticationString::Emoji),
InnerSas::WaitingForDone(_) => false, InnerSas::WaitingForDone(_) => false,
InnerSas::WaitingForDoneUnconfirmed(_) => false,
InnerSas::Done(_) => false, InnerSas::Done(_) => false,
InnerSas::Cancelled(_) => false, InnerSas::Cancelled(_) => false,
} }
@ -154,7 +152,6 @@ impl InnerSas {
InnerSas::MacReceived(s) => s.set_creation_time(time), InnerSas::MacReceived(s) => s.set_creation_time(time),
InnerSas::Done(s) => s.set_creation_time(time), InnerSas::Done(s) => s.set_creation_time(time),
InnerSas::WaitingForDone(s) => s.set_creation_time(time), InnerSas::WaitingForDone(s) => s.set_creation_time(time),
InnerSas::WaitingForDoneUnconfirmed(s) => s.set_creation_time(time),
} }
} }
@ -181,11 +178,11 @@ impl InnerSas {
(InnerSas::Confirmed(sas), Some(content)) (InnerSas::Confirmed(sas), Some(content))
} }
InnerSas::MacReceived(s) => { InnerSas::MacReceived(s) => {
if s.is_dm_verification() { if s.started_from_request {
let sas = s.confirm_and_wait_for_done(); let sas = s.confirm_and_wait_for_done();
let content = sas.as_content(); let content = sas.as_content();
(InnerSas::WaitingForDoneUnconfirmed(sas), Some(content)) (InnerSas::WaitingForDone(sas), Some(content))
} else { } else {
let sas = s.confirm(); let sas = s.confirm();
let content = sas.as_content(); let content = sas.as_content();
@ -273,13 +270,6 @@ impl InnerSas {
}, },
AnyVerificationContent::Done(c) => match self { AnyVerificationContent::Done(c) => match self {
InnerSas::WaitingForDone(s) => match s.into_done(sender, c) { InnerSas::WaitingForDone(s) => match s.into_done(sender, c) {
Ok(s) => (InnerSas::Done(s), None),
Err(s) => {
let content = s.as_content();
(InnerSas::Cancelled(s), Some(content))
}
},
InnerSas::WaitingForDoneUnconfirmed(s) => match s.into_done(sender, c) {
Ok(s) => { Ok(s) => {
let content = s.done_content(); let content = s.done_content();
(InnerSas::Done(s), Some(content)) (InnerSas::Done(s), Some(content))
@ -289,7 +279,6 @@ impl InnerSas {
(InnerSas::Cancelled(s), Some(content)) (InnerSas::Cancelled(s), Some(content))
} }
}, },
_ => (self, None), _ => (self, None),
}, },
AnyVerificationContent::Request(_) AnyVerificationContent::Request(_)
@ -320,7 +309,6 @@ impl InnerSas {
InnerSas::Confirmed(s) => s.timed_out(), InnerSas::Confirmed(s) => s.timed_out(),
InnerSas::MacReceived(s) => s.timed_out(), InnerSas::MacReceived(s) => s.timed_out(),
InnerSas::WaitingForDone(s) => s.timed_out(), InnerSas::WaitingForDone(s) => s.timed_out(),
InnerSas::WaitingForDoneUnconfirmed(s) => s.timed_out(),
InnerSas::Done(s) => s.timed_out(), InnerSas::Done(s) => s.timed_out(),
} }
} }
@ -335,7 +323,6 @@ impl InnerSas {
InnerSas::Confirmed(s) => s.verification_flow_id.clone(), InnerSas::Confirmed(s) => s.verification_flow_id.clone(),
InnerSas::MacReceived(s) => s.verification_flow_id.clone(), InnerSas::MacReceived(s) => s.verification_flow_id.clone(),
InnerSas::WaitingForDone(s) => s.verification_flow_id.clone(), InnerSas::WaitingForDone(s) => s.verification_flow_id.clone(),
InnerSas::WaitingForDoneUnconfirmed(s) => s.verification_flow_id.clone(),
InnerSas::Done(s) => s.verification_flow_id.clone(), InnerSas::Done(s) => s.verification_flow_id.clone(),
} }
} }

View File

@ -37,6 +37,7 @@ use matrix_sdk_common::{
identifiers::{DeviceId, EventId, RoomId, UserId}, identifiers::{DeviceId, EventId, RoomId, UserId},
uuid::Uuid, uuid::Uuid,
}; };
use tracing::trace;
use super::{ use super::{
event_enums::{AnyVerificationContent, OwnedAcceptContent, StartContent}, event_enums::{AnyVerificationContent, OwnedAcceptContent, StartContent},
@ -305,6 +306,14 @@ impl Sas {
} }
}); });
if mac_request.is_some() {
trace!(
user_id = self.other_user_id().as_str(),
device_id = self.other_device_id().as_str(),
"Confirming SAS verification"
)
}
if done { if done {
match self.mark_as_done().await? { match self.mark_as_done().await? {
VerificationResult::Cancel(c) => Ok((self.cancel_with_code(c), None)), VerificationResult::Cancel(c) => Ok((self.cancel_with_code(c), None)),

View File

@ -316,6 +316,7 @@ impl<S: Clone> SasState<S> {
} }
/// Is this verification happening inside a DM. /// Is this verification happening inside a DM.
#[allow(dead_code)]
pub fn is_dm_verification(&self) -> bool { pub fn is_dm_verification(&self) -> bool {
matches!(&*self.verification_flow_id, FlowId::InRoom(_, _)) matches!(&*self.verification_flow_id, FlowId::InRoom(_, _))
} }