mirror of
				https://github.com/steveiliop56/tinyauth.git
				synced 2025-11-04 08:05:42 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			35 lines
		
	
	
		
			847 B
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			35 lines
		
	
	
		
			847 B
		
	
	
	
		
			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)
 | 
						|
}
 |