From dabc8b430432c39752079fdb137b481738fa93a6 Mon Sep 17 00:00:00 2001 From: Jason Volk Date: Sat, 22 Apr 2023 21:43:21 -0700 Subject: [PATCH] modules/federation/user_keys_query: Cross signatures. --- modules/federation/user_keys_query.cc | 56 ++++++++++++++++++++++++++- 1 file changed, 54 insertions(+), 2 deletions(-) diff --git a/modules/federation/user_keys_query.cc b/modules/federation/user_keys_query.cc index a681f3512..2169e57fa 100644 --- a/modules/federation/user_keys_query.cc +++ b/modules/federation/user_keys_query.cc @@ -277,14 +277,66 @@ _query_user_device(client &client, out, device_id }; - devices.get(std::nothrow, device_id, "keys", [&device_id, &object] + devices.get(std::nothrow, device_id, "keys", [&devices, &device_id, &object] (const auto &event_idx, const json::object &device_keys) { + const auto &user_id + { + devices.user.user_id + }; + for(const auto &member : device_keys) + if(member.first != "signatures") + json::stack::member + { + object, member + }; + + json::stack::object sigs + { + object, "signatures" + }; + + json::stack::object user_sigs + { + sigs, user_id + }; + + const json::object device_keys_sigs + { + device_keys["signatures"] + }; + + const json::object device_keys_user_sigs + { + device_keys_sigs[user_id] + }; + + for(const auto &member : device_keys_user_sigs) json::stack::member { - object, member.first, member.second + user_sigs, member }; + + devices.get(std::nothrow, device_id, "signatures", [&user_id, &user_sigs] + (const auto &event_idx, const json::object &device_sigs) + { + const json::object device_sigs_sigs + { + device_sigs["signatures"] + }; + + const json::object device_sigs_user_sigs + { + device_sigs_sigs[user_id] + }; + + for(const auto &member : device_sigs_user_sigs) + json::stack::member + { + user_sigs, member + }; + }); }); devices.get(std::nothrow, device_id, "display_name", [&device_id, &object]