mirror of
				https://github.com/steveiliop56/tinyauth.git
				synced 2025-10-28 04:35:40 +00:00 
			
		
		
		
	 f0d2da281a
			
		
	
	f0d2da281a
	
	
	
		
			
			* feat: add header decoder * feat: allow for dash substitute over slash for environments like kubernetes * feat: use decoded headers in proxy controller * refactor: simplify decode header to node function * refactor: use stdlib prefix check in header decoder * fix: lowercase key and filter before comparing
		
			
				
	
	
		
			45 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			45 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package utils
 | |
| 
 | |
| import (
 | |
| 	"net/http"
 | |
| 	"strings"
 | |
| )
 | |
| 
 | |
| func ParseHeaders(headers []string) map[string]string {
 | |
| 	headerMap := make(map[string]string)
 | |
| 	for _, header := range headers {
 | |
| 		split := strings.SplitN(header, "=", 2)
 | |
| 		if len(split) != 2 || strings.TrimSpace(split[0]) == "" || strings.TrimSpace(split[1]) == "" {
 | |
| 			continue
 | |
| 		}
 | |
| 		key := SanitizeHeader(strings.TrimSpace(split[0]))
 | |
| 		if strings.ContainsAny(key, " \t") {
 | |
| 			continue
 | |
| 		}
 | |
| 		key = http.CanonicalHeaderKey(key)
 | |
| 		value := SanitizeHeader(strings.TrimSpace(split[1]))
 | |
| 		headerMap[key] = value
 | |
| 	}
 | |
| 	return headerMap
 | |
| }
 | |
| 
 | |
| func SanitizeHeader(header string) string {
 | |
| 	return strings.Map(func(r rune) rune {
 | |
| 		// Allow only printable ASCII characters (32-126) and safe whitespace (space, tab)
 | |
| 		if r == ' ' || r == '\t' || (r >= 32 && r <= 126) {
 | |
| 			return r
 | |
| 		}
 | |
| 		return -1
 | |
| 	}, header)
 | |
| }
 | |
| 
 | |
| func NormalizeHeaders(headers http.Header) map[string]string {
 | |
| 	var result = make(map[string]string)
 | |
| 
 | |
| 	for key, values := range headers {
 | |
| 		result[key] = strings.Join(values, ",")
 | |
| 	}
 | |
| 
 | |
| 	return result
 | |
| }
 |