23 lines
656 B
Go
23 lines
656 B
Go
|
|
package mw
|
||
|
|
|
||
|
|
import (
|
||
|
|
"net/http"
|
||
|
|
|
||
|
|
"code.nochebuena.dev/einherjar/core/logz"
|
||
|
|
)
|
||
|
|
|
||
|
|
// RequestID injects a unique request ID into the context (via [logz.WithRequestID])
|
||
|
|
// and sets the X-Request-ID response header.
|
||
|
|
// generator is called once per request — pass uuid.NewString or a custom function.
|
||
|
|
func RequestID(generator func() string) func(http.Handler) http.Handler {
|
||
|
|
return func(next http.Handler) http.Handler {
|
||
|
|
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||
|
|
id := generator()
|
||
|
|
ctx := logz.WithRequestID(r.Context(), id)
|
||
|
|
r = r.WithContext(ctx)
|
||
|
|
w.Header().Set("X-Request-ID", id)
|
||
|
|
next.ServeHTTP(w, r)
|
||
|
|
})
|
||
|
|
}
|
||
|
|
}
|