Skip to content

Commit d4d3375

Browse files
committed
Fix paramater parsing for raw JSON-RPC endpoint
1 parent 11a5f0e commit d4d3375

File tree

2 files changed

+31
-23
lines changed

2 files changed

+31
-23
lines changed

blockchain/dynamic/request.go

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"fmt"
55
"strings"
66

7+
"dyn-https/models"
78
"dyn-https/util"
89
)
910

@@ -46,6 +47,30 @@ func NewRequest(cmd string) (*RPCRequest, error) {
4647
return &req, nil
4748
}
4849

50+
// GetNewRequest returns a new JSON-RPC 1.0 request object given the raw command.
51+
func GetNewRequest(jsonRPC models.JSONRPC) (*RPCRequest, error) {
52+
var req RPCRequest
53+
req.Method = jsonRPC.Method
54+
if len(jsonRPC.Params) > 0 {
55+
req.Params = make([]interface{}, len(jsonRPC.Params))
56+
}
57+
for i, param := range jsonRPC.Params {
58+
switch param.(type) {
59+
case int:
60+
req.Params[i] = param
61+
case float64:
62+
req.Params[i] = param
63+
case bool:
64+
req.Params[i] = param
65+
case string:
66+
req.Params[i] = param
67+
}
68+
}
69+
req.JSONRPC = "1.0"
70+
req.ID, _ = util.RandomHashString(9)
71+
return &req, nil
72+
}
73+
4974
func (req *RPCRequest) parseCmd(cmd string) error {
5075
// Split cmd string
5176
r := NewCmdReader(strings.NewReader(cmd))

https/rest/jsonrpc.go

Lines changed: 6 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -18,30 +18,13 @@ func (w *WebProxy) handleJSONRPC(c *gin.Context) {
1818
c.JSON(http.StatusBadRequest, gin.H{"error": err})
1919
return
2020
}
21-
strRequest := "dynamic-cli " + reqInput.Method
22-
for _, param := range reqInput.Params {
23-
switch param.(type) {
24-
case int:
25-
val, ok := param.(int)
26-
if ok {
27-
strRequest += ` ` + fmt.Sprintf("%v", val)
28-
}
29-
case float64:
30-
val, ok := param.(float64)
31-
if ok {
32-
strRequest += ` ` + fmt.Sprintf("%v", val)
33-
}
34-
case bool:
35-
val, ok := param.(bool)
36-
if ok {
37-
strRequest += ` ` + fmt.Sprintf("%v", val)
38-
}
39-
case string:
40-
strRequest += ` "` + fmt.Sprintf("%v", param) + `"`
41-
}
21+
req, err := dynamic.GetNewRequest(reqInput)
22+
if err != nil {
23+
strErrMsg := fmt.Sprintf("GetNewRequest error %v", err)
24+
c.JSON(http.StatusBadRequest, gin.H{"error": strErrMsg})
25+
return
4226
}
43-
reqOutput, _ := dynamic.NewRequest(strRequest)
44-
response, _ := <-w.dynamicd.ExecCmdRequest(reqOutput)
27+
response, _ := <-w.dynamicd.ExecCmdRequest(req)
4528
var result interface{}
4629
err = json.Unmarshal([]byte(response), &result)
4730
if err != nil {

0 commit comments

Comments
 (0)