From bbed8099754ad1adbfa3f6fd3ffb6e7cc9f7d988 Mon Sep 17 00:00:00 2001 From: Jason Volk Date: Thu, 27 Apr 2023 17:03:22 -0700 Subject: [PATCH] ircd::m::user::keys: Consolidate cross signing keys update. --- include/ircd/m/user/keys.h | 2 + matrix/user_keys.cc | 51 ++++++++++++++++++++ modules/client/keys/device_signing/upload.cc | 40 +++------------ modules/m_signing_key_update.cc | 38 +++------------ 4 files changed, 67 insertions(+), 64 deletions(-) diff --git a/include/ircd/m/user/keys.h b/include/ircd/m/user/keys.h index a714a6da0..198889321 100644 --- a/include/ircd/m/user/keys.h +++ b/include/ircd/m/user/keys.h @@ -36,6 +36,8 @@ struct ircd::m::user::keys void cross_self(json::stack::object &) const; void cross_user(json::stack::object &) const; + void update(const m::signing_key_update &) const; + keys(const m::user &user) :user_room{user} {} diff --git a/matrix/user_keys.cc b/matrix/user_keys.cc index 7bb6e846d..cdaa505e5 100644 --- a/matrix/user_keys.cc +++ b/matrix/user_keys.cc @@ -87,6 +87,57 @@ catch(const std::exception &e) }; } +void +ircd::m::user::keys::update(const m::signing_key_update &sku) +const +{ + const m::user::id &user_id + { + json::get<"user_id"_>(sku) + }; + + const m::user::room room + { + user_id + }; + + const json::object &msk + { + json::get<"master_key"_>(sku) + }; + + const auto cross_master_id + { + json::get<"master_key"_>(sku)? + m::send(room, user_id, "ircd.cross_signing.master", "", msk): + m::event::id::buf{} + }; + + const json::object &ssk + { + json::get<"self_signing_key"_>(sku) + }; + + const auto cross_self_id + { + ssk? + m::send(room, user_id, "ircd.cross_signing.self", "", ssk): + m::event::id::buf{} + }; + + const json::object &usk + { + json::get<"user_signing_key"_>(sku) + }; + + const auto cross_user_id + { + usk && my(user_id)? + m::send(room, user_id, "ircd.cross_signing.user", "", usk): + m::event::id::buf{} + }; +} + void ircd::m::user::keys::device(json::stack::object &out, const string_view &device_id) diff --git a/modules/client/keys/device_signing/upload.cc b/modules/client/keys/device_signing/upload.cc index 98affb414..a0434f06e 100644 --- a/modules/client/keys/device_signing/upload.cc +++ b/modules/client/keys/device_signing/upload.cc @@ -66,52 +66,26 @@ ircd::m::post_keys_device_signing_upload(client &client, auth["password"] }; - const m::user::room room + const m::user user { request.user_id }; - if(!room.user.is_password(password)) + if(!user.is_password(password)) throw m::ACCESS_DENIED { "Incorrect password." }; - const json::object &msk + const m::user::keys keys { - request["master_key"] + user }; - const auto master_id - { - msk? - send(room, request.user_id, "ircd.cross_signing.master", "", msk): - event::id::buf{} - }; + m::signing_key_update sku{request}; + json::get<"user_id"_>(sku) = request.user_id; - const json::object &ssk - { - request["self_signing_key"] - }; - - const auto self_signing_id - { - ssk? - send(room, request.user_id, "ircd.cross_signing.self", "", ssk): - event::id::buf{} - }; - - const json::object &usk - { - request["user_signing_key"] - }; - - const auto user_signing_id - { - usk? - send(room, request.user_id, "ircd.cross_signing.user", "", usk): - event::id::buf{} - }; + keys.update(sku); return resource::response { diff --git a/modules/m_signing_key_update.cc b/modules/m_signing_key_update.cc index 8d0ea325d..edb350ec9 100644 --- a/modules/m_signing_key_update.cc +++ b/modules/m_signing_key_update.cc @@ -56,53 +56,29 @@ try if(user_id.host() != at<"origin"_>(event)) return; - const json::object &msk - { - json::get<"master_key"_>(update) - }; - - const m::user::room room - { - user_id - }; - - if(!exists(room)) + if(!exists(user_id)) { log::derror { m::log, "Refusing signing key update for unknown %s", - json::get<"user_id"_>(update), + string_view{user_id}, }; return; } - const auto master_id + const m::user::keys keys { - msk? - send(room, user_id, "ircd.cross_signing.master", "", msk): - m::event::id::buf{} + user_id }; - const json::object &ssk - { - json::get<"self_signing_key"_>(update) - }; - - const auto self_id - { - ssk? - send(room, user_id, "ircd.cross_signing.self", "", ssk): - m::event::id::buf{} - }; + keys.update(update); log::info { - m::log, "Signing key update from :%s by %s master:%s self:%s", + m::log, "Signing key update from '%s' for %s", json::get<"origin"_>(event), json::get<"user_id"_>(update), - string_view{master_id}, - string_view{self_id}, }; } catch(const ctx::interrupted &e) @@ -113,7 +89,7 @@ catch(const std::exception &e) { log::derror { - m::log, "m.signing_key_update from %s :%s", + m::log, "m.signing_key_update from '%s' :%s", json::get<"origin"_>(event), e.what(), };