diff --git a/pkg/services/notifications/notifications.go b/pkg/services/notifications/notifications.go index c8d544a6458..bca81599d79 100644 --- a/pkg/services/notifications/notifications.go +++ b/pkg/services/notifications/notifications.go @@ -57,13 +57,22 @@ func ProvideService(bus bus.Bus, cfg *setting.Cfg, mailer Mailer, store TempUser }) mailTemplates.Funcs(sprig.FuncMap()) + // Parse invalid templates using 'or' logic. Return an error only if no paths are valid. + invalidTemplates := make([]string, 0) for _, pattern := range ns.Cfg.Smtp.TemplatesPatterns { templatePattern := filepath.Join(ns.Cfg.StaticRootPath, pattern) _, err := mailTemplates.ParseGlob(templatePattern) if err != nil { - return nil, err + invalidTemplates = append(invalidTemplates, templatePattern) } } + if len(invalidTemplates) > 0 { + is := strings.Join(invalidTemplates, ", ") + if len(invalidTemplates) == len(ns.Cfg.Smtp.TemplatesPatterns) { + return nil, fmt.Errorf("provided html/template filepaths matched no files: %s", is) + } + ns.log.Warn("some provided html/template filepaths matched no files: %s", is) + } if !util.IsEmail(ns.Cfg.Smtp.FromAddress) { return nil, errors.New("invalid email address for SMTP from_address config") diff --git a/pkg/services/notifications/notifications_test.go b/pkg/services/notifications/notifications_test.go index 9ebada7cb81..48ee121127d 100644 --- a/pkg/services/notifications/notifications_test.go +++ b/pkg/services/notifications/notifications_test.go @@ -31,12 +31,20 @@ func TestProvideService(t *testing.T) { require.Error(t, err) }) - t.Run("When template_patterns fails to parse", func(t *testing.T) { + t.Run("When all template_patterns fail to parse", func(t *testing.T) { + cfg := createSmtpConfig() + cfg.Smtp.TemplatesPatterns = []string{"/usr/not-a-dir/**", "/usr/also-not-a-dir/**"} + _, _, err := createSutWithConfig(t, bus, cfg) + + require.Error(t, err) + }) + + t.Run("When some template_patterns fail to parse", func(t *testing.T) { cfg := createSmtpConfig() cfg.Smtp.TemplatesPatterns = append(cfg.Smtp.TemplatesPatterns, "/usr/not-a-dir/**") _, _, err := createSutWithConfig(t, bus, cfg) - require.Error(t, err) + require.NoError(t, err) }) }