(Feat): Initial Commit
This commit is contained in:
55
internal/api/middleware/cache_control.go
Normal file
55
internal/api/middleware/cache_control.go
Normal file
@@ -0,0 +1,55 @@
|
||||
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)
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user