Spaces:
Paused
Paused
| package util | |
| import ( | |
| "net/http" | |
| "strings" | |
| ) | |
| // ApplyCustomHeadersFromAttrs applies user-defined headers stored in the provided attributes map. | |
| // Custom headers override built-in defaults when conflicts occur. | |
| func ApplyCustomHeadersFromAttrs(r *http.Request, attrs map[string]string) { | |
| if r == nil { | |
| return | |
| } | |
| applyCustomHeaders(r, extractCustomHeaders(attrs)) | |
| } | |
| func extractCustomHeaders(attrs map[string]string) map[string]string { | |
| if len(attrs) == 0 { | |
| return nil | |
| } | |
| headers := make(map[string]string) | |
| for k, v := range attrs { | |
| if !strings.HasPrefix(k, "header:") { | |
| continue | |
| } | |
| name := strings.TrimSpace(strings.TrimPrefix(k, "header:")) | |
| if name == "" { | |
| continue | |
| } | |
| val := strings.TrimSpace(v) | |
| if val == "" { | |
| continue | |
| } | |
| headers[name] = val | |
| } | |
| if len(headers) == 0 { | |
| return nil | |
| } | |
| return headers | |
| } | |
| func applyCustomHeaders(r *http.Request, headers map[string]string) { | |
| if r == nil || len(headers) == 0 { | |
| return | |
| } | |
| for k, v := range headers { | |
| if k == "" || v == "" { | |
| continue | |
| } | |
| r.Header.Set(k, v) | |
| } | |
| } | |