0
0
Fork 0
mirror of https://github.com/matrix-construct/construct synced 2025-03-13 21:10:32 +01:00

ircd:Ⓜ️:keys: Add pretty()/pretty_oneline() output diagnostics.

This commit is contained in:
Jason Volk 2019-06-25 06:59:42 -07:00
parent 758ee9c185
commit 754adf33ec
3 changed files with 94 additions and 6 deletions

View file

@ -18,6 +18,9 @@ namespace ircd::m
bool expired(const m::keys &);
bool verify(const m::keys &, std::nothrow_t) noexcept;
void verify(const m::keys &);
std::ostream &pretty(std::ostream &, const m::keys &);
std::ostream &pretty_oneline(std::ostream &, const m::keys &);
}
/// Contains the public keys and proof of identity for a remote server.

View file

@ -5431,9 +5431,9 @@ console_cmd__key(opt &out, const string_view &line)
// keys cached for server by param.
m::keys::cache::for_each(server_name, [&out]
(const json::object &object)
(const m::keys &keys)
{
out << object << std::endl;
pretty_oneline(out, keys) << std::endl;
return true;
});
@ -5461,9 +5461,9 @@ console_cmd__key__get(opt &out, const string_view &line)
if(!query_server)
{
m::keys::get(server_name, [&out]
(const auto &keys)
(const m::keys &keys)
{
out << keys << std::endl;
pretty(out, keys) << std::endl;
});
}
else
@ -5474,9 +5474,9 @@ console_cmd__key__get(opt &out, const string_view &line)
};
m::keys::query(query_server, queries, [&out]
(const auto &keys)
(const m::keys &keys)
{
out << keys << std::endl;
pretty_oneline(out, keys) << std::endl;
return true;
});
}

View file

@ -15,6 +15,91 @@ IRCD_MODULE
,ircd::m::self::init::keys
};
std::ostream &
IRCD_MODULE_EXPORT
ircd::m::pretty_oneline(std::ostream &s,
const m::keys &keys)
{
s << json::get<"server_name"_>(keys)
<< ' ';
char smbuf[32];
s << smalldate(smbuf, json::get<"valid_until_ts"_>(keys) / 1000L)
<< " (" << json::get<"valid_until_ts"_>(keys) << ")"
<< ' ';
for(const json::object &fp : json::get<"tls_fingerprints"_>(keys))
{
s << "tls[ ";
for(const auto &[digest, fingerprint] : fp)
s << digest << ' ';
s << "] ";
}
for(const auto &[domain, signature_] : json::get<"signatures"_>(keys))
{
s << "sig[ " << domain << ' ';
for(const auto &[key_id, signature] : json::object(signature_))
s << key_id << ' ';
s << "] ";
}
for(const auto &[domain, verify_key_] : json::get<"verify_keys"_>(keys))
{
s << "key[ " << domain << ' ';
for(const auto &[key_id, verify_key] : json::object(verify_key_))
s << key_id << ' ';
s << "] ";
}
return s;
}
std::ostream &
IRCD_MODULE_EXPORT
ircd::m::pretty(std::ostream &s,
const m::keys &keys)
{
s << std::setw(16) << std::right << "server name "
<< json::get<"server_name"_>(keys)
<< '\n';
char tmbuf[64];
s << std::setw(16) << std::right << "valid until "
<< timef(tmbuf, json::get<"valid_until_ts"_>(keys) / 1000, ircd::localtime)
<< " (" << json::get<"valid_until_ts"_>(keys) << ")"
<< '\n';
for(const json::object &fp : json::get<"tls_fingerprints"_>(keys))
for(const auto &[digest, fingerprint] : fp)
s << std::setw(16) << std::right << "[fingerprint] "
<< digest << ' ' << unquote(fingerprint)
<< '\n';
for(const auto &[domain, signature_] : json::get<"signatures"_>(keys))
for(const auto &[key_id, signature] : json::object(signature_))
s << std::setw(16) << std::right << "[signature] "
<< domain << ' '
<< key_id << ' '
<< unquote(signature) << '\n';
for(const auto &[domain, verify_key_] : json::get<"verify_keys"_>(keys))
for(const auto &[key_id, verify_key] : json::object(verify_key_))
s << std::setw(16) << std::right << "[verify_key] "
<< domain << ' '
<< key_id << ' '
<< unquote(verify_key) << '\n';
for(const auto &[domain, old_verify_key_] : json::get<"old_verify_keys"_>(keys))
for(const auto &[key_id, old_verify_key] : json::object(old_verify_key_))
s << std::setw(16) << std::right << "[old_verify_key] "
<< domain << ' '
<< key_id << ' '
<< unquote(old_verify_key) << '\n';
return s;
}
bool
IRCD_MODULE_EXPORT
ircd::m::verify(const m::keys &keys,