-
Notifications
You must be signed in to change notification settings - Fork 0
/
template.go
50 lines (41 loc) · 1.18 KB
/
template.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
package main
import (
"os"
"regexp"
"strings"
"time"
)
// Setup the regex used to identify {{ template text }}
var templateRegex = regexp.MustCompile(`{{ *([^{}]+) *}}`)
// Test if the passed string has {{ template }} in it
func templateTest(str string) bool {
return templateRegex.MatchString(str)
}
// Handle {{ templates }} found in the post request body
func templateHndlr(str string) string {
for _, match := range templateRegex.FindAllStringSubmatch(str, -1) {
result := templateCmd(match[1])
str = strings.Replace(str, match[0], result, 1)
}
return str
}
// Handle individual {{ template }} commands
func templateCmd(templateTxt string) string {
params := strings.Split(templateTxt, " ")
// Switch on template commands.
switch params[0] {
// Display date/time with given format
case "isotime":
t := time.Now()
// Remove "` or space chars surroudning date format
format := strings.Trim(strings.Join(params[1:], " "), "\"` ")
return t.Format(format)
// Get an environmental variable
case "env": //
envVar := strings.Trim(params[1], "\" ")
return os.Getenv(envVar)
// If no command found just return the string minus the {{}}
default:
return templateTxt
}
}