package middleware import ( "fmt" model "github.com/cloudreve/Cloudreve/v3/models" "github.com/cloudreve/Cloudreve/v3/pkg/auth" "github.com/cloudreve/Cloudreve/v3/pkg/hashid" "github.com/cloudreve/Cloudreve/v3/pkg/serializer" "github.com/gin-gonic/gin" "net/http" ) // HashID 将给定对象的HashID转换为真实ID func HashID(IDType int) gin.HandlerFunc { return func(c *gin.Context) { if c.Param("id") != "" { id, err := hashid.DecodeHashID(c.Param("id"), IDType) if err == nil { c.Set("object_id", id) c.Next() return } c.JSON(200, serializer.ParamErr("Failed to parse object ID", nil)) c.Abort() return } c.Next() } } // IsFunctionEnabled 当功能未开启时阻止访问 func IsFunctionEnabled(key string) gin.HandlerFunc { return func(c *gin.Context) { if !model.IsTrueVal(model.GetSettingByName(key)) { c.JSON(200, serializer.Err(serializer.CodeFeatureNotEnabled, "This feature is not enabled", nil)) c.Abort() return } c.Next() } } // CacheControl 屏蔽客户端缓存 func CacheControl() gin.HandlerFunc { return func(c *gin.Context) { c.Header("Cache-Control", "private, no-cache") } } func Sandbox() gin.HandlerFunc { return func(c *gin.Context) { c.Header("Content-Security-Policy", "sandbox") } } // StaticResourceCache 使用静态资源缓存策略 func StaticResourceCache() gin.HandlerFunc { return func(c *gin.Context) { c.Header("Cache-Control", fmt.Sprintf("public, max-age=%d", model.GetIntSetting("public_resource_maxage", 86400))) } } // MobileRequestOnly func MobileRequestOnly() gin.HandlerFunc { return func(c *gin.Context) { if c.GetHeader(auth.CrHeaderPrefix+"ios") == "" { c.Redirect(http.StatusMovedPermanently, model.GetSiteURL().String()) c.Abort() return } c.Next() } }