From 29d5de267b42f7a1ac7f073d87d3e2103c210978 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gabriel=20F=C3=A9ron?= Date: Sat, 18 Nov 2023 17:48:51 +0100 Subject: [PATCH] Send profile key with messages (#208) Also: - Save profile keys from incoming message also from SyncMessage - Remove quirks feature flag from presage-cli - Remove sleep when sending messages with CLI now that the websockets are handled properly --- presage-cli/src/main.rs | 6 ------ presage/Cargo.toml | 4 ++-- presage/src/manager/registered.rs | 31 +++++++++++++++++-------------- 3 files changed, 19 insertions(+), 22 deletions(-) diff --git a/presage-cli/src/main.rs b/presage-cli/src/main.rs index 7d5427095..06fdc7676 100644 --- a/presage-cli/src/main.rs +++ b/presage-cli/src/main.rs @@ -2,7 +2,6 @@ use core::fmt; use std::convert::TryInto; use std::path::Path; use std::path::PathBuf; -use std::time::Duration; use std::time::UNIX_EPOCH; use anyhow::{anyhow, bail, Context as _}; @@ -37,7 +36,6 @@ use presage_store_sled::OnNewIdentity; use presage_store_sled::SledStore; use tempfile::Builder; use tokio::task; -use tokio::time::sleep; use tokio::{ fs, io::{self, AsyncBufReadExt, BufReader}, @@ -236,14 +234,10 @@ async fn send( } }); - sleep(Duration::from_secs(5)).await; - manager .send_message(*uuid, message, timestamp) .await .unwrap(); - - sleep(Duration::from_secs(5)).await; }) .await; diff --git a/presage/Cargo.toml b/presage/Cargo.toml index 4a23d6e35..878a799cc 100644 --- a/presage/Cargo.toml +++ b/presage/Cargo.toml @@ -6,8 +6,8 @@ authors = ["Gabriel FĂ©ron "] edition = "2021" [dependencies] -libsignal-service = { git = "https://github.com/whisperfish/libsignal-service-rs", rev = "f40eb4f" } -libsignal-service-hyper = { git = "https://github.com/whisperfish/libsignal-service-rs", rev = "f40eb4f" } +libsignal-service = { git = "https://github.com/whisperfish/libsignal-service-rs", rev = "afb5114" } +libsignal-service-hyper = { git = "https://github.com/whisperfish/libsignal-service-rs", rev = "afb5114" } base64 = "0.21" futures = "0.3" diff --git a/presage/src/manager/registered.rs b/presage/src/manager/registered.rs index 0ae0ada7a..fbd511356 100644 --- a/presage/src/manager/registered.rs +++ b/presage/src/manager/registered.rs @@ -646,6 +646,14 @@ impl Manager { certificate: sender_certificate.clone(), }); + // we need to put our profile key in DataMessage + if let ContentBody::DataMessage(message) = &mut content_body { + message + .profile_key + .get_or_insert(self.state.data.profile_key().get_bytes().to_vec()); + message.required_protocol_version = Some(0); + } + sender .send_message( &recipient, @@ -976,20 +984,6 @@ fn save_message(store: &mut S, message: Content) -> Result<(), Error Some(message), @@ -1003,12 +997,21 @@ fn save_message(store: &mut S, message: Content) -> Result<(), Error match data_message { DataMessage { + profile_key: Some(profile_key_bytes), delete: Some(Delete { target_sent_timestamp: Some(ts), }), .. } => { + // update recipient profile key + if let Ok(profile_key_bytes) = profile_key_bytes.clone().try_into() { + let sender_uuid = message.metadata.sender.uuid; + let profile_key = ProfileKey::create(profile_key_bytes); + debug!("inserting profile key for {sender_uuid}"); + store.upsert_profile_key(&sender_uuid, profile_key)?; + } + // replace an existing message by an empty NullMessage if let Some(mut existing_msg) = store.message(&thread, *ts)? { existing_msg.metadata.sender.uuid = Uuid::nil();