mirror of
https://github.com/ditkrg/traefik-response-header-forward-plugin.git
synced 2026-01-22 18:47:00 +00:00
init
This commit is contained in:
commit
64049b4b18
12
.traefik.yml
Normal file
12
.traefik.yml
Normal file
@ -0,0 +1,12 @@
|
||||
displayName: UsersBlocker
|
||||
|
||||
type: middleware
|
||||
|
||||
import: github.com/ditkrg/traefik-response-header-forward-plugin
|
||||
|
||||
summary: A middleware to add headers from request to response.
|
||||
|
||||
testData:
|
||||
requestHeaders:
|
||||
- userId1
|
||||
- userId2
|
||||
16
docker-compose.yaml
Normal file
16
docker-compose.yaml
Normal file
@ -0,0 +1,16 @@
|
||||
version: '3'
|
||||
|
||||
services:
|
||||
reverse-proxy:
|
||||
image: traefik:v3.0
|
||||
command:
|
||||
- --api.insecure=true
|
||||
- --providers.docker
|
||||
- "--experimental.localPlugins.responseHeaderForward.moduleName=github.com/ditkrg/traefik-response-header-forward-plugin"
|
||||
ports:
|
||||
- "9090:80"
|
||||
- "9091:8080"
|
||||
volumes:
|
||||
# So that Traefik can listen to the Docker events
|
||||
- /var/run/docker.sock:/var/run/docker.sock
|
||||
- ./:/plugins-local/src/github.com/ditkrg/traefik-response-header-forward-plugin
|
||||
3
go.mod
Normal file
3
go.mod
Normal file
@ -0,0 +1,3 @@
|
||||
module github.com/ditkrg/traefik-response-header-forward-plugin
|
||||
|
||||
go 1.21.3
|
||||
58
main.go
Normal file
58
main.go
Normal file
@ -0,0 +1,58 @@
|
||||
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)
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user