@@ -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
4953func 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