From 1d671a23804ffb4934dd7080a75adbbe28b1d81c Mon Sep 17 00:00:00 2001 From: Vincenzo Palazzo Date: Tue, 24 May 2022 10:17:27 +0200 Subject: [PATCH] rpc: checkmessage return an error if pubkey is not found Returning an warning message when the pub key is not specified and there is no node in the graph. We try to help people that use core lightning as a signer and nothings else. Changelog-Deprecated: rpc: checkmessage return an error when the pubkey is not specified and it is unknown in the network graph. --- common/jsonrpc_errors.h | 3 +++ doc/lightning-checkmessage.7.md | 4 ++++ lightningd/signmessage.c | 7 +++++++ tests/test_misc.py | 18 +++++++++++++++++- 4 files changed, 31 insertions(+), 1 deletion(-) diff --git a/common/jsonrpc_errors.h b/common/jsonrpc_errors.h index d52229582..ebf45c4eb 100644 --- a/common/jsonrpc_errors.h +++ b/common/jsonrpc_errors.h @@ -100,6 +100,9 @@ static const errcode_t DATASTORE_UPDATE_WRONG_GENERATION = 1204; static const errcode_t DATASTORE_UPDATE_HAS_CHILDREN = 1205; static const errcode_t DATASTORE_UPDATE_NO_CHILDREN = 1206; +/* Errors from signmessage command */ +static const errcode_t SIGNMESSAGE_PUBKEY_NOT_FOUND = 1301; + /* Errors from wait* commands */ static const errcode_t WAIT_TIMEOUT = 2000; diff --git a/doc/lightning-checkmessage.7.md b/doc/lightning-checkmessage.7.md index 010caba3d..3980f8c51 100644 --- a/doc/lightning-checkmessage.7.md +++ b/doc/lightning-checkmessage.7.md @@ -20,6 +20,10 @@ known node key (as per *listnodes*), and verification succeeds if it matches for any one of them. Note: this is implemented far more efficiently than trying each one, so performance is not a concern. +On failure, an error is returned and core lightning exit with the following error code: +- -32602: Parameter missed or malformed; +- 1301: *pubkey* not found in the graph. + RETURN VALUE ------------ diff --git a/lightningd/signmessage.c b/lightningd/signmessage.c index 1e0195a1d..81b584543 100644 --- a/lightningd/signmessage.c +++ b/lightningd/signmessage.c @@ -1,5 +1,6 @@ #include "config.h" #include +#include #include #include #include @@ -133,6 +134,12 @@ static void listnodes_done(const char *buffer, if (t) t = json_get_member(buffer, t, "nodes"); + if (!deprecated_apis && (!t || t->size == 0)) { + was_pending(command_fail(can->cmd, SIGNMESSAGE_PUBKEY_NOT_FOUND, + "pub key not found in the graph, expected pubkey is %s", + node_id_to_hexstr(tmpctx, &can->id))); + return; + } response = json_stream_success(can->cmd); json_add_node_id(response, "pubkey", &can->id); json_add_bool(response, "verified", t && t->size == 1); diff --git a/tests/test_misc.py b/tests/test_misc.py index b1946f1f8..059eacdce 100644 --- a/tests/test_misc.py +++ b/tests/test_misc.py @@ -1850,7 +1850,8 @@ def test_relative_config_dir(node_factory): def test_signmessage(node_factory): - l1, l2 = node_factory.line_graph(2, wait_for_announce=True) + l1, l2 = node_factory.line_graph(2, wait_for_announce=True, + opts={'allow-deprecated-apis': True}) corpus = [[None, "this is a test!", @@ -2712,3 +2713,18 @@ def test_torv2_in_db(node_factory): l1.stop() l1.db_manip("UPDATE peers SET address='3fyb44wdhnd2ghhl.onion:1234';") l1.start() + + +def test_checkmessage_pubkey_not_found(node_factory): + l1 = node_factory.get_node() + + msg = "testcase to check new rpc error" + pubkey = "03be3b0e9992153b1d5a6e1623670b6c3663f72ce6cf2e0dd39c0a373a7de5a3b7" + zbase = "d66bqz3qsku5fxtqsi37j11pci47ydxa95iusphutggz9ezaxt56neh77kxe5hyr41kwgkncgiu94p9ecxiexgpgsz8daoq4tw8kj8yx" + + with pytest.raises(RpcError, match="not found in the graph, expected pubkey is {}".format(pubkey)): + l1.rpc.checkmessage(msg, zbase) + + check_result = l1.rpc.checkmessage(msg, zbase, pubkey=pubkey) + assert check_result["pubkey"] == pubkey + assert check_result["verified"] is True \ No newline at end of file