package middleware import ( "crypto/rand" "fmt" "git.trcreatives.at/trcreatives/go-kite" ) type RequestIDConfig struct { Header string Generator func() string } func RequestID() kite.Middleware { return RequestIDWithConfig(RequestIDConfig{}) } func RequestIDWithConfig(cfg RequestIDConfig) kite.Middleware { if cfg.Header == "" { cfg.Header = "X-Request-ID" } if cfg.Generator == nil { cfg.Generator = func() string { b := make([]byte, 16) rand.Read(b) return fmt.Sprintf("%08x-%04x-%04x-%04x-%012x", b[0:4], b[4:6], b[6:8], b[8:10], b[10:16]) } } return func(h kite.Handler) kite.Handler { return func(ctx *kite.Context) error { id := ctx.GetHeader(cfg.Header) if id == "" { id = cfg.Generator() } ctx.SetHeader(cfg.Header, id) ctx.SetValue(cfg.Header, id) return h(ctx) } } }