Files
2024-04-02 15:13:13 +03:00

57 lines
1.1 KiB
Go

package requestid
import (
"git.company.lan/gopkg/gin"
"github.com/google/uuid"
)
const defaultHeaderKey = "X-Request-ID"
var headerXRequestID string
// Config defines the config for RequestID middleware
type config struct {
// Generator defines a function to generate an ID.
// Optional. Default: func() string {
// return uuid.New().String()
// }
generator Generator
headerKey HeaderStrKey
handler Handler
}
// New initializes the RequestID middleware.
func New(opts ...Option) gin.HandlerFunc {
cfg := &config{
generator: func() string {
return uuid.New().String()
},
headerKey: defaultHeaderKey,
}
for _, opt := range opts {
opt(cfg)
}
headerXRequestID = string(cfg.headerKey)
return func(c *gin.Context) {
// Get id from request
rid := c.GetHeader(headerXRequestID)
if rid == "" {
rid = cfg.generator()
c.Request.Header.Add(headerXRequestID, rid)
}
if cfg.handler != nil {
cfg.handler(c, rid)
}
// Set the id to ensure that the requestid is in the response
c.Header(headerXRequestID, rid)
}
}
// Get returns the request identifier
func Get(c *gin.Context) string {
return c.GetHeader(headerXRequestID)
}