Некоторые проверки не удались
CI / test (push) Successful in 2m5s
Docker / Build and publish worker image (push) Failing after 31s
86 строки
2.4 KiB
Go
86 строки
2.4 KiB
Go
package sender
|
|
|
|
import (
|
|
"bytes"
|
|
"html/template"
|
|
"log"
|
|
|
|
"github.com/pkg/errors"
|
|
"gorm.io/gorm/clause"
|
|
|
|
"rocketgit.ru/rsmon/worker/app/models"
|
|
)
|
|
|
|
var (
|
|
inviteSubject *template.Template
|
|
inviteMessage *template.Template
|
|
inviteHTMLMessage *template.Template
|
|
)
|
|
|
|
func init() {
|
|
inviteSubject = template.Must(template.New("invite_subject").Parse(`Доступ к мониторингу rsmon.ru`))
|
|
|
|
inviteMessage = template.Must(template.New("invite_message").Parse(`
|
|
Пользователь {{.Inviter.Name}} {{.Inviter.Email}}
|
|
{{ if not .InviteeID }}пригласил вас получить{{else}}предоставил вам{{end}} доступ к аккаунту rsmon.ru {{.Account.Name}}
|
|
|
|
{{ if not .InviteeID }}
|
|
Чтобы зарегистрироваться, перейдите по ссылке: https://rsmon.ru/by-invite/{{.Token}}
|
|
{{end}}
|
|
|
|
https://rsmon.ru
|
|
`))
|
|
|
|
inviteHTMLMessage = template.Must(template.New("invite_message").Parse(`
|
|
<p>Пользователь {{.Inviter.Name}} {{.Inviter.Email}}
|
|
{{ if not .InviteeID }}пригласил вас получить{{else}}предоставил вам{{end}}
|
|
доступ к аккаунту rsmon.ru <strong>{{.Account.Name}}</strong></p>
|
|
|
|
{{ if not .InviteeID }}
|
|
<p>Чтобы зарегистрироваться, перейдите по ссылке:
|
|
<a href="https://rsmon.ru/by-invite/{{.Token}}">https://rsmon.ru/by-invite/{{.Token}}</a></p>
|
|
{{end}}
|
|
|
|
<p><a href="https://rsmon.ru">https://rsmon.ru</a></p>
|
|
`))
|
|
}
|
|
|
|
// Invite provides functionality.
|
|
func Invite(i *models.Invite) error {
|
|
// us := models.User{}
|
|
var err error
|
|
var subject, message, htmlMessage bytes.Buffer
|
|
err = inviteSubject.Execute(&subject, i)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
err = inviteMessage.Execute(&message, i)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
err = inviteHTMLMessage.Execute(&htmlMessage, i)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
err = SendEmail(i.Email, subject.String(), message.String(), htmlMessage.String())
|
|
if err != nil {
|
|
log.Println("email send fail", err)
|
|
i.State = "FAIL"
|
|
serr := models.DB().Save(&i).Error
|
|
if serr != nil {
|
|
return errors.Wrap(err, "failed to save invite, and failed to save to DB")
|
|
}
|
|
return errors.Wrap(err, "failed to save invite")
|
|
}
|
|
if i.State != "OK" {
|
|
i.State = "SENT"
|
|
}
|
|
|
|
err = models.DB().Omit(clause.Associations).Save(&i).Error
|
|
if err != nil {
|
|
return errors.Wrap(err, "failed to add accesses to invited user")
|
|
}
|
|
return nil
|
|
}
|