60 lines
1.7 KiB
Go
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...)
|
|
}
|