ultisuite-backend/internal/api/mail/validate_signatures.go
2026-05-24 00:03:36 +02:00

60 lines
1.7 KiB
Go

package mail
import (
"strings"
"github.com/ultisuite/ulti-backend/internal/api/apivalidate"
)
const (
maxSignatureRequestBody = 256 << 10 // 256 KiB
maxSignatureName = 128
maxSignatureHTMLContent = 64 << 10 // 64 KiB
)
type createSignatureRequest struct {
Name string `json:"name"`
HTML string `json:"html"`
}
type updateSignatureRequest struct {
Name string `json:"name"`
HTML string `json:"html"`
}
func validateCreateSignature(req *createSignatureRequest) *apivalidate.ValidationError {
var details []apivalidate.FieldDetail
name := strings.TrimSpace(req.Name)
if name == "" {
details = append(details, apivalidate.FieldDetail{Field: "name", Message: "required"})
} else if len(name) > maxSignatureName {
details = append(details, apivalidate.FieldDetail{Field: "name", Message: "too long"})
}
if len(req.HTML) > maxSignatureHTMLContent {
details = append(details, apivalidate.FieldDetail{Field: "html", Message: "too long"})
}
if len(details) == 0 {
req.Name = name
return nil
}
return apivalidate.NewValidationError(details...)
}
func validateUpdateSignature(req *updateSignatureRequest) *apivalidate.ValidationError {
var details []apivalidate.FieldDetail
name := strings.TrimSpace(req.Name)
if name == "" {
details = append(details, apivalidate.FieldDetail{Field: "name", Message: "required"})
} else if len(name) > maxSignatureName {
details = append(details, apivalidate.FieldDetail{Field: "name", Message: "too long"})
}
if len(req.HTML) > maxSignatureHTMLContent {
details = append(details, apivalidate.FieldDetail{Field: "html", Message: "too long"})
}
if len(details) == 0 {
req.Name = name
return nil
}
return apivalidate.NewValidationError(details...)
}