Cloudreve/middleware/file.go

50 lines
1.3 KiB
Go

package middleware
import (
"fmt"
"github.com/cloudreve/Cloudreve/v4/application/dependency"
"github.com/cloudreve/Cloudreve/v4/pkg/filemanager/fs/dbfs"
"github.com/cloudreve/Cloudreve/v4/pkg/serializer"
"github.com/cloudreve/Cloudreve/v4/pkg/util"
"github.com/cloudreve/Cloudreve/v4/routers/controllers"
"github.com/gin-gonic/gin"
"github.com/gofrs/uuid"
)
// UrisService is a wrapper for service supports batch file operations
type UrisService interface {
GetUris() []string
}
// ValidateBatchFileCount validates if the batch file count is within the limit
func ValidateBatchFileCount(dep dependency.Dep, ctxKey interface{}) gin.HandlerFunc {
settings := dep.SettingProvider()
return func(c *gin.Context) {
uris := controllers.ParametersFromContext[UrisService](c, ctxKey)
limit := settings.MaxBatchedFile(c)
if len((uris).GetUris()) > limit {
c.JSON(200, serializer.ErrWithDetails(
c,
serializer.CodeTooManyUris,
fmt.Sprintf("Maximum allowed batch size: %d", limit),
nil,
))
c.Abort()
return
}
c.Next()
}
}
// ContextHint parses the context hint header and set it to context
func ContextHint() gin.HandlerFunc {
return func(c *gin.Context) {
if c.GetHeader(dbfs.ContextHintHeader) != "" {
util.WithValue(c, dbfs.ContextHintCtxKey{}, uuid.FromStringOrNil(c.GetHeader(dbfs.ContextHintHeader)))
}
c.Next()
}
}