mirror of https://github.com/cloudreve/Cloudreve
				
				
				
			
		
			
				
	
	
		
			78 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Go
		
	
	
			
		
		
	
	
			78 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Go
		
	
	
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()
 | 
						|
	}
 | 
						|
}
 |