Skip to content

Commit d2d1314

Browse files
committed
show fatal errors for first run when mail template errors
1 parent 9bfa42a commit d2d1314

File tree

1 file changed

+15
-22
lines changed

1 file changed

+15
-22
lines changed

modules/templates/mailer.go

Lines changed: 15 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ package templates
55

66
import (
77
"context"
8+
"fmt"
89
"html/template"
910
"regexp"
1011
"strings"
@@ -33,7 +34,7 @@ func mailSubjectTextFuncMap() texttmpl.FuncMap {
3334
}
3435
}
3536

36-
func buildSubjectBodyTemplate(stpl *texttmpl.Template, btpl *template.Template, name string, content []byte) {
37+
func buildSubjectBodyTemplate(stpl *texttmpl.Template, btpl *template.Template, name string, content []byte) error {
3738
// Split template into subject and body
3839
var subjectContent []byte
3940
bodyContent := content
@@ -42,20 +43,13 @@ func buildSubjectBodyTemplate(stpl *texttmpl.Template, btpl *template.Template,
4243
subjectContent = content[0:loc[0]]
4344
bodyContent = content[loc[1]:]
4445
}
45-
if _, err := stpl.New(name).
46-
Parse(string(subjectContent)); err != nil {
47-
log.Error("Failed to parse template [%s/subject]: %v", name, err)
48-
if !setting.IsProd {
49-
log.Fatal("Please fix the mail template error")
50-
}
46+
if _, err := stpl.New(name).Parse(string(subjectContent)); err != nil {
47+
return fmt.Errorf("failed to parse template [%s/subject]: %w", name, err)
5148
}
52-
if _, err := btpl.New(name).
53-
Parse(string(bodyContent)); err != nil {
54-
log.Error("Failed to parse template [%s/body]: %v", name, err)
55-
if !setting.IsProd {
56-
log.Fatal("Please fix the mail template error")
57-
}
49+
if _, err := btpl.New(name).Parse(string(bodyContent)); err != nil {
50+
return fmt.Errorf("failed to parse template [%s/body]: %w", name, err)
5851
}
52+
return nil
5953
}
6054

6155
// Mailer provides the templates required for sending notification mails.
@@ -64,14 +58,7 @@ func Mailer(ctx context.Context) (*texttmpl.Template, *template.Template) {
6458
bodyTemplates := template.New("")
6559

6660
subjectTemplates.Funcs(mailSubjectTextFuncMap())
67-
// To do the best to avoid serious breaking, add some functions back for body templates.
68-
// Keep in mind that some behaviors have changed, for worse case, double-escaping.
69-
// Custom template users should migrate to the new template system ASAP.
70-
bodyTemplateFuncMap := NewFuncMap()
71-
bodyTemplateFuncMap["Safe"] = SafeHTML
72-
bodyTemplateFuncMap["Escape"] = HTMLEscape
73-
bodyTemplateFuncMap["Str2html"] = SanitizeHTML
74-
bodyTemplates.Funcs(bodyTemplateFuncMap)
61+
bodyTemplates.Funcs(NewFuncMap())
7562

7663
assetFS := AssetFS()
7764
refreshTemplates := func(firstRun bool) {
@@ -94,7 +81,13 @@ func Mailer(ctx context.Context) (*texttmpl.Template, *template.Template) {
9481
if firstRun {
9582
log.Trace("Adding mail template %s: %s by %s", tmplName, assetPath, layerName)
9683
}
97-
buildSubjectBodyTemplate(subjectTemplates, bodyTemplates, tmplName, content)
84+
if err = buildSubjectBodyTemplate(subjectTemplates, bodyTemplates, tmplName, content); err != nil {
85+
if firstRun {
86+
log.Fatal("Failed to parse mail template, err: %v", err)
87+
} else {
88+
log.Error("Failed to parse mail template, err: %v", err)
89+
}
90+
}
9891
}
9992
}
10093

0 commit comments

Comments
 (0)