| 6 | ) |
| 7 | |
| 8 | func ParseHeaders(headers []string) map[string]string { |
| 9 | headerMap := make(map[string]string) |
| 10 | for _, header := range headers { |
| 11 | split := strings.SplitN(header, "=", 2) |
| 12 | if len(split) != 2 || strings.TrimSpace(split[0]) == "" || strings.TrimSpace(split[1]) == "" { |
| 13 | continue |
| 14 | } |
| 15 | key := SanitizeHeader(strings.TrimSpace(split[0])) |
| 16 | if strings.ContainsAny(key, " \t") { |
| 17 | continue |
| 18 | } |
| 19 | key = http.CanonicalHeaderKey(key) |
| 20 | value := SanitizeHeader(strings.TrimSpace(split[1])) |
| 21 | headerMap[key] = value |
| 22 | } |
| 23 | return headerMap |
| 24 | } |
| 25 | |
| 26 | func SanitizeHeader(header string) string { |
| 27 | return strings.Map(func(r rune) rune { |