forked from mirrors/homebox
23b5892aef
* introduce scaffold for new models * wip: shoutrrr wrapper (may remove) * update schema files * gen: ent code * gen: migrations * go mod tidy * add group_id to notifier * db migration * new mapper helpers * notifier repo * introduce experimental adapter pattern for hdlrs * refactor adapters to fit more common use cases * new routes for notifiers * update errors to fix validation panic * go tidy * reverse checkbox label display * wip: notifiers UI * use badges instead of text * improve documentation * add scaffold schema reference * remove notifier service * refactor schema folder * support group edges via scaffold * delete test file * include link to API docs * audit and update documentation + improve format * refactor schema edges * refactor * add custom validator * set validate + order fields by name * fix failing tests
79 lines
1.4 KiB
Go
79 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://",
|
|
}
|
|
|
|
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
|
|
}
|