openmeter / app /common /server.go
Leon4gr45's picture
Upload folder using huggingface_hub (part 4)
1f10f31 verified
Raw
History Blame Contribute Delete
1.74 kB
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)
},
}
}
// ClientIPMiddleware is a defined type (not an alias) so the wire graph does not
// provide the ubiquitous pkgserver.MiddlewareFunc type directly.
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)
}
}