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