summary refs log tree commit diff
path: root/src/Olm.cpp
diff options
context:
space:
mode:
authorJoseph Donofry <joedonofry@gmail.com>2021-04-13 17:58:39 -0400
committerJoseph Donofry <joedonofry@gmail.com>2021-04-13 17:58:39 -0400
commita6c89d13622907e4c4bf8464fc54fd6e98b62b0a (patch)
treede5e5f556b339067f88b60d306885ea163703f06 /src/Olm.cpp
parentFix emoji picker getting cut off (diff)
parentFix broken olm channels automatically (diff)
downloadnheko-a6c89d13622907e4c4bf8464fc54fd6e98b62b0a.tar.xz
Merge branch 'master' of ssh://github.com/Nheko-Reborn/nheko
Diffstat (limited to 'src/Olm.cpp')
-rw-r--r--src/Olm.cpp20
1 files changed, 20 insertions, 0 deletions
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<std::string, std::vector<std::string>> 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<mtx::events::msg::Dummy>{}, 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