1
0
mirror of https://github.com/muety/wakapi.git synced 2023-08-10 21:12:56 +03:00
wakapi/services/mail/mail.go

105 lines
2.4 KiB
Go
Raw Normal View History

2021-04-05 23:57:57 +03:00
package mail
import (
"bytes"
"fmt"
2021-04-30 15:07:14 +03:00
"github.com/muety/wakapi/models"
"github.com/muety/wakapi/routes"
"html/template"
"io/ioutil"
conf "github.com/muety/wakapi/config"
"github.com/muety/wakapi/services"
"github.com/muety/wakapi/views"
2021-04-05 23:57:57 +03:00
)
const (
tplNamePasswordReset = "reset_password"
tplNameImportNotification = "import_finished"
2021-04-30 15:07:14 +03:00
tplNameReport = "report"
subjectPasswordReset = "Wakapi Password Reset"
subjectImportNotification = "Wakapi Data Import Finished"
2021-04-30 15:07:14 +03:00
subjectReport = "Wakapi Your Latest Report"
)
type PasswordResetTplData struct {
ResetLink string
}
type ImportNotificationTplData struct {
PublicUrl string
Duration string
NumHeartbeats int
}
2021-04-30 15:07:14 +03:00
type ReportTplData struct {
Report *models.Report
}
// Factory
2021-04-05 23:57:57 +03:00
func NewMailService() services.IMailService {
config := conf.Get()
if config.Mail.Enabled {
if config.Mail.Provider == conf.MailProviderMailWhale {
return NewMailWhaleService(config.Mail.MailWhale, config.Server.PublicUrl)
} else if config.Mail.Provider == conf.MailProviderSmtp {
return NewSMTPMailService(config.Mail.Smtp, config.Server.PublicUrl)
}
2021-04-05 23:57:57 +03:00
}
return &NoopMailService{}
}
func getPasswordResetTemplate(data PasswordResetTplData) (*bytes.Buffer, error) {
tpl, err := loadTemplate(tplNamePasswordReset)
if err != nil {
return nil, err
}
var rendered bytes.Buffer
if err := tpl.Execute(&rendered, data); err != nil {
return nil, err
}
return &rendered, nil
}
func getImportNotificationTemplate(data ImportNotificationTplData) (*bytes.Buffer, error) {
tpl, err := loadTemplate(tplNameImportNotification)
if err != nil {
return nil, err
}
var rendered bytes.Buffer
if err := tpl.Execute(&rendered, data); err != nil {
return nil, err
}
return &rendered, nil
}
2021-04-30 15:07:14 +03:00
func getReportTemplate(data ReportTplData) (*bytes.Buffer, error) {
tpl, err := loadTemplate(tplNameReport)
if err != nil {
return nil, err
}
var rendered bytes.Buffer
if err := tpl.Execute(&rendered, data); err != nil {
return nil, err
}
return &rendered, nil
}
func loadTemplate(tplName string) (*template.Template, error) {
tplFile, err := views.TemplateFiles.Open(fmt.Sprintf("mail/%s.tpl.html", tplName))
if err != nil {
return nil, err
}
defer tplFile.Close()
tplData, err := ioutil.ReadAll(tplFile)
if err != nil {
return nil, err
}
2021-04-05 23:57:57 +03:00
2021-04-30 15:07:14 +03:00
return template.
New(tplName).
Funcs(routes.DefaultTemplateFuncs()).
Parse(string(tplData))
2021-04-05 23:57:57 +03:00
}