diff options
Diffstat (limited to 'rpc/args.go')
-rw-r--r-- | rpc/args.go | 78 |
1 files changed, 72 insertions, 6 deletions
diff --git a/rpc/args.go b/rpc/args.go index 504e67c07..06dab99bc 100644 --- a/rpc/args.go +++ b/rpc/args.go @@ -497,24 +497,39 @@ func (args *BlockFilterArgs) UnmarshalJSON(b []byte) (err error) { type DbArgs struct { Database string Key string - Value string + Value []byte } func (args *DbArgs) UnmarshalJSON(b []byte) (err error) { var obj []interface{} - r := bytes.NewReader(b) - if err := json.NewDecoder(r).Decode(&obj); err != nil { + if err := json.Unmarshal(b, &obj); err != nil { return NewDecodeParamError(err.Error()) } if len(obj) < 2 { return NewInsufficientParamsError(len(obj), 2) } - args.Database = obj[0].(string) - args.Key = obj[1].(string) + + var objstr string + var ok bool + + if objstr, ok = obj[0].(string); !ok { + return NewDecodeParamError("Database is not a string") + } + args.Database = objstr + + if objstr, ok = obj[1].(string); !ok { + return NewDecodeParamError("Key is not a string") + } + args.Key = objstr if len(obj) > 2 { - args.Value = obj[2].(string) + objstr, ok = obj[2].(string) + if !ok { + return NewDecodeParamError("Value is not a string") + } + + args.Value = []byte(objstr) } return nil @@ -530,6 +545,57 @@ func (a *DbArgs) requirements() error { return nil } +type DbHexArgs struct { + Database string + Key string + Value []byte +} + +func (args *DbHexArgs) UnmarshalJSON(b []byte) (err error) { + var obj []interface{} + if err := json.Unmarshal(b, &obj); err != nil { + return NewDecodeParamError(err.Error()) + } + + if len(obj) < 2 { + return NewInsufficientParamsError(len(obj), 2) + } + + var objstr string + var ok bool + + if objstr, ok = obj[0].(string); !ok { + return NewDecodeParamError("Database is not a string") + } + args.Database = objstr + + if objstr, ok = obj[1].(string); !ok { + return NewDecodeParamError("Key is not a string") + } + args.Key = objstr + + if len(obj) > 2 { + objstr, ok = obj[2].(string) + if !ok { + return NewDecodeParamError("Value is not a string") + } + + args.Value = common.FromHex(objstr) + } + + return nil +} + +func (a *DbHexArgs) requirements() error { + if len(a.Database) == 0 { + return NewValidationError("Database", "cannot be blank") + } + if len(a.Key) == 0 { + return NewValidationError("Key", "cannot be blank") + } + return nil +} + type WhisperMessageArgs struct { Payload string To string |