Skip to content

Commit

Permalink
fix jsonPathGetFirst
Browse files Browse the repository at this point in the history
  • Loading branch information
IngoRoessner committed Mar 19, 2024
1 parent 39b3044 commit f9aaf9e
Show file tree
Hide file tree
Showing 4 changed files with 38 additions and 4 deletions.
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ go 1.22

require (
github.com/PaesslerAG/jsonpath v0.1.1
github.com/golang-jwt/jwt v3.2.2+incompatible
github.com/golang-jwt/jwt v3.2.2+incompatible // indirect
github.com/google/uuid v1.6.0
github.com/julienschmidt/httprouter v1.3.0
github.com/segmentio/kafka-go v0.4.47
Expand Down
21 changes: 21 additions & 0 deletions lib/query/modifier/encoding_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -53,3 +53,24 @@ func TestEncodingOrderPreserved(t *testing.T) {
t.Error(result)
}
}

func TestJsonPathGetFirst(t *testing.T) {
result, err := jsonPathGetFirst(map[string]interface{}{"features": map[string]interface{}{"service_groups": []interface{}{map[string]interface{}{"key": "c3b8fc33-1899-4595-a6fc-eb85ff24a0de", "name": "Total"}}}},
"$.features.service_groups[?@.key==\"c3b8fc33-1899-4595-a6fc-eb85ff24a0de\"].name")
if err != nil {
t.Error(err)
return
}
if result != "Total" {
t.Error(result)
}
result, err = jsonPathGetFirst(map[string]interface{}{"features": map[string]interface{}{"service_groups": []map[string]interface{}{{"key": "c3b8fc33-1899-4595-a6fc-eb85ff24a0de", "name": "Total"}}}},
"$.features.service_groups[?@.key==\"c3b8fc33-1899-4595-a6fc-eb85ff24a0de\"].name")
if err != nil {
t.Error(err)
return
}
if result != "Total" {
t.Error(result)
}
}
15 changes: 14 additions & 1 deletion lib/query/modifier/helper.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ package modifier

import (
"bytes"
"encoding/json"
"github.com/SENERGY-Platform/permission-search/lib/jsonpath"
"text/template"
)
Expand All @@ -37,7 +38,7 @@ func useTemplate(name string, tmpl string, placeholders interface{}) (result str
}

func jsonPathGetFirst(v interface{}, path string) (value interface{}, err error) {
value, err = jsonpath.UseJsonPathWithScriptOnObj(v, path)
value, err = jsonpath.UseJsonPathWithScriptOnObj(normalize(v), path)
if err != nil {
return value, err
}
Expand All @@ -50,3 +51,15 @@ func jsonPathGetFirst(v interface{}, path string) (value interface{}, err error)
}
return
}

func normalize(v interface{}) (result interface{}) {
temp, err := json.Marshal(v)
if err != nil {
return v
}
err = json.Unmarshal(temp, &result)
if err != nil {
return v
}
return result
}
4 changes: 2 additions & 2 deletions lib/query/modifier/reference.go
Original file line number Diff line number Diff line change
Expand Up @@ -47,12 +47,12 @@ func (this *Modifier) loadReferences(references map[string]configuration.Modifie
}
value, err := jsonPathGetFirst(resourceElement, reference.Path)
if err != nil {
log.Println("WARNING: loadReferences() path error", "\n\t", reference.Path, "\n\t", resourceElement, "\n\t", err)
log.Printf("WARNING: loadReferences() path error path=%v \n\tresource=%#v\n\terr=%v\n", reference.Path, resourceElement, err)
result[name] = reference.Default
continue
}
if value != nil {
log.Println("WARNING: loadReferences() path not found", "\n\t", reference.Path, "\n\t", resourceElement)
log.Printf("WARNING: loadReferences() path not found path=%v \n\tresource=%#v\n", reference.Path, resourceElement)
result[name] = value
} else {
result[name] = reference.Default
Expand Down

0 comments on commit f9aaf9e

Please sign in to comment.