From 00edf2c7d9379a7ffc0134d42e5cb66af0843eff Mon Sep 17 00:00:00 2001 From: CrazyMax Date: Wed, 28 Dec 2022 03:06:14 +0100 Subject: [PATCH] Fix panics when parsing notification templates --- internal/app/hc.go | 1 + internal/msg/client.go | 22 +++++++++++++--------- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/internal/app/hc.go b/internal/app/hc.go index 2ec6ac53..1c039f1a 100644 --- a/internal/app/hc.go +++ b/internal/app/hc.go @@ -36,6 +36,7 @@ func (di *Diun) HealthchecksSuccess(entries *model.NotifEntries) { * {{ .CountError }} tag(s) with error`)) if err := logsTpl.Execute(&logsBuf, entries); err != nil { log.Error().Err(err).Msgf("Cannot create logs for Healthchecks success event") + return } if err := di.hc.Success(context.Background(), gohealthchecks.PingingOptions{ diff --git a/internal/msg/client.go b/internal/msg/client.go index 76e33249..0adb77e0 100644 --- a/internal/msg/client.go +++ b/internal/msg/client.go @@ -37,31 +37,35 @@ func New(opts Options) (*Client, error) { } // RenderMarkdown returns a notification message as markdown -func (c *Client) RenderMarkdown() (title []byte, body []byte, err error) { +func (c *Client) RenderMarkdown() (title []byte, body []byte, _ error) { var titleBuf bytes.Buffer - titleTpl := template.Must(template.New("title").Funcs(c.opts.TemplateFuncs).Parse(strings.TrimSuffix(strings.TrimSpace(c.opts.TemplateTitle), "\n"))) - err = titleTpl.Execute(&titleBuf, struct { + titleTpl, err := template.New("title").Funcs(c.opts.TemplateFuncs).Parse(strings.TrimSuffix(strings.TrimSpace(c.opts.TemplateTitle), "\n")) + if err != nil { + return title, body, errors.Wrap(err, "Cannot parse title template") + } + if err = titleTpl.Execute(&titleBuf, struct { Meta model.Meta Entry model.NotifEntry }{ Meta: c.opts.Meta, Entry: c.opts.Entry, - }) - if err != nil { + }); err != nil { return title, body, errors.Wrap(err, "Cannot render notif title") } title = titleBuf.Bytes() var bodyBuf bytes.Buffer - bodyTpl := template.Must(template.New("body").Funcs(c.opts.TemplateFuncs).Parse(strings.TrimSuffix(strings.TrimSpace(c.opts.TemplateBody), "\n"))) - err = bodyTpl.Execute(&bodyBuf, struct { + bodyTpl, err := template.New("body").Funcs(c.opts.TemplateFuncs).Parse(strings.TrimSuffix(strings.TrimSpace(c.opts.TemplateBody), "\n")) + if err != nil { + return title, body, errors.Wrap(err, "Cannot parse body template") + } + if err = bodyTpl.Execute(&bodyBuf, struct { Meta model.Meta Entry model.NotifEntry }{ Meta: c.opts.Meta, Entry: c.opts.Entry, - }) - if err != nil { + }); err != nil { return title, body, errors.Wrap(err, "Cannot render notif body") } body = bodyBuf.Bytes()