38 lines
1.2 KiB
Go
38 lines
1.2 KiB
Go
package mail
|
|
|
|
import (
|
|
"fmt"
|
|
"time"
|
|
)
|
|
|
|
// VerifyWindow is how long a verification or invitation link stays usable. It
|
|
// is stated in the email, so it lives beside the message rather than in the
|
|
// caller.
|
|
const VerifyWindow = 24 * time.Hour
|
|
|
|
// SendVerification asks someone to confirm the address they signed up with.
|
|
// The link is built from the Sender's PublicURL, because the address of the
|
|
// portal is a property of the deployment, not of the call site.
|
|
func (s Sender) SendVerification(to, token string) error {
|
|
return s.sendTemplate(to, "", "verification", struct {
|
|
Link string
|
|
TTLHours int
|
|
}{
|
|
Link: fmt.Sprintf("%s/verify?token=%s", s.PublicURL, token),
|
|
TTLHours: int(VerifyWindow.Hours()),
|
|
})
|
|
}
|
|
|
|
// SendInvite asks someone to join an existing account and set their own
|
|
// password. It names the account, because an unexpected invitation from a
|
|
// service you have never used is otherwise indistinguishable from spam.
|
|
func (s Sender) SendInvite(to, accountName, token string) error {
|
|
return s.sendTemplate(to, "", "invite", struct {
|
|
AccountName string
|
|
Link string
|
|
}{
|
|
AccountName: accountName,
|
|
Link: fmt.Sprintf("%s/accept-invite?token=%s", s.PublicURL, token),
|
|
})
|
|
}
|