Browse Source

plugin: Unwrap the rpc_command payload

We were nesting like the following:

```json
{"params": {
  "rpc_command": {
    "rpc_command": {
    }
  }
}
```

This is really excessive, so we unwrap once, and now have the following:

```json
{"params": {
  "rpc_command": {
  }
}
```

Still more wrapping than necessary (the method is repeated in the `params`
object), but it's getting closer.

Changelog-Deprecated: JSON-RPC: Removed double wrapping of `rpc_command` payload in `rpc_command` JSON field.

Suggested-by: @fiatjaf
Signed-off-by: Christian Decker <@cdecker>
travis-debug
Christian Decker 5 years ago
committed by Rusty Russell
parent
commit
d2688bbaf5
  1. 16
      lightningd/jsonrpc.c
  2. 2
      tests/plugins/rpc_command.py

16
lightningd/jsonrpc.c

@ -611,8 +611,22 @@ struct rpc_command_hook_payload {
static void rpc_command_hook_serialize(struct rpc_command_hook_payload *p,
struct json_stream *s)
{
const jsmntok_t *tok;
size_t i;
char *key;
json_object_start(s, "rpc_command");
json_add_tok(s, "rpc_command", p->request, p->buffer);
#ifdef COMPAT_V081
if (deprecated_apis)
json_add_tok(s, "rpc_command", p->request, p->buffer);
#endif
json_for_each_obj(i, tok, p->request) {
key = tal_strndup(NULL, p->buffer + tok->start,
tok->end - tok->start);
json_add_tok(s, key, tok + 1, p->buffer);
tal_free(key);
}
json_object_end(s);
}

2
tests/plugins/rpc_command.py

@ -9,7 +9,7 @@ plugin = Plugin()
@plugin.hook("rpc_command")
def on_rpc_command(plugin, rpc_command, **kwargs):
request = rpc_command["rpc_command"]
request = rpc_command
if request["method"] == "invoice":
# Replace part of this command
request["params"]["description"] = "A plugin modified this description"

Loading…
Cancel
Save