mirror of
https://github.com/matrix-construct/construct
synced 2024-11-28 17:52:54 +01:00
ircd:Ⓜ️:user::keys: Consolidate cross signing keys update.
This commit is contained in:
parent
f9aeae5516
commit
bbed809975
4 changed files with 67 additions and 64 deletions
|
@ -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}
|
||||
{}
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
{
|
||||
|
|
|
@ -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(),
|
||||
};
|
||||
|
|
Loading…
Reference in a new issue