| package common |
|
|
| import ( |
| "fmt" |
| "net/http" |
|
|
| "github.com/go-chi/chi/v5/middleware" |
| "github.com/google/wire" |
|
|
| "github.com/openmeterio/openmeter/app/config" |
| "github.com/openmeterio/openmeter/openmeter/server" |
| pkgserver "github.com/openmeterio/openmeter/pkg/server" |
| ) |
|
|
| var Server = wire.NewSet( |
| NewTelemetryRouterHook, |
| NewFFXConfigContextMiddleware, |
| NewRouterHooks, |
| NewPostAuthMiddlewares, |
| NewClientIPMiddleware, |
| ) |
|
|
| func NewRouterHooks( |
| telemetry TelemetryMiddlewareHook, |
| ) *server.RouterHooks { |
| return &server.RouterHooks{ |
| Middlewares: []server.MiddlewareHook{ |
| server.MiddlewareHook(telemetry), |
| }, |
| } |
| } |
|
|
| func NewPostAuthMiddlewares( |
| ffx FFXConfigContextMiddleware, |
| ) server.PostAuthMiddlewares { |
| return server.PostAuthMiddlewares{ |
| func(h http.Handler) http.Handler { |
| return ffx(h) |
| }, |
| } |
| } |
|
|
| |
| |
| type ClientIPMiddleware pkgserver.MiddlewareFunc |
|
|
| func NewClientIPMiddleware(cfg config.ClientIPMiddlewareConfig) (ClientIPMiddleware, error) { |
| if err := cfg.Validate(); err != nil { |
| return nil, fmt.Errorf("invalid client ip middleware config: %w", err) |
| } |
|
|
| switch cfg.Source { |
| case config.ClientIPSourceRemoteAddr: |
| return middleware.ClientIPFromRemoteAddr, nil |
| case config.ClientIPSourceHeader: |
| return middleware.ClientIPFromHeader(cfg.Header), nil |
| case config.ClientIPSourceXFF: |
| if len(cfg.TrustedIPPrefixes) > 0 { |
| return middleware.ClientIPFromXFF(cfg.TrustedIPPrefixes...), nil |
| } |
|
|
| return middleware.ClientIPFromXFFTrustedProxies(cfg.TrustedProxies), nil |
| default: |
| return nil, fmt.Errorf("invalid client ip middleware source: %s", cfg.Source) |
| } |
| } |
|
|