Skip to content

Commit f57a5c2

Browse files
authored
Merge pull request #12 from CodeShellDev/dev
Update Main Branch
2 parents a115f1f + e68f117 commit f57a5c2

File tree

1 file changed

+58
-6
lines changed

1 file changed

+58
-6
lines changed

internals/proxy/proxy.go

Lines changed: 58 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,25 +26,77 @@ const (
2626
None AuthType = "None"
2727
)
2828

29+
func parseRawQuery(raw string) map[string][]string {
30+
result := make(map[string][]string)
31+
pairs := strings.SplitSeq(raw, "&")
32+
33+
for pair := range pairs {
34+
if pair == "" {
35+
continue
36+
}
37+
38+
parts := strings.SplitN(pair, "=", 2)
39+
40+
key := parts[0]
41+
val := ""
42+
43+
if len(parts) == 2 {
44+
val = parts[1]
45+
}
46+
47+
result[key] = append(result[key], val)
48+
}
49+
50+
return result
51+
}
52+
53+
func tryParseInt(str string) (int, bool) {
54+
isInt, err := regexp.MatchString(`^\d+$`, str)
55+
56+
if err != nil {
57+
log.Error("Encountered Error while Parsing Int", err.Error())
58+
}
59+
60+
if isInt && err == nil {
61+
intValue, err := strconv.Atoi(str)
62+
63+
if err == nil {
64+
return intValue, true
65+
}
66+
}
67+
68+
return 0, false
69+
}
70+
2971
func parseTypedQuery(values []string) interface{} {
3072
var result interface{}
3173

3274
raw := values[0]
3375

34-
intValue, err := strconv.Atoi(raw)
76+
intValue, isInt := tryParseInt(raw)
77+
78+
if strings.Contains(raw, ",") || (strings.Contains(raw, "[") && strings.Contains(raw, "]")) {
79+
if strings.Contains(raw, "[") && strings.Contains(raw, "]") {
80+
escapedStr := strings.ReplaceAll(raw, "[", "")
81+
escapedStr = strings.ReplaceAll(escapedStr, "]", "")
82+
raw = escapedStr
83+
}
3584

36-
if strings.Contains(raw, ",") {
3785
parts := strings.Split(raw, ",")
86+
3887
var list []interface{}
88+
3989
for _, part := range parts {
40-
if intVal, err := strconv.Atoi(part); err == nil {
41-
list = append(list, intVal)
90+
_intValue, _isInt := tryParseInt(part)
91+
92+
if _isInt {
93+
list = append(list, _intValue)
4294
} else {
4395
list = append(list, part)
4496
}
4597
}
4698
result = list
47-
} else if err == nil {
99+
} else if isInt {
48100
result = intValue
49101
} else {
50102
result = raw
@@ -242,7 +294,7 @@ func TemplatingMiddleware(next http.Handler, VARIABLES map[string]interface{}) h
242294

243295
modifiedQuery := req.URL.Query()
244296

245-
queryData, _ := url.ParseQuery(query)
297+
queryData := parseRawQuery(query)
246298

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

0 commit comments

Comments
 (0)