Files
Gumble-Backend/internal/api/middleware/cache_control.go
Zane Walker 7e940c83a7
Some checks failed
Build & Test / build-test (push) Has been cancelled
Build & Test / swagger-codegen-cli (push) Has been cancelled
CodeQL / Analyze (go) (push) Has been cancelled
(Feat): Initial Commit
2026-07-03 19:41:31 +05:30

56 lines
1.2 KiB
Go

package middleware
import (
"context"
"allaboutapps.dev/aw/go-starter/internal/util"
"github.com/labstack/echo/v4"
"github.com/labstack/echo/v4/middleware"
)
var (
DefaultCacheControlConfig = CacheControlConfig{
Skipper: middleware.DefaultSkipper,
}
)
type CacheControlConfig struct {
Skipper middleware.Skipper
}
func CacheControl() echo.MiddlewareFunc {
return CacheControlWithConfig(DefaultCacheControlConfig)
}
func CacheControlWithConfig(config CacheControlConfig) echo.MiddlewareFunc {
if config.Skipper == nil {
config.Skipper = DefaultCacheControlConfig.Skipper
}
return func(next echo.HandlerFunc) echo.HandlerFunc {
return func(c echo.Context) error {
if config.Skipper(c) {
return next(c)
}
cacheControl := c.Request().Header.Get(util.HTTPHeaderCacheControl)
if len(cacheControl) > 0 {
directive := util.ParseCacheControlHeader(cacheControl)
ctx := c.Request().Context()
l := util.LogFromContext(ctx).With().Str("cacheControl", directive.String()).Logger()
ctx = l.WithContext(ctx)
ctx = context.WithValue(ctx, util.CTXKeyCacheControl, directive)
l.Trace().Msg("Setting cache control directive for request")
c.SetRequest(c.Request().WithContext(ctx))
}
return next(c)
}
}
}