-
Notifications
You must be signed in to change notification settings - Fork 12
/
primitives.go
109 lines (84 loc) · 3.1 KB
/
primitives.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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
package config
import (
"fmt"
"net/url"
"regexp"
"strings"
"github.com/antham/chyle/chyle/tmplh"
"github.com/antham/envh"
)
// MissingEnvError is called when one or several
// environment variables are missing
type MissingEnvError struct {
envs []string
}
// Envs returns environment variables missing
func (e MissingEnvError) Envs() []string {
return e.envs
}
// Errors returns error as string
func (e MissingEnvError) Error() string {
switch len(e.envs) {
case 1:
return fmt.Sprintf(`environment variable missing : "%s"`, e.envs[0])
default:
return fmt.Sprintf(`environments variables missing : "%s"`, strings.Join(e.envs, `", "`))
}
}
func validateEnvironmentVariablesDefinition(conf *envh.EnvTree, keyChains [][]string) error {
undefinedKeys := []string{}
for _, keyChain := range keyChains {
ok, err := conf.HasSubTreeValue(keyChain...)
if !ok || err != nil {
undefinedKeys = append(undefinedKeys, strings.Join(keyChain, "_"))
}
}
if len(undefinedKeys) > 0 {
return MissingEnvError{undefinedKeys}
}
return nil
}
func validateStringValue(value string, conf *envh.EnvTree, keyChain []string) error {
if conf.FindStringUnsecured(keyChain...) != value {
return EnvValidationError{fmt.Sprintf(`variable %s must be equal to "%s"`, strings.Join(keyChain, "_"), value), strings.Join(keyChain, "_")}
}
return nil
}
func validateURL(fullconfig *envh.EnvTree, chain []string) error {
if _, err := url.ParseRequestURI(fullconfig.FindStringUnsecured(chain...)); err != nil {
return EnvValidationError{fmt.Sprintf(`provide a valid URL for "%s", "%s" given`, strings.Join(chain, "_"), fullconfig.FindStringUnsecured(chain...)), strings.Join(chain, "_")}
}
return nil
}
func validateRegexp(fullconfig *envh.EnvTree, keyChain []string) error {
if _, err := regexp.Compile(fullconfig.FindStringUnsecured(keyChain...)); err != nil {
return EnvValidationError{fmt.Sprintf(`provide a valid regexp for "%s", "%s" given`, strings.Join(keyChain, "_"), fullconfig.FindStringUnsecured(keyChain...)), strings.Join(keyChain, "_")}
}
return nil
}
func validateOneOf(fullconfig *envh.EnvTree, keyChain []string, choices []string) error {
val := fullconfig.FindStringUnsecured(keyChain...)
for _, choice := range choices {
if choice == val {
return nil
}
}
return EnvValidationError{fmt.Sprintf(`provide a value for "%s" from one of those values : ["%s"], "%s" given`, strings.Join(keyChain, "_"), strings.Join(choices, `", "`), val), strings.Join(keyChain, "_")}
}
func validateTemplate(fullconfig *envh.EnvTree, keyChain []string) error {
val := fullconfig.FindStringUnsecured(keyChain...)
_, err := tmplh.Parse("test", val)
if err != nil {
return EnvValidationError{fmt.Sprintf(`provide a valid template string for "%s" : "%s", "%s" given`, strings.Join(keyChain, "_"), err.Error(), val), strings.Join(keyChain, "_")}
}
return nil
}
// featureDisabled return false if one subtree declared in keyChains exists
func featureDisabled(fullconfig *envh.EnvTree, keyChains [][]string) bool {
for _, keyChain := range keyChains {
if fullconfig.IsExistingSubTree(keyChain...) {
return false
}
}
return true
}