From 3d6872607e02e4b90829d2f7e7054ee298788dbe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Damir=20Jeli=C4=87?= Date: Tue, 21 Jul 2020 11:12:20 +0200 Subject: [PATCH] crypto: Move the m.room_key content creation into the outbound group session. --- matrix_sdk_crypto/src/machine.rs | 19 ++++--------------- matrix_sdk_crypto/src/olm/group_sessions.rs | 14 +++++++++++++- 2 files changed, 17 insertions(+), 16 deletions(-) diff --git a/matrix_sdk_crypto/src/machine.rs b/matrix_sdk_crypto/src/machine.rs index 5d05dd4a..cb364fd9 100644 --- a/matrix_sdk_crypto/src/machine.rs +++ b/matrix_sdk_crypto/src/machine.rs @@ -899,30 +899,19 @@ impl OlmMachine { I: IntoIterator, { self.create_outbound_group_session(room_id).await?; - let megolm_session = self.outbound_group_sessions.get(room_id).unwrap(); + let session = self.outbound_group_sessions.get(room_id).unwrap(); - if megolm_session.shared() { + if session.shared() { panic!("Session is already shared"); } - let session_id = megolm_session.session_id().to_owned(); - // TODO don't mark the session as shared automatically only, when all // the requests are done, failure to send these requests will likely end // up in wedged sessions. We'll need to store the requests and let the // caller mark them as sent using an UUID. - megolm_session.mark_as_shared(); + session.mark_as_shared(); - // TODO the key content creation can go into the OutboundGroupSession - // struct. - - let key_content = json!({ - "algorithm": Algorithm::MegolmV1AesSha2, - "room_id": room_id, - "session_id": session_id.clone(), - "session_key": megolm_session.session_key().await, - "chain_index": megolm_session.message_index().await, - }); + let key_content = session.as_json().await; let mut user_map = Vec::new(); diff --git a/matrix_sdk_crypto/src/olm/group_sessions.rs b/matrix_sdk_crypto/src/olm/group_sessions.rs index 53fe36ca..7b977d3c 100644 --- a/matrix_sdk_crypto/src/olm/group_sessions.rs +++ b/matrix_sdk_crypto/src/olm/group_sessions.rs @@ -41,7 +41,7 @@ use matrix_sdk_common::{ encrypted::{EncryptedEventContent, MegolmV1AesSha2Content}, message::MessageEventContent, }, - AnySyncRoomEvent, EventJson, EventType, SyncMessageEvent, + Algorithm, AnySyncRoomEvent, EventJson, EventType, SyncMessageEvent, }, identifiers::{DeviceId, RoomId}, }; @@ -385,6 +385,18 @@ impl OutboundGroupSession { let session = self.inner.lock().await; session.session_message_index() } + + /// Get the outbound group session key as a json value that can be sent as a + /// m.room_key. + pub async fn as_json(&self) -> Value { + json!({ + "algorithm": Algorithm::MegolmV1AesSha2, + "room_id": &*self.room_id, + "session_id": &*self.session_id, + "session_key": self.session_key().await, + "chain_index": self.message_index().await, + }) + } } // #[cfg_attr(tarpaulin, skip)]