Skip to content

Commit 12c46be

Browse files
committed
fixing JSON templating
1 parent b02d846 commit 12c46be

File tree

1 file changed

+24
-4
lines changed

1 file changed

+24
-4
lines changed

internals/proxy/proxy.go

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
88
"net/http"
99
"net/http/httputil"
1010
"net/url"
11+
"regexp"
1112
"slices"
1213
"strconv"
1314
"strings"
@@ -83,10 +84,29 @@ func renderTemplate(name string, tmplStr string, data any) (string, error) {
8384

8485
func templateJSON(data map[string]interface{}, variables map[string]interface{}) map[string]interface{} {
8586
for k, v := range data {
86-
if str, ok := v.(string); ok && len(str) > 4 && str[:3] == "{{." {
87-
key := str[3 : len(str)-2]
88-
if val, found := variables[key]; found {
89-
data[k] = val
87+
str, ok := v.(string)
88+
89+
if ok {
90+
re := regexp.MustCompile(`{{\s*\.([A-Za-z_][A-Za-z0-9_]*)}}\s*`)
91+
matches := re.FindAllString(str, -1)
92+
93+
if len(matches) > 1 {
94+
for _, tmplStr := range(matches) {
95+
tmplKey := tmplStr[3 : len(tmplStr)-2]
96+
97+
variable, err := json.Marshal(variables[tmplKey])
98+
99+
if err != nil {
100+
log.Error("Could not decode JSON: ", err.Error())
101+
break
102+
}
103+
104+
data[k] = strings.ReplaceAll(str, string(variable), tmplStr)
105+
}
106+
} else {
107+
tmplKey := matches[0][3 : len(matches[0])-2]
108+
109+
data[k] = variables[tmplKey]
90110
}
91111
}
92112
}

0 commit comments

Comments
 (0)