- Restructure handlers into file_commands/file_queries/file_handlers - Add gRPC auth client, JWT middleware, rate limiting, request ID - Add common utilities: logger, sanitizer, s3_errors - Add unit tests for config, mediator, auth, request_id, sanitize - Add proto definitions and generated code - Remove old web UI pages - Add .dockerignore and .env.example
98 lines
3.2 KiB
Go
98 lines
3.2 KiB
Go
package validators
|
|
|
|
import (
|
|
"rag/file-system/internal/api/requests"
|
|
"rag/file-system/internal/common"
|
|
)
|
|
|
|
type FileValidator struct{}
|
|
|
|
func NewFileValidator() *FileValidator {
|
|
return &FileValidator{}
|
|
}
|
|
|
|
func (v *FileValidator) ValidateListFiles(req *requests.ListFilesRequest) error {
|
|
if req.BucketName == "" {
|
|
return common.NewBusinessException("Bucket name is required")
|
|
}
|
|
if err := common.SanitizeBucketName(req.BucketName); err != nil {
|
|
return err
|
|
}
|
|
if req.MaxKeys <= 0 {
|
|
req.MaxKeys = 20
|
|
}
|
|
if req.MaxKeys > 1000 {
|
|
req.MaxKeys = 1000
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (v *FileValidator) ValidatePreview(req *requests.GetFilePreviewRequest) error {
|
|
if req.BucketName == "" || req.ObjectKey == "" {
|
|
return common.NewBusinessException("Bucket name and Object key are required")
|
|
}
|
|
return common.SanitizeObjectKey(req.ObjectKey)
|
|
}
|
|
|
|
func (v *FileValidator) ValidateGetContent(req *requests.GetFileContentRequest) error {
|
|
if req.BucketName == "" || req.ObjectKey == "" {
|
|
return common.NewBusinessException("Bucket name and Object key are required")
|
|
}
|
|
return common.SanitizeObjectKey(req.ObjectKey)
|
|
}
|
|
|
|
func (v *FileValidator) ValidateInitMultipart(req *requests.InitMultipartRequest) error {
|
|
if req.BucketName == "" || req.ObjectKey == "" {
|
|
return common.NewBusinessException("Bucket name and Object key are required")
|
|
}
|
|
return common.SanitizeObjectKey(req.ObjectKey)
|
|
}
|
|
|
|
func (v *FileValidator) ValidateUploadPart(req *requests.UploadPartRequest) error {
|
|
if req.BucketName == "" || req.ObjectKey == "" || req.UploadId == "" || req.PartNumber <= 0 || req.File == nil {
|
|
return common.NewBusinessException("Missing required fields for upload part")
|
|
}
|
|
return common.SanitizeObjectKey(req.ObjectKey)
|
|
}
|
|
|
|
func (v *FileValidator) ValidateCompleteMultipart(req *requests.CompleteMultipartRequest) error {
|
|
if req.BucketName == "" || req.ObjectKey == "" || req.UploadId == "" || len(req.Parts) == 0 {
|
|
return common.NewBusinessException("Missing required fields for completion")
|
|
}
|
|
return common.SanitizeObjectKey(req.ObjectKey)
|
|
}
|
|
|
|
func (v *FileValidator) ValidateDeleteFile(req *requests.DeleteFileRequest) error {
|
|
if req.BucketName == "" || req.ObjectKey == "" {
|
|
return common.NewBusinessException("Bucket name and Object key are required")
|
|
}
|
|
return common.SanitizeObjectKey(req.ObjectKey)
|
|
}
|
|
|
|
func (v *FileValidator) ValidateAbortMultipart(req *requests.AbortMultipartRequest) error {
|
|
if req.BucketName == "" || req.ObjectKey == "" || req.UploadId == "" {
|
|
return common.NewBusinessException("Bucket name, Object key, and Upload ID are required")
|
|
}
|
|
return common.SanitizeObjectKey(req.ObjectKey)
|
|
}
|
|
|
|
func (v *FileValidator) ValidateDownload(req *requests.DownloadFileRequest) error {
|
|
if req.BucketName == "" {
|
|
return common.NewBusinessException("Bucket name cannot be empty")
|
|
}
|
|
if req.ObjectKey == "" {
|
|
return common.NewBusinessException("Object key cannot be empty")
|
|
}
|
|
return common.SanitizeObjectKey(req.ObjectKey)
|
|
}
|
|
|
|
func (v *FileValidator) ValidateUpload(req *requests.UploadFileRequest) error {
|
|
if req.BucketName == "" {
|
|
return common.NewBusinessException("Bucket name cannot be empty")
|
|
}
|
|
if req.File == nil {
|
|
return common.NewBusinessException("File is required")
|
|
}
|
|
return common.SanitizeObjectKey(req.File.Filename)
|
|
}
|