From 496c05360e0bcfa5ffa04775cb987bcb8fbf2af8 Mon Sep 17 00:00:00 2001 From: MickaelK Date: Mon, 27 Jan 2025 16:22:03 +1100 Subject: [PATCH] feature (templating): new templating function --- server/ctrl/tmpl.go | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/server/ctrl/tmpl.go b/server/ctrl/tmpl.go index ad5802ab..1f19867e 100644 --- a/server/ctrl/tmpl.go +++ b/server/ctrl/tmpl.go @@ -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