forked from mirrors/homebox
80 lines
1.4 KiB
Go
80 lines
1.4 KiB
Go
package validate
|
|
|
|
import (
|
|
"strings"
|
|
|
|
"github.com/go-playground/validator/v10"
|
|
)
|
|
|
|
var validate *validator.Validate
|
|
|
|
func init() {
|
|
validate = validator.New()
|
|
|
|
err := validate.RegisterValidation("shoutrrr", func(fl validator.FieldLevel) bool {
|
|
prefixes := [...]string{
|
|
"discord://",
|
|
"smtp://",
|
|
"gotify://",
|
|
"googlechat://",
|
|
"ifttt://",
|
|
"join://",
|
|
"mattermost://",
|
|
"matrix://",
|
|
"opsgenie://",
|
|
"pushbullet://",
|
|
"pushover://",
|
|
"rocketchat://",
|
|
"slack://",
|
|
"teams://",
|
|
"telegram://",
|
|
"zulip://",
|
|
"generic://",
|
|
}
|
|
|
|
str := fl.Field().String()
|
|
if str == "" {
|
|
return false
|
|
}
|
|
|
|
for _, prefix := range prefixes {
|
|
if strings.HasPrefix(str, prefix) {
|
|
return true
|
|
}
|
|
}
|
|
|
|
return false
|
|
})
|
|
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
}
|
|
|
|
// Checks a struct for validation errors and returns any errors the occur. This
|
|
// wraps the validate.Struct() function and provides some error wrapping. When
|
|
// a validator.ValidationErrors is returned, it is wrapped transformed into a
|
|
// FieldErrors array and returned.
|
|
func Check(val any) error {
|
|
err := validate.Struct(val)
|
|
if err != nil {
|
|
verrors, ok := err.(validator.ValidationErrors)
|
|
if !ok {
|
|
return err
|
|
}
|
|
|
|
fields := make(FieldErrors, 0, len(verrors))
|
|
for _, verr := range verrors {
|
|
field := FieldError{
|
|
Field: verr.Field(),
|
|
Error: verr.Error(),
|
|
}
|
|
|
|
fields = append(fields, field)
|
|
}
|
|
return fields
|
|
}
|
|
|
|
return nil
|
|
}
|