mirror of
				https://github.com/cloudreve/cloudreve.git
				synced 2025-10-31 08:39:10 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			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()
 | |
| 	}
 | |
| }
 | 
