Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 25 additions & 1 deletion mailer/mailer.go
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
package mailer

import (
"bytes"
"net/url"
"regexp"
"text/template"

"github.com/netlify/gotrue/conf"
"github.com/netlify/gotrue/models"
Expand All @@ -20,6 +22,28 @@ type Mailer interface {
ValidateEmail(email string) error
}

func interpretAsTemplate(templateString string, data map[string]interface{}) string {
t, err := template.New("email").Parse(templateString)
if err != nil {
panic(err)
}

var result bytes.Buffer
err = t.Execute(&result, data)
if err != nil {
panic(err)
}

return result.String()
}

func getEmailFrom(instanceConfig *conf.Configuration) string {
return interpretAsTemplate(instanceConfig.SMTP.AdminEmail, map[string]interface{}{
"SiteURL": instanceConfig.SiteURL,
"SiteID": "something", // where do we get this from?
})
}

// NewMailer returns a new gotrue mailer
func NewMailer(instanceConfig *conf.Configuration) Mailer {
if instanceConfig.SMTP.Host == "" {
Expand All @@ -34,7 +58,7 @@ func NewMailer(instanceConfig *conf.Configuration) Mailer {
Port: instanceConfig.SMTP.Port,
User: instanceConfig.SMTP.User,
Pass: instanceConfig.SMTP.Pass,
From: instanceConfig.SMTP.AdminEmail,
From: getEmailFrom(instanceConfig),
BaseURL: instanceConfig.SiteURL,
Logger: logrus.New(),
},
Expand Down
10 changes: 10 additions & 0 deletions mailer/mailer_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package mailer
import (
"testing"

"github.com/netlify/gotrue/conf"
"github.com/stretchr/testify/assert"
)

Expand Down Expand Up @@ -46,3 +47,12 @@ func TestRelativeURL(t *testing.T) {
assert.Equal(t, c.Expected, res, c.URL)
}
}

func TestGetEmailFrom(t *testing.T) {
res := getEmailFrom(&conf.Configuration{
SMTP: conf.SMTPConfiguration{
AdminEmail: "gotrue+{{.SiteID}}@example.com",
},
})
assert.Equal(t, "gotrue+something@example.com", res)
}