2023-12-18 23:39:16 +01:00
|
|
|
package auth
|
|
|
|
|
|
|
|
import (
|
2024-02-13 16:57:03 +01:00
|
|
|
"bytes"
|
|
|
|
"embed"
|
|
|
|
"html/template"
|
|
|
|
"time"
|
|
|
|
|
2023-12-18 23:39:16 +01:00
|
|
|
"codeberg.org/pronounscc/pronouns.cc/backend/log"
|
2024-02-13 16:57:03 +01:00
|
|
|
"emperror.dev/errors"
|
2023-12-18 23:39:16 +01:00
|
|
|
"github.com/jordan-wright/email"
|
|
|
|
)
|
|
|
|
|
|
|
|
func (s *Server) SendEmail(to, title, template string, data map[string]any) {
|
|
|
|
e := email.NewEmail()
|
|
|
|
e.From = s.emailAddress
|
|
|
|
e.To = []string{to}
|
|
|
|
|
2024-02-13 16:57:03 +01:00
|
|
|
text, html, err := s.Template(template, data)
|
|
|
|
if err != nil {
|
|
|
|
log.Errorf("executing templates: %v", err)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
e.Text = text
|
|
|
|
e.HTML = html
|
|
|
|
|
|
|
|
err = s.emailPool.Send(e, 10*time.Second)
|
2023-12-18 23:39:16 +01:00
|
|
|
if err != nil {
|
|
|
|
log.Errorf("sending email: %v", err)
|
|
|
|
}
|
|
|
|
}
|
2024-02-13 16:57:03 +01:00
|
|
|
|
|
|
|
//go:embed templates/*
|
|
|
|
var fs embed.FS
|
|
|
|
var tmpl = template.Must(template.ParseFS(fs, "templates/*"))
|
|
|
|
|
|
|
|
func (s *Server) Template(template string, data map[string]any) (text, html []byte, err error) {
|
|
|
|
data["BaseURL"] = s.baseURL
|
|
|
|
|
|
|
|
textWriter := new(bytes.Buffer)
|
|
|
|
htmlWriter := new(bytes.Buffer)
|
|
|
|
|
|
|
|
err = tmpl.ExecuteTemplate(textWriter, "templates/"+template+".txt", data)
|
|
|
|
if err != nil {
|
|
|
|
return nil, nil, errors.Wrap(err, "executing text template")
|
|
|
|
}
|
|
|
|
|
|
|
|
err = tmpl.ExecuteTemplate(htmlWriter, "templates/"+template+".html", data)
|
|
|
|
if err != nil {
|
|
|
|
return nil, nil, errors.Wrap(err, "executing HTML template")
|
|
|
|
}
|
|
|
|
|
|
|
|
return textWriter.Bytes(), htmlWriter.Bytes(), nil
|
|
|
|
}
|