generated from matoszz/mitbgo-template
-
Notifications
You must be signed in to change notification settings - Fork 7
/
templates.go
170 lines (130 loc) · 4.4 KB
/
templates.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
package emails
import (
"fmt"
"github.com/sendgrid/sendgrid-go/helpers/mail"
"golang.org/x/text/cases"
"golang.org/x/text/language"
)
// WelcomeData is used to complete the welcome email template
type WelcomeData struct {
EmailData
FirstName string
LastName string
Email string
Organization string
Domain string
}
// VerifyEmailData is used to complete the verify email template
type VerifyEmailData struct {
EmailData
FullName string
VerifyURL string
}
// SubscriberEmailData is used to complete the subscriber email template
type SubscriberEmailData struct {
EmailData
VerifySubscriberURL string
OrgName string
}
// InviteData is used to complete the invite email template
type InviteData struct {
EmailData
Email string
InviterName string
OrgName string
Role string
InviteURL string
}
// Invite data is used to hold temporary constructor information to compose the invite email
type Invite struct {
Token string
OrgName string
Recipient string
Requestor string
Role string
}
// ResetRequestData is used to complete the password reset request email template
type ResetRequestData struct {
EmailData
ResetURL string
}
// ResetSuccessData is used to complete the password success request email template
type ResetSuccessData struct {
EmailData
}
// Email subject lines
const (
WelcomeRE = "Welcome to Datum!"
VerifyEmailRE = "Please verify your email address to login to Datum"
InviteRE = "Join Your Teammate %s on Datum!"
PasswordResetRequestRE = "Datum Password Reset - Action Required"
PasswordResetSuccessRE = "Datum Password Reset Confirmation"
InviteBeenAccepted = "You've been added to an Organization on Datum"
Subscribed = "You've been subscribed to %s"
)
// WelcomeEmail creates a welcome email for a new user
func WelcomeEmail(data WelcomeData) (message *mail.SGMailV3, err error) {
var text, html string
data.FirstName = cases.Title(language.AmericanEnglish, cases.NoLower).String(data.FirstName)
if text, html, err = Render("welcome", data); err != nil {
return nil, err
}
data.Subject = WelcomeRE
return data.Build(text, html)
}
// SubscribeEmail creates a subscribe email for a new subscriber
func SubscribeEmail(data SubscriberEmailData) (message *mail.SGMailV3, err error) {
var text, html string
if text, html, err = Render("subscribe", data); err != nil {
return nil, err
}
data.Subject = fmt.Sprintf(Subscribed, data.OrgName)
return data.Build(text, html)
}
// VerifyEmail creates an email to verify a user's email address
func VerifyEmail(data VerifyEmailData) (message *mail.SGMailV3, err error) {
var text, html string
// we might consider using shortname or alias instead of this but today the email sends whatever is stored exactly in the db
data.FullName = cases.Title(language.AmericanEnglish, cases.NoLower).String(data.FullName)
if text, html, err = Render("verify_email", data); err != nil {
return nil, err
}
data.Subject = VerifyEmailRE
return data.Build(text, html)
}
// InviteEmail creates an email to invite a user to join an organization
func InviteEmail(data InviteData) (message *mail.SGMailV3, err error) {
var text, html string
if text, html, err = Render("invite", data); err != nil {
return nil, err
}
data.Subject = fmt.Sprintf(InviteRE, data.InviterName)
return data.Build(text, html)
}
// InviteAccepted creates an email to invite a user to join an organization
func InviteAccepted(data InviteData) (message *mail.SGMailV3, err error) {
var text, html string
if text, html, err = Render("invite_joined", data); err != nil {
return nil, err
}
data.Subject = InviteBeenAccepted
return data.Build(text, html)
}
// PasswordResetRequestEmail creates a password reset email
func PasswordResetRequestEmail(data ResetRequestData) (message *mail.SGMailV3, err error) {
var text, html string
if text, html, err = Render("password_reset_request", data); err != nil {
return nil, err
}
data.Subject = PasswordResetRequestRE
return data.Build(text, html)
}
// PasswordResetSuccessEmail creates an email to send to users once their password has been reset
func PasswordResetSuccessEmail(data ResetSuccessData) (message *mail.SGMailV3, err error) {
var text, html string
if text, html, err = Render("password_reset_success", data); err != nil {
return nil, err
}
data.Subject = PasswordResetSuccessRE
return data.Build(text, html)
}