mirror of
https://github.com/ditkrg/traefik-response-header-forward-plugin.git
synced 2026-01-22 21:46:38 +00:00
59 lines
1.2 KiB
Go
59 lines
1.2 KiB
Go
package traefik_response_header_forward_plugin
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"net/http"
|
|
)
|
|
|
|
type RequestHeader struct {
|
|
Name string `json:"name,omitempty"`
|
|
}
|
|
|
|
type Config struct {
|
|
RequestHeaders []RequestHeader `json:"requestHeaders,omitempty"`
|
|
}
|
|
|
|
func CreateConfig() *Config {
|
|
return &Config{
|
|
RequestHeaders: make([]RequestHeader, 0),
|
|
}
|
|
}
|
|
|
|
type ResponseHeaderForward struct {
|
|
next http.Handler
|
|
name string
|
|
requestHeaders []RequestHeader
|
|
}
|
|
|
|
func New(ctx context.Context, next http.Handler, config *Config, name string) (http.Handler, error) {
|
|
if len(config.RequestHeaders) == 0 {
|
|
return nil, fmt.Errorf("RequestHeaders cannot be empty")
|
|
|
|
}
|
|
|
|
for _, headerName := range config.RequestHeaders {
|
|
if headerName.Name == "" {
|
|
return nil, fmt.Errorf("RequestHeaders.Name cannot be empty")
|
|
}
|
|
}
|
|
return &ResponseHeaderForward{
|
|
next: next,
|
|
name: name,
|
|
requestHeaders: config.RequestHeaders,
|
|
}, nil
|
|
}
|
|
|
|
func (a *ResponseHeaderForward) ServeHTTP(rw http.ResponseWriter, req *http.Request) {
|
|
a.next.ServeHTTP(rw, req)
|
|
|
|
for _, requestHeader := range a.requestHeaders {
|
|
headerValue := req.Header.Get(requestHeader.Name)
|
|
if headerValue == "" {
|
|
continue
|
|
}
|
|
|
|
rw.Header().Set(requestHeader.Name, headerValue)
|
|
}
|
|
}
|