This repository has been archived by the owner on Apr 24, 2023. It is now read-only.
/
validate.go
88 lines (70 loc) · 2.37 KB
/
validate.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
package config
import (
"fmt"
"strings"
"github.com/go-playground/locales/en"
ut "github.com/go-playground/universal-translator"
ens "github.com/go-playground/validator/translations/en"
"github.com/robfig/cron/v3"
"gopkg.in/go-playground/validator.v9"
)
// validate
func validate(config Config) error {
validate := validator.New()
// Get English Errors
uni := ut.New(en.New(), en.New())
trans, _ := uni.GetTranslator("en")
_ = ens.RegisterDefaultTranslations(validate, trans)
// validate
err := validate.Struct(&config)
if err != nil {
errorLists, ok := err.(validator.ValidationErrors)
if ok {
return fmt.Errorf("errors validating struct config: %v", errorLists.Translate(trans))
}
return fmt.Errorf("errors validating struct config: %v", err.Error())
}
err = customValidate(config)
if err != nil {
return fmt.Errorf("errors validating struct config: %s", err.Error())
}
return nil
}
// Custom Validators
func customValidate(config Config) error {
// Put Custom Validation Here
if config.AutoIndexPattern.Enabled {
if len(config.AutoIndexPattern.GeneralPatterns) < 1 {
return fmt.Errorf("a minimum of 1 general pattern is needed for Auto Index Pattern Creation. ")
}
}
for _, pattern := range config.RefreshIndexPattern.Patterns {
if strings.ContainsAny(pattern, "/\\#\"?<>| ,") || !validIndexPattern(pattern) {
return fmt.Errorf("invalid pattern [%s]", pattern)
}
}
for _, generalPattern := range config.AutoIndexPattern.GeneralPatterns {
pattern := generalPattern.Pattern
if strings.ContainsAny(pattern, "/\\#\"<>| ,") || !validIndexPattern(pattern) ||
strings.Contains(pattern, "**") ||
strings.Contains(pattern, "??") {
return fmt.Errorf("invalid general pattern [%s]", pattern)
}
}
// validate cron schedules
_, err := cron.ParseStandard(config.AutoIndexPattern.Schedule)
if err != nil {
return fmt.Errorf("autoindexpattern's cron expression not valid: %s", err.Error())
}
_, err = cron.ParseStandard(config.RefreshIndexPattern.Schedule)
if err != nil {
return fmt.Errorf("refreshindexpattern's cron expression not valid: %s", err.Error())
}
return nil
}
func validIndexPattern(pattern string) bool {
return len(pattern) <= 255 && pattern != "." &&
pattern != ".." && !strings.HasPrefix(pattern, "-") &&
!strings.HasPrefix(pattern, "_") && !strings.HasPrefix(pattern, "+") &&
pattern == strings.ToLower(pattern)
}