Skip to content

Commit a81c035

Browse files
committed
implemented parseRawQuery()
created custom query parser to avoid decoding
1 parent 954bd3a commit a81c035

File tree

1 file changed

+21
-17
lines changed

1 file changed

+21
-17
lines changed

internals/proxy/proxy.go

Lines changed: 21 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -26,32 +26,36 @@ const (
2626
None AuthType = "None"
2727
)
2828

29-
func tryParseInt(str string) (int, bool) {
30-
isInt, err := regexp.MatchString(`^\d+$`, str)
29+
func parseRawQuery(raw string) map[string][]string {
30+
result := make(map[string][]string)
31+
pairs := strings.Split(raw, "&")
3132

32-
if err != nil {
33-
log.Error("Encountered Error while Parsing Int", err.Error())
34-
}
33+
for _, pair := range pairs {
34+
if pair == "" {
35+
continue
36+
}
3537

36-
if isInt && err == nil {
37-
log.Debug("Parsed Int from ", str)
38+
parts := strings.SplitN(pair, "=", 2)
3839

39-
intValue, err := strconv.Atoi(str)
40+
key := parts[0]
41+
val := ""
4042

41-
if err == nil {
42-
return intValue, true
43+
if len(parts) == 2 {
44+
val = parts[1]
4345
}
46+
47+
result[key] = append(result[key], val)
4448
}
4549

46-
return 0, false
50+
return result
4751
}
4852

4953
func parseTypedQuery(values []string) interface{} {
5054
var result interface{}
5155

5256
raw := values[0]
5357

54-
intValue, isInt := tryParseInt(raw)
58+
intValue, err := strconv.Atoi(raw)
5559

5660
if strings.Contains(raw, ",") || (strings.Contains(raw, "[") && strings.Contains(raw, "]")) {
5761
if strings.Contains(raw, "[") && strings.Contains(raw, "]") {
@@ -65,16 +69,16 @@ func parseTypedQuery(values []string) interface{} {
6569
var list []interface{}
6670

6771
for _, part := range parts {
68-
_intValue, _isInt := tryParseInt(part)
72+
intVal, err := strconv.Atoi(part)
6973

70-
if _isInt {
71-
list = append(list, _intValue)
74+
if err == nil {
75+
list = append(list, intVal)
7276
} else {
7377
list = append(list, part)
7478
}
7579
}
7680
result = list
77-
} else if isInt {
81+
} else if err == nil {
7882
result = intValue
7983
} else {
8084
result = raw
@@ -272,7 +276,7 @@ func TemplatingMiddleware(next http.Handler, VARIABLES map[string]interface{}) h
272276

273277
modifiedQuery := req.URL.Query()
274278

275-
queryData, _ := url.ParseQuery(query)
279+
queryData := parseRawQuery(query)
276280

277281
for key, value := range queryData {
278282
keyWithoutPrefix, found := strings.CutPrefix(key, "@")

0 commit comments

Comments
 (0)