rippled
Loading...
Searching...
No Matches
DoManifest.cpp
1// Copyright (c) 2019 Dev Null Productions
2
3#include <xrpld/app/main/Application.h>
4#include <xrpld/rpc/Context.h>
5
6#include <xrpl/basics/base64.h>
7#include <xrpl/json/json_value.h>
8#include <xrpl/protocol/ErrorCodes.h>
9#include <xrpl/protocol/jss.h>
10
11namespace ripple {
14{
15 auto& params = context.params;
16
17 if (!params.isMember(jss::public_key))
18 return RPC::missing_field_error(jss::public_key);
19
20 auto const requested = params[jss::public_key].asString();
21
22 Json::Value ret;
23 ret[jss::requested] = requested;
24
25 auto const pk = parseBase58<PublicKey>(TokenType::NodePublic, requested);
26 if (!pk)
27 {
29 return ret;
30 }
31
32 // first attempt to use params as ephemeral key,
33 // if this lookup succeeds master key will be returned,
34 // else an unseated optional is returned
35 auto const mk = context.app.validatorManifests().getMasterKey(*pk);
36
37 auto const ek = context.app.validatorManifests().getSigningKey(mk);
38
39 // if ephemeral key not found, we don't have specified manifest
40 if (!ek)
41 return ret;
42
43 if (auto const manifest = context.app.validatorManifests().getManifest(mk))
44 ret[jss::manifest] = base64_encode(*manifest);
45 Json::Value details;
46
47 details[jss::master_key] = toBase58(TokenType::NodePublic, mk);
48 details[jss::ephemeral_key] = toBase58(TokenType::NodePublic, *ek);
49
50 if (auto const seq = context.app.validatorManifests().getSequence(mk))
51 details[jss::seq] = *seq;
52
53 if (auto const domain = context.app.validatorManifests().getDomain(mk))
54 details[jss::domain] = *domain;
55
56 ret[jss::details] = details;
57 return ret;
58}
59} // namespace ripple
Represents a JSON value.
Definition json_value.h:131
virtual ManifestCache & validatorManifests()=0
std::optional< std::uint32_t > getSequence(PublicKey const &pk) const
Returns master key's current manifest sequence.
Definition Manifest.cpp:316
std::optional< std::string > getManifest(PublicKey const &pk) const
Returns mainfest corresponding to a given public key.
Definition Manifest.cpp:340
std::optional< PublicKey > getSigningKey(PublicKey const &pk) const
Returns master key's current signing key.
Definition Manifest.cpp:292
PublicKey getMasterKey(PublicKey const &pk) const
Returns ephemeral signing key's master public key.
Definition Manifest.cpp:304
std::optional< std::string > getDomain(PublicKey const &pk) const
Returns domain claimed by a given public key.
Definition Manifest.cpp:328
void inject_error(error_code_i code, JsonValue &json)
Add or update the json update to reflect the error code.
Definition ErrorCodes.h:214
Json::Value missing_field_error(std::string const &name)
Definition ErrorCodes.h:264
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition algorithm.h:6
std::string toBase58(AccountID const &v)
Convert AccountID to base58 checked string.
Definition AccountID.cpp:95
@ rpcINVALID_PARAMS
Definition ErrorCodes.h:65
Json::Value doManifest(RPC::JsonContext &context)
std::string base64_encode(std::uint8_t const *data, std::size_t len)
@ manifest
Manifest.
Application & app
Definition Context.h:22