Branch data Line data Source code
1 : : // Copyright (c) 2018-2022 The Bitcoin Core developers
2 : : // Distributed under the MIT software license, see the accompanying
3 : : // file COPYING or http://www.opensource.org/licenses/mit-license.php.
4 : :
5 : : #include <bitcoin-build-config.h> // IWYU pragma: keep
6 : :
7 : : #include <common/args.h>
8 : : #include <common/system.h>
9 : : #include <external_signer.h>
10 : : #include <rpc/protocol.h>
11 : : #include <rpc/server.h>
12 : : #include <rpc/util.h>
13 : : #include <util/strencodings.h>
14 : :
15 : : #include <string>
16 : : #include <vector>
17 : :
18 : : #ifdef ENABLE_EXTERNAL_SIGNER
19 : :
20 : 80 : static RPCHelpMan enumeratesigners()
21 : : {
22 : 80 : return RPCHelpMan{"enumeratesigners",
23 : : "Returns a list of external signers from -signer.",
24 : : {},
25 : 0 : RPCResult{
26 : : RPCResult::Type::OBJ, "", "",
27 : : {
28 : : {RPCResult::Type::ARR, "signers", /*optional=*/false, "",
29 : : {
30 : : {RPCResult::Type::OBJ, "", "",
31 : : {
32 : : {RPCResult::Type::STR_HEX, "fingerprint", "Master key fingerprint"},
33 : : {RPCResult::Type::STR, "name", "Device name"},
34 : : }},
35 : : },
36 : : }
37 : : }
38 [ + - + - : 640 : },
+ - + - +
- + - + -
+ - + - +
- + - + -
+ - + - +
- + - + +
+ + + + -
- - - -
- ]
39 : 80 : RPCExamples{
40 [ + - + - : 160 : HelpExampleCli("enumeratesigners", "")
+ - ]
41 [ + - + - : 320 : + HelpExampleRpc("enumeratesigners", "")
+ - + - ]
42 [ + - ]: 80 : },
43 : 0 : [&](const RPCHelpMan& self, const JSONRPCRequest& request) -> UniValue
44 : : {
45 [ # # # # ]: 0 : const std::string command = gArgs.GetArg("-signer", "");
46 [ # # # # : 0 : if (command == "") throw JSONRPCError(RPC_MISC_ERROR, "Error: restart bitcoind with -signer=<cmd>");
# # ]
47 [ # # ]: 0 : const std::string chain = gArgs.GetChainTypeString();
48 : 0 : UniValue signers_res = UniValue::VARR;
49 : 0 : try {
50 : 0 : std::vector<ExternalSigner> signers;
51 [ # # # # ]: 0 : ExternalSigner::Enumerate(command, signers, chain);
52 [ # # ]: 0 : for (const ExternalSigner& signer : signers) {
53 : 0 : UniValue signer_res = UniValue::VOBJ;
54 [ # # # # : 0 : signer_res.pushKV("fingerprint", signer.m_fingerprint);
# # ]
55 [ # # # # : 0 : signer_res.pushKV("name", signer.m_name);
# # ]
56 [ # # ]: 0 : signers_res.push_back(std::move(signer_res));
57 : 0 : }
58 [ # # ]: 0 : } catch (const std::exception& e) {
59 [ - - - - ]: 0 : throw JSONRPCError(RPC_MISC_ERROR, e.what());
60 : 0 : }
61 : 0 : UniValue result(UniValue::VOBJ);
62 [ # # # # ]: 0 : result.pushKV("signers", std::move(signers_res));
63 : 0 : return result;
64 : 0 : }
65 [ + - + - : 480 : };
+ - + - ]
66 [ + - + - : 400 : }
+ - + - +
- - - ]
67 : :
68 : 165 : void RegisterSignerRPCCommands(CRPCTable& t)
69 : : {
70 : 165 : static const CRPCCommand commands[]{
71 : : {"signer", &enumeratesigners},
72 [ + + + - : 165 : };
+ - + - ]
73 [ + + ]: 330 : for (const auto& c : commands) {
74 : 165 : t.appendCommand(c.name, &c);
75 : : }
76 : 165 : }
77 : :
78 : : #endif // ENABLE_EXTERNAL_SIGNER
|