12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- package middleware
- import (
- "github.com/labstack/echo"
- "github.com/labstack/gommon/random"
- )
- type (
- // RequestIDConfig defines the config for RequestID middleware.
- RequestIDConfig struct {
- // Skipper defines a function to skip middleware.
- Skipper Skipper
- // Generator defines a function to generate an ID.
- // Optional. Default value random.String(32).
- Generator func() string
- }
- )
- var (
- // DefaultRequestIDConfig is the default RequestID middleware config.
- DefaultRequestIDConfig = RequestIDConfig{
- Skipper: DefaultSkipper,
- Generator: generator,
- }
- )
- // RequestID returns a X-Request-ID middleware.
- func RequestID() echo.MiddlewareFunc {
- return RequestIDWithConfig(DefaultRequestIDConfig)
- }
- // RequestIDWithConfig returns a X-Request-ID middleware with config.
- func RequestIDWithConfig(config RequestIDConfig) echo.MiddlewareFunc {
- // Defaults
- if config.Skipper == nil {
- config.Skipper = DefaultRequestIDConfig.Skipper
- }
- if config.Generator == nil {
- config.Generator = generator
- }
- return func(next echo.HandlerFunc) echo.HandlerFunc {
- return func(c echo.Context) error {
- if config.Skipper(c) {
- return next(c)
- }
- req := c.Request()
- res := c.Response()
- rid := req.Header.Get(echo.HeaderXRequestID)
- if rid == "" {
- rid = config.Generator()
- }
- res.Header().Set(echo.HeaderXRequestID, rid)
- return next(c)
- }
- }
- }
- func generator() string {
- return random.String(32)
- }
|