Ctrl K
ComunidadGuías…

internal/middleware/request_meta_middleware.go

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
package middleware

import (
	"net/http"
	"xprem/internal/auditlog"
	"xprem/internal/helpers"
)

// RequestMetaMiddleware stamps the client IP (proxy-aware, see
// helpers.ClientIP) and user agent on every request's context, where audit
// events emitted from any layer below pick them up without touching the
// request.
func RequestMetaMiddleware(next http.Handler) http.Handler {
	return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
		meta := auditlog.RequestMeta{UserAgent: r.UserAgent()}
		if addr := helpers.ClientIP(r); addr.IsValid() {
			meta.IP = addr.String()
		}
		next.ServeHTTP(w, r.WithContext(auditlog.WithRequestMeta(r.Context(), meta)))
	})
}