Skip to content

Commit fdb0867

Browse files
committed
refactored type detection for query
1 parent c94f86d commit fdb0867

File tree

1 file changed

+30
-27
lines changed

1 file changed

+30
-27
lines changed

internals/proxy/proxy.go

Lines changed: 30 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -26,35 +26,28 @@ const (
2626
None AuthType = "None"
2727
)
2828

29-
func parseTypedQuery(q url.Values) map[string]interface{} {
30-
result := make(map[string]interface{})
29+
func parseTypedQuery(key string, values []string) interface{} {
30+
var result interface{}
3131

32-
for key, values := range q {
33-
if !strings.HasPrefix(key, "@") {
34-
continue
35-
}
36-
37-
cleanKey := strings.TrimPrefix(key, "@")
38-
raw := values[0]
32+
raw := values[0]
3933

40-
intValue, err := strconv.Atoi(raw)
34+
intValue, err := strconv.Atoi(raw)
4135

42-
if strings.Contains(raw, ",") {
43-
parts := strings.Split(raw, ",")
44-
var list []interface{}
45-
for _, part := range parts {
46-
if intVal, err := strconv.Atoi(part); err == nil {
47-
list = append(list, intVal)
48-
} else {
49-
list = append(list, part)
50-
}
36+
if strings.Contains(raw, ",") {
37+
parts := strings.Split(raw, ",")
38+
var list []interface{}
39+
for _, part := range parts {
40+
if intVal, err := strconv.Atoi(part); err == nil {
41+
list = append(list, intVal)
42+
} else {
43+
list = append(list, part)
5144
}
52-
result[cleanKey] = list
53-
} else if err == nil {
54-
result[cleanKey] = intValue
55-
} else {
56-
result[cleanKey] = raw
5745
}
46+
result = list
47+
} else if err == nil {
48+
result = intValue
49+
} else {
50+
result = raw
5851
}
5952

6053
return result
@@ -204,9 +197,19 @@ func TemplatingMiddleware(next http.Handler, VARIABLES map[string]string) http.H
204197
query, _ := renderTemplate("query", req.URL.RawQuery, VARIABLES)
205198

206199
modifiedQuery := req.URL.Query()
207-
208-
modifiedBodyData = parseTypedQuery(modifiedQuery)
209-
200+
201+
queryData, _ := url.ParseQuery(query)
202+
203+
for key, value := range queryData {
204+
keyWithoutPrefix, found := strings.CutPrefix(key, "@")
205+
206+
if found {
207+
modifiedBodyData[keyWithoutPrefix] = parseTypedQuery(key, value)
208+
209+
modifiedQuery.Del(key)
210+
}
211+
}
212+
210213
req.URL.RawQuery = modifiedQuery.Encode()
211214

212215
modifiedBodyBytes, err = json.Marshal(modifiedBodyData)

0 commit comments

Comments
 (0)