From 62f17dffbd30a3d2e69d5110359055eed0cdca5a Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Mon, 13 Jan 2020 12:37:02 +0100 Subject: [PATCH] Fix replies in encrypted rooms The relation needs to be unencrypted... --- deps/CMakeLists.txt | 4 ++-- src/Olm.cpp | 18 +++++++++++++----- src/Olm.h | 2 +- src/timeline/TimelineModel.cpp | 12 ++++++++---- 4 files changed, 24 insertions(+), 12 deletions(-) diff --git a/deps/CMakeLists.txt b/deps/CMakeLists.txt index f4d454a0..64189772 100644 --- a/deps/CMakeLists.txt +++ b/deps/CMakeLists.txt @@ -46,10 +46,10 @@ set(BOOST_SHA256 set( MTXCLIENT_URL - https://github.com/Nheko-Reborn/mtxclient/archive/6d2a02b6079c9d888c28cd24504618aaadb7fa97.zip + https://github.com/Nheko-Reborn/mtxclient/archive/84c6778cc367bca79755e73e77b2cc69950375b2.zip ) set(MTXCLIENT_HASH - 30811e076ee1fee22ba5d5d92c94a5425ff714a7ccb245ff4ac64fecb04dc539) + 009fc9628cbdb94694eff3bba3fe54415e432385200c886bb1c1182bcf290c0a) set( TWEENY_URL https://github.com/mobius3/tweeny/archive/b94ce07cfb02a0eb8ac8aaf66137dabdaea857cf.tar.gz diff --git a/src/Olm.cpp b/src/Olm.cpp index 5859fe8e..4fa473d3 100644 --- a/src/Olm.cpp +++ b/src/Olm.cpp @@ -159,15 +159,22 @@ handle_pre_key_olm_message(const std::string &sender, } mtx::events::msg::Encrypted -encrypt_group_message(const std::string &room_id, - const std::string &device_id, - const std::string &body) +encrypt_group_message(const std::string &room_id, const std::string &device_id, nlohmann::json body) { using namespace mtx::events; - // Always chech before for existence. + nhlog::crypto()->info("message body {}", body.dump()); + + // relations shouldn't be encrypted... + mtx::common::RelatesTo relation; + if (body["content"].count("m.relates_to") != 0) { + relation = body["content"]["m.relates_to"]; + body["content"].erase("m.relates_to"); + } + + // Always check before for existence. auto res = cache::getOutboundMegolmSession(room_id); - auto payload = olm::client()->encrypt_group_message(res.session, body); + auto payload = olm::client()->encrypt_group_message(res.session, body.dump()); // Prepare the m.room.encrypted event. msg::Encrypted data; @@ -176,6 +183,7 @@ encrypt_group_message(const std::string &room_id, data.session_id = res.data.session_id; data.device_id = device_id; data.algorithm = MEGOLM_ALGO; + data.relates_to = relation; auto message_index = olm_outbound_group_session_message_index(res.session); nhlog::crypto()->info("next message_index {}", message_index); diff --git a/src/Olm.h b/src/Olm.h index ae4e0659..501a1621 100644 --- a/src/Olm.h +++ b/src/Olm.h @@ -62,7 +62,7 @@ handle_pre_key_olm_message(const std::string &sender, mtx::events::msg::Encrypted encrypt_group_message(const std::string &room_id, const std::string &device_id, - const std::string &body); + nlohmann::json body); void mark_keys_as_published(); diff --git a/src/timeline/TimelineModel.cpp b/src/timeline/TimelineModel.cpp index a1367bf3..3064ab4a 100644 --- a/src/timeline/TimelineModel.cpp +++ b/src/timeline/TimelineModel.cpp @@ -734,6 +734,10 @@ TimelineModel::decryptEvent(const mtx::events::EncryptedEventdevice_id(), doc.dump()); + auto data = + olm::encrypt_group_message(room_id, http::client()->device_id(), doc); http::client()->send_room_message( room_id, @@ -902,7 +906,7 @@ TimelineModel::sendEncryptedMessage(const std::string &txn_id, nlohmann::json co std::make_shared([megolm_payload, room_id, doc, txn_id, this]() { try { auto data = olm::encrypt_group_message( - room_id, http::client()->device_id(), doc.dump()); + room_id, http::client()->device_id(), doc); http::client() ->send_room_message(