fix(headers): sort combined parameters before processing

This commit is contained in:
Hein
2026-05-27 11:28:22 +02:00
parent 3d2251317a
commit e9f7726e43
+14 -1
View File
@@ -7,6 +7,7 @@ import (
"reflect" "reflect"
"regexp" "regexp"
"strconv" "strconv"
"sort"
"strings" "strings"
"github.com/bitechdev/ResolveSpec/pkg/common" "github.com/bitechdev/ResolveSpec/pkg/common"
@@ -140,9 +141,21 @@ func (h *Handler) parseOptionsFromHeaders(r common.Request, model interface{}) E
combinedParams[strings.ToLower(key)] = value combinedParams[strings.ToLower(key)] = value
} }
sortedKeys := make([]string, 0, len(combinedParams))
for key := range combinedParams {
sortedKeys = append(sortedKeys, key)
}
sort.Slice(sortedKeys, func(i, j int) bool {
if sortedKeys[i] != sortedKeys[j] {
return sortedKeys[i] < sortedKeys[j]
}
return combinedParams[sortedKeys[i]] < combinedParams[sortedKeys[j]]
})
// Process each parameter (from both headers and query params) // Process each parameter (from both headers and query params)
// Note: keys are already normalized to lowercase in combinedParams // Note: keys are already normalized to lowercase in combinedParams
for key, value := range combinedParams { for _, key := range sortedKeys {
value := combinedParams[key]
// Decode value if it's base64 encoded // Decode value if it's base64 encoded
decodedValue := decodeHeaderValue(value) decodedValue := decodeHeaderValue(value)