From 5105629c0889b96226b4cc09ecaaaa6c1d8a9b41 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Damir=20Jeli=C4=87?= Date: Fri, 11 Dec 2020 16:13:58 +0100 Subject: [PATCH] crypto: WIP handle in-room start events. --- matrix_sdk_crypto/src/verification/machine.rs | 28 ++++++++++++++++++- .../src/verification/requests.rs | 11 +++----- 2 files changed, 31 insertions(+), 8 deletions(-) diff --git a/matrix_sdk_crypto/src/verification/machine.rs b/matrix_sdk_crypto/src/verification/machine.rs index ccdcf61e..ad2e49f3 100644 --- a/matrix_sdk_crypto/src/verification/machine.rs +++ b/matrix_sdk_crypto/src/verification/machine.rs @@ -46,7 +46,7 @@ pub struct VerificationMachine { private_identity: Arc>, pub(crate) store: Arc>, verifications: Arc>, - room_verifications: Arc>, + room_verifications: Arc>, requests: Arc>, outgoing_to_device_messages: Arc>, } @@ -202,6 +202,32 @@ impl VerificationMachine { ); if let Some((_, request)) = self.requests.remove(&e.content.relation.event_id) { + if let Some(d) = self + .store + .get_device(&e.sender, &e.content.from_device) + .await? + { + match request.into_started_sas( + e, + d, + self.store.get_user_identity(&e.sender).await?, + ) { + Ok(s) => { + // TODO we need to queue up the accept event + // here. + let accept_event = s.accept(); + self.room_verifications + .insert(e.content.relation.event_id.clone(), s); + } + Err(c) => { + warn!( + "Can't start key verification with {} {}, canceling: {:?}", + e.sender, e.content.from_device, c + ); + // self.queue_up_content(&e.sender, &e.content.from_device, c) + } + } + } } } _ => (), diff --git a/matrix_sdk_crypto/src/verification/requests.rs b/matrix_sdk_crypto/src/verification/requests.rs index 5b3102e8..ffffa55e 100644 --- a/matrix_sdk_crypto/src/verification/requests.rs +++ b/matrix_sdk_crypto/src/verification/requests.rs @@ -23,7 +23,7 @@ use matrix_sdk_common::{ ready::ReadyEventContent, start::StartEventContent, Relation, VerificationMethod, }, room::message::KeyVerificationRequestEventContent, - MessageEvent, + MessageEvent, SyncMessageEvent, }, identifiers::{DeviceId, DeviceIdBox, EventId, RoomId, UserId}, }; @@ -87,7 +87,7 @@ impl VerificationRequest { pub(crate) fn into_started_sas( &self, - event: &MessageEvent, + event: &SyncMessageEvent, device: ReadOnlyDevice, user_identity: Option, ) -> Result { @@ -128,7 +128,7 @@ impl InnerRequest { fn into_started_sas( &mut self, - event: &MessageEvent, + event: &SyncMessageEvent, store: Arc>, account: ReadOnlyAccount, private_identity: PrivateCrossSigningIdentity, @@ -299,7 +299,7 @@ struct Ready { impl RequestState { fn into_started_sas( &self, - event: &MessageEvent, + event: &SyncMessageEvent, store: Arc>, account: ReadOnlyAccount, private_identity: PrivateCrossSigningIdentity, @@ -344,6 +344,3 @@ struct Passive { /// unique id identifying this verification flow. pub flow_id: EventId, } - -#[derive(Clone, Debug)] -struct Started {}