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.
This commit is contained in:
Vincenzo Palazzo 2022-05-24 10:17:27 +02:00 committed by Christian Decker
parent 5abed486d0
commit 1d671a2380
4 changed files with 31 additions and 1 deletions

View File

@ -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;

View File

@ -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
------------

View File

@ -1,5 +1,6 @@
#include "config.h"
#include <common/bech32.h>
#include <common/configdir.h>
#include <common/json_command.h>
#include <common/json_param.h>
#include <errno.h>
@ -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);

View File

@ -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