forked from cloud-gov/buildpack-notify
-
Notifications
You must be signed in to change notification settings - Fork 0
/
templates.go
68 lines (59 loc) · 1.92 KB
/
templates.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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
package main
import (
"fmt"
"html/template"
"io"
"path/filepath"
cfclient "github.com/cloudfoundry-community/go-cfclient"
)
const (
notifyTemplate = "NOTIFY_TEMPLATE"
)
// Templates serve as a mapping to various templates.
// Each entry can be a compliation of multiple files mapped to a string entry.
// This works if we ever want to use the .define blocks which are good for
// creating a main template with swappable content.
// Similar to https://hackernoon.com/golang-template-2-template-composition-and-how-to-organize-template-files-4cb40bcdf8f6
type Templates struct {
templates map[string]*template.Template
}
// initTemplates will try to parse the templates.
func initTemplates() (*Templates, error) {
templates := make(map[string]*template.Template)
for templateName, templatePath := range findTemplates() {
tpl, err := template.ParseFiles(templatePath...)
if err != nil {
return nil, err
}
templates[templateName] = tpl
}
return &Templates{templates}, nil
}
// findTemplates will try to construct to final path of where to find templates
// given the basePath of where to look.
func findTemplates() map[string][]string {
return map[string][]string{
notifyTemplate: []string{filepath.Join("templates", "mail", "notify.txt")},
}
}
func (t *Templates) getTemplate(templateKey string) (*template.Template, error) {
if template, ok := t.templates[templateKey]; ok {
return template, nil
}
return nil, fmt.Errorf("unable to find template with key %s", templateKey)
}
// notifyEmail provides struct for the templates/mail/notify.tmpl
type notifyEmail struct {
Username string
Apps []cfclient.App
IsMultipleApp bool
Buildpacks []buildpackReleaseInfo
}
// getNotifyEmail gets the filled in notify email template.
func (t *Templates) getNotifyEmail(rw io.Writer, email notifyEmail) error {
tpl, err := t.getTemplate(notifyTemplate)
if err != nil {
return err
}
return tpl.Execute(rw, email)
}