summary refs log tree commit diff
diff options
context:
space:
mode:
authorNicolas Werner <nicolas.werner@hotmail.de>2021-09-06 00:32:09 +0200
committerNicolas Werner <nicolas.werner@hotmail.de>2021-09-06 00:32:09 +0200
commit6490ee3a34c914a4c59125d947afd5b7fc01810d (patch)
treeb9647d71ef4a473986519bcbd3a5ce76a108afde
parentMerge pull request #713 from Thulinma/noMoreDuplicates (diff)
downloadnheko-6490ee3a34c914a4c59125d947afd5b7fc01810d.tar.xz
Add workaround for broken key counts
-rw-r--r--src/ChatPage.cpp17
1 files changed, 17 insertions, 0 deletions
diff --git a/src/ChatPage.cpp b/src/ChatPage.cpp
index 5d2117cc..c5c27964 100644
--- a/src/ChatPage.cpp
+++ b/src/ChatPage.cpp
@@ -1001,6 +1001,23 @@ ChatPage::ensureOneTimeKeyCount(const std::map<std::string, uint16_t> &counts)
                                   // mark as published anyway, otherwise we may end up in a loop.
                                   olm::mark_keys_as_published();
                           });
+                } else if (count->second > 2 * MAX_ONETIME_KEYS) {
+                        nhlog::crypto()->warn("too many one-time keys, deleting 1");
+                        mtx::requests::ClaimKeys req;
+                        req.one_time_keys[http::client()->user_id().to_string()]
+                                         [http::client()->device_id()] =
+                          std::string(mtx::crypto::SIGNED_CURVE25519);
+                        http::client()->claim_keys(
+                          req, [](const mtx::responses::ClaimKeys &, mtx::http::RequestErr err) {
+                                  if (err)
+                                          nhlog::crypto()->warn(
+                                            "failed to clear 1 one-time key: {} {} {}",
+                                            err->matrix_error.error,
+                                            static_cast<int>(err->status_code),
+                                            static_cast<int>(err->error_code));
+                                  else
+                                          nhlog::crypto()->info("cleared 1 one-time key");
+                          });
                 }
         }
 }