-
Notifications
You must be signed in to change notification settings - Fork 0
/
templatevar.go
47 lines (38 loc) · 1.3 KB
/
templatevar.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
package libdctlint
import (
"github.com/Domain-Connect/dc-template-linter/exitvals"
"github.com/Domain-Connect/dc-template-linter/internal"
"github.com/rs/zerolog"
)
func findInvalidTemplateStrings(record *internal.Record, rlog zerolog.Logger) exitvals.CheckSeverity {
exitVal := exitvals.CheckOK
exitVal |= checkSingleString(record.Host, rlog)
exitVal |= checkSingleString(record.Name, rlog)
exitVal |= checkSingleString(record.PointsTo, rlog)
exitVal |= checkSingleString(record.Data, rlog)
exitVal |= checkSingleString(record.TxtCMP, rlog)
exitVal |= checkSingleString(record.Service, rlog)
exitVal |= checkSingleString(record.Target, rlog)
exitVal |= checkSingleString(record.SPFRules, rlog)
return exitVal
}
func checkSingleString(input string, rlog zerolog.Logger) exitvals.CheckSeverity {
withInVar := false
for _, c := range input {
if c == '%' {
withInVar = !withInVar
continue
}
if withInVar {
if !(('0' <= c && '9' >= c) || ('a' <= c && 'z' >= c) || ('A' <= c && 'Z' >= c) || c == '_' || c == '-') {
rlog.Warn().Str("invalid", input).Msg("invalid character found in variable string")
return exitvals.CheckWarn
}
}
}
if withInVar {
rlog.Error().Str("invalid", input).Msg("variable string is not terminated")
return exitvals.CheckError
}
return exitvals.CheckOK
}