github.com/nspcc-dev/neo-go@v0.105.2-0.20240517133400-6be757af3eba/pkg/services/oracle/filter.go (about) 1 package oracle 2 3 import ( 4 "bytes" 5 "errors" 6 "unicode/utf8" 7 8 json "github.com/nspcc-dev/go-ordered-json" 9 "github.com/nspcc-dev/neo-go/pkg/core/state" 10 "github.com/nspcc-dev/neo-go/pkg/services/oracle/jsonpath" 11 ) 12 13 func filter(value []byte, path string) ([]byte, error) { 14 if !utf8.Valid(value) { 15 return nil, errors.New("not an UTF-8") 16 } 17 18 buf := bytes.NewBuffer(value) 19 d := json.NewDecoder(buf) 20 d.UseOrderedObject() 21 22 var v any 23 if err := d.Decode(&v); err != nil { 24 return nil, err 25 } 26 27 result, ok := jsonpath.Get(path, v) 28 if !ok { 29 return nil, errors.New("invalid filter") 30 } 31 return json.Marshal(result) 32 } 33 34 func filterRequest(result []byte, req *state.OracleRequest) ([]byte, error) { 35 if req.Filter != nil { 36 return filter(result, *req.Filter) 37 } 38 return result, nil 39 }