feature (templating): new templating function

This commit is contained in:
MickaelK 2025-01-27 16:22:03 +11:00
parent c3f2c57e5f
commit 496c05360e

View file

@ -2,6 +2,7 @@ package ctrl
import (
"encoding/base64"
"regexp"
"strings"
"text/template"
@ -66,6 +67,48 @@ var tmplFuncs = template.FuncMap{
return false, ErrNotImplemented
}
},
"filter": func(arg string, stdin string) (string, error) {
out := []string{}
r, regErr := regexp.Compile(arg)
if regErr != nil {
return "", regErr
}
for _, chunk := range strings.Split(stdin, ",") {
c := strings.TrimSpace(chunk)
if r.Match([]byte(c)) {
out = append(out, c)
}
}
return strings.Join(out, ", "), nil
},
"replace": func(arguments ...string) (string, error) {
var (
arg string
stdin string
replace string
)
if len(arguments) == 2 {
arg = arguments[0]
stdin = arguments[1]
} else if len(arguments) == 3 {
arg = arguments[0]
replace = arguments[1]
stdin = arguments[2]
} else {
return "", ErrNotImplemented
}
chunks := strings.Split(stdin, ",")
r, regErr := regexp.Compile(arg)
if regErr != nil {
return "", regErr
}
for i := range chunks {
c := strings.TrimSpace(chunks[i])
chunks[i] = r.ReplaceAllString(c, replace)
}
return strings.Join(chunks, ", "), nil
},
"encryptGCM": func(str string, key string) (string, error) {
data, err := EncryptAESGCM([]byte(key), []byte(str))
return base64.StdEncoding.EncodeToString(data), err