fix proxy service http middleware

This commit is contained in:
Joe Kralicky 2025-01-10 00:13:57 +00:00
parent 61e56b6e42
commit 1a4ff1c8a4
No known key found for this signature in database
GPG key ID: 75C4875F34A9FB79
7 changed files with 8 additions and 14 deletions

View file

@ -14,6 +14,7 @@ import (
"github.com/google/uuid" "github.com/google/uuid"
"github.com/gorilla/mux" "github.com/gorilla/mux"
"github.com/rs/cors" "github.com/rs/cors"
"go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp"
"github.com/pomerium/csrf" "github.com/pomerium/csrf"
"github.com/pomerium/pomerium/internal/authenticateflow" "github.com/pomerium/pomerium/internal/authenticateflow"
@ -59,6 +60,7 @@ func (a *Authenticate) Mount(r *mux.Router) {
} }
return csrf.Protect(state.cookieSecret, csrfOptions...)(h) return csrf.Protect(state.cookieSecret, csrfOptions...)(h)
}) })
r.Use(trace.NewHTTPMiddleware(otelhttp.WithTracerProvider(a.tracerProvider)))
// redirect / to /.pomerium/ // redirect / to /.pomerium/
r.Path("/").Handler(http.RedirectHandler("/.pomerium/", http.StatusFound)) r.Path("/").Handler(http.RedirectHandler("/.pomerium/", http.StatusFound))

View file

@ -10,14 +10,12 @@ import (
"github.com/CAFxX/httpcompression" "github.com/CAFxX/httpcompression"
"github.com/gorilla/mux" "github.com/gorilla/mux"
"github.com/rs/zerolog" "github.com/rs/zerolog"
"go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp"
"github.com/pomerium/pomerium/config" "github.com/pomerium/pomerium/config"
"github.com/pomerium/pomerium/internal/handlers" "github.com/pomerium/pomerium/internal/handlers"
"github.com/pomerium/pomerium/internal/log" "github.com/pomerium/pomerium/internal/log"
"github.com/pomerium/pomerium/internal/middleware" "github.com/pomerium/pomerium/internal/middleware"
"github.com/pomerium/pomerium/internal/telemetry" "github.com/pomerium/pomerium/internal/telemetry"
"github.com/pomerium/pomerium/internal/telemetry/trace"
"github.com/pomerium/pomerium/internal/urlutil" "github.com/pomerium/pomerium/internal/urlutil"
hpke_handlers "github.com/pomerium/pomerium/pkg/hpke/handlers" hpke_handlers "github.com/pomerium/pomerium/pkg/hpke/handlers"
"github.com/pomerium/pomerium/pkg/telemetry/requestid" "github.com/pomerium/pomerium/pkg/telemetry/requestid"
@ -52,7 +50,6 @@ func (srv *Server) addHTTPMiddleware(ctx context.Context, root *mux.Router, _ *c
root.Use(telemetry.HTTPStatsHandler(func() string { root.Use(telemetry.HTTPStatsHandler(func() string {
return srv.currentConfig.Load().Options.InstallationID return srv.currentConfig.Load().Options.InstallationID
}, srv.name)) }, srv.name))
root.Use(trace.NewHTTPMiddleware(otelhttp.WithTracerProvider(srv.tracerProvider)))
} }
func (srv *Server) mountCommonEndpoints(root *mux.Router, cfg *config.Config) error { func (srv *Server) mountCommonEndpoints(root *mux.Router, cfg *config.Config) error {

View file

@ -6,7 +6,6 @@ import (
"net/http" "net/http"
"github.com/pomerium/pomerium/internal/httputil" "github.com/pomerium/pomerium/internal/httputil"
"github.com/pomerium/pomerium/internal/telemetry/trace"
"github.com/pomerium/pomerium/internal/urlutil" "github.com/pomerium/pomerium/internal/urlutil"
) )
@ -14,12 +13,10 @@ import (
func SetHeaders(headers map[string]string) func(next http.Handler) http.Handler { func SetHeaders(headers map[string]string) func(next http.Handler) http.Handler {
return func(next http.Handler) http.Handler { return func(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
ctx, span := trace.Continue(r.Context(), "middleware.SetHeaders")
defer span.End()
for key, val := range headers { for key, val := range headers {
w.Header().Set(key, val) w.Header().Set(key, val)
} }
next.ServeHTTP(w, r.WithContext(ctx)) next.ServeHTTP(w, r)
}) })
} }
} }
@ -29,12 +26,10 @@ func SetHeaders(headers map[string]string) func(next http.Handler) http.Handler
func ValidateSignature(sharedKey []byte) func(next http.Handler) http.Handler { func ValidateSignature(sharedKey []byte) func(next http.Handler) http.Handler {
return func(next http.Handler) http.Handler { return func(next http.Handler) http.Handler {
return httputil.HandlerFunc(func(w http.ResponseWriter, r *http.Request) error { return httputil.HandlerFunc(func(w http.ResponseWriter, r *http.Request) error {
ctx, span := trace.Continue(r.Context(), "middleware.ValidateSignature")
defer span.End()
if err := ValidateRequestURL(r, sharedKey); err != nil { if err := ValidateRequestURL(r, sharedKey); err != nil {
return httputil.NewError(http.StatusBadRequest, err) return httputil.NewError(http.StatusBadRequest, err)
} }
next.ServeHTTP(w, r.WithContext(ctx)) next.ServeHTTP(w, r)
return nil return nil
}) })
} }

View file

@ -54,6 +54,7 @@ var allServices = []string{
"Authenticate", "Authenticate",
"Control Plane", "Control Plane",
"Data Broker", "Data Broker",
"Proxy",
"Upstream", "Upstream",
"IDP", "IDP",
"HTTP Client", "HTTP Client",

View file

@ -15,7 +15,7 @@ import (
) )
var ( var (
envoyVersion = "1.32.2" envoyVersion = "1.32.3"
targets = []string{ targets = []string{
"darwin-amd64", "darwin-amd64",
"darwin-arm64", "darwin-arm64",

View file

@ -9,13 +9,11 @@ import (
"github.com/go-jose/go-jose/v3/jwt" "github.com/go-jose/go-jose/v3/jwt"
"github.com/gorilla/mux" "github.com/gorilla/mux"
"go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp"
"github.com/pomerium/pomerium/config" "github.com/pomerium/pomerium/config"
"github.com/pomerium/pomerium/internal/handlers" "github.com/pomerium/pomerium/internal/handlers"
"github.com/pomerium/pomerium/internal/httputil" "github.com/pomerium/pomerium/internal/httputil"
"github.com/pomerium/pomerium/internal/middleware" "github.com/pomerium/pomerium/internal/middleware"
"github.com/pomerium/pomerium/internal/telemetry/trace"
"github.com/pomerium/pomerium/internal/urlutil" "github.com/pomerium/pomerium/internal/urlutil"
) )
@ -23,7 +21,6 @@ import (
func (p *Proxy) registerDashboardHandlers(r *mux.Router, opts *config.Options) *mux.Router { func (p *Proxy) registerDashboardHandlers(r *mux.Router, opts *config.Options) *mux.Router {
h := httputil.DashboardSubrouter(r) h := httputil.DashboardSubrouter(r)
h.Use(middleware.SetHeaders(httputil.HeadersContentSecurityPolicy)) h.Use(middleware.SetHeaders(httputil.HeadersContentSecurityPolicy))
h.Use(trace.NewHTTPMiddleware(otelhttp.WithTracerProvider(p.tracerProvider)))
// special pomerium endpoints for users to view their session // special pomerium endpoints for users to view their session
h.Path("/").Handler(httputil.HandlerFunc(p.userInfo)).Methods(http.MethodGet) h.Path("/").Handler(httputil.HandlerFunc(p.userInfo)).Methods(http.MethodGet)

View file

@ -10,6 +10,7 @@ import (
"net/http" "net/http"
"github.com/gorilla/mux" "github.com/gorilla/mux"
"go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp"
oteltrace "go.opentelemetry.io/otel/trace" oteltrace "go.opentelemetry.io/otel/trace"
"github.com/pomerium/pomerium/config" "github.com/pomerium/pomerium/config"
@ -120,6 +121,7 @@ func (p *Proxy) setHandlers(ctx context.Context, opts *config.Options) error {
r.StrictSlash(true) r.StrictSlash(true)
// dashboard handlers are registered to all routes // dashboard handlers are registered to all routes
r = p.registerDashboardHandlers(r, opts) r = p.registerDashboardHandlers(r, opts)
r.Use(trace.NewHTTPMiddleware(otelhttp.WithTracerProvider(p.tracerProvider)))
p.currentRouter.Store(r) p.currentRouter.Store(r)
return nil return nil