From 99314c948edf1258829b0b6772664dc448625044 Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Tue, 13 Apr 2021 23:42:18 +0200 Subject: Fix broken olm channels automatically --- src/Olm.cpp | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) (limited to 'src/Olm.cpp') diff --git a/src/Olm.cpp b/src/Olm.cpp index 895afee4..95aae99a 100644 --- a/src/Olm.cpp +++ b/src/Olm.cpp @@ -359,6 +359,26 @@ handle_olm_message(const OlmMessage &msg) return; } } + + try { + auto otherUserDeviceKeys = cache::userKeys(msg.sender); + + if (!otherUserDeviceKeys) + return; + + std::map> targets; + for (auto [device_id, key] : otherUserDeviceKeys->device_keys) { + if (key.keys.at("curve25519:" + device_id) == msg.sender_key) + targets[msg.sender].push_back(device_id); + } + + send_encrypted_to_device_messages( + targets, mtx::events::DeviceEvent{}, true); + nhlog::crypto()->info( + "Recovering from broken olm channel with {}:{}", msg.sender, msg.sender_key); + } catch (std::exception &e) { + nhlog::crypto()->error("Failed to recover from broken olm sessions: {}", e.what()); + } } nlohmann::json -- cgit 1.5.1