Skip to content

Commit

Permalink
Added deprecated phase to rpc framework rules changes.
Browse files Browse the repository at this point in the history
Signed-off-by: Vincenzo Palazzo <vincenzopalazzodev@gmail.com>

Changelog-Deprecated: RPC framwork now require the "jsonrpc" propriety inside the request.
Changelog-Fixed: RPC framwork now required the "jsonrpc" propriety to be specified inside each request.
  • Loading branch information
vincenzopalazzo committed Aug 27, 2021
1 parent 087421e commit fe294dc
Showing 1 changed file with 19 additions and 10 deletions.
29 changes: 19 additions & 10 deletions lightningd/jsonrpc.c
Original file line number Diff line number Diff line change
Expand Up @@ -700,7 +700,7 @@ static void replace_command(struct rpc_command_hook_payload *p,
const char *buffer,
const jsmntok_t *replacetok)
{
const jsmntok_t *method = NULL, *params = NULL, *jsonrpc = NULL;
const jsmntok_t *method = NULL, *params = NULL;
const char *bad;

/* Must contain "method", "params" and "id" */
Expand Down Expand Up @@ -732,10 +732,14 @@ static void replace_command(struct rpc_command_hook_payload *p,
goto fail;
}

jsonrpc = json_get_member(buffer, replacetok, "jsonrpc");
if (!jsonrpc || jsonrpc->type != JSMN_STRING || !json_tok_streq(buffer, jsonrpc, "2.0")) {
bad = "jsonrpc: \"2.0\" must be specified in the request";
goto fail;
// deprecated phase to give the possibility to all to migrate and stay safe
// from this more restrictive change.
if (!deprecated_apis) {
const jsmntok_t *jsonrpc = json_get_member(buffer, replacetok, "jsonrpc");
if (!jsonrpc || jsonrpc->type != JSMN_STRING || !json_tok_streq(buffer, jsonrpc, "2.0")) {
bad = "jsonrpc: \"2.0\" must be specified in the request";
goto fail;
}
}

was_pending(command_exec(p->cmd->jcon, p->cmd, buffer, replacetok,
Expand Down Expand Up @@ -870,7 +874,7 @@ REGISTER_PLUGIN_HOOK(rpc_command,
static struct command_result *
parse_request(struct json_connection *jcon, const jsmntok_t tok[])
{
const jsmntok_t *method, *id, *params, *jsonrpc;
const jsmntok_t *method, *id, *params;
struct command *c;
struct rpc_command_hook_payload *rpc_hook;
bool completed;
Expand All @@ -884,7 +888,6 @@ parse_request(struct json_connection *jcon, const jsmntok_t tok[])
method = json_get_member(jcon->buffer, tok, "method");
params = json_get_member(jcon->buffer, tok, "params");
id = json_get_member(jcon->buffer, tok, "id");
jsonrpc = json_get_member(jcon->buffer, tok, "jsonrpc");

if (!id) {
json_command_malformed(jcon, "null", "No id");
Expand All @@ -897,9 +900,15 @@ parse_request(struct json_connection *jcon, const jsmntok_t tok[])
return NULL;
}

if (!jsonrpc || jsonrpc->type != JSMN_STRING || !json_tok_streq(jcon->buffer, jsonrpc, "2.0")) {
json_command_malformed(jcon, "null", "jsonrpc: \"2.0\" must be specified in the request");
return NULL;
// Adding a deprecated phase to make sure that all the c-lightning wrapper
// can migrate all the frameworks
if (!deprecated_apis) {
const jsmntok_t *jsonrpc = json_get_member(jcon->buffer, tok, "jsonrpc");

if (!jsonrpc || jsonrpc->type != JSMN_STRING || !json_tok_streq(jcon->buffer, jsonrpc, "2.0")) {
json_command_malformed(jcon, "null", "jsonrpc: \"2.0\" must be specified in the request");
return NULL;
}
}

/* Allocate the command off of the `jsonrpc` object and not
Expand Down

0 comments on commit fe294dc

Please sign in to comment.