package sender import ( "bytes" "html/template" "log" "github.com/pkg/errors" "gorm.io/gorm/clause" "rsgit.ru/rsmon/rsmon/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(`
Пользователь {{.Inviter.Name}} {{.Inviter.Email}} {{ if not .InviteeID }}пригласил вас получить{{else}}предоставил вам{{end}} доступ к аккаунту rsmon.ru {{.Account.Name}}
{{ if not .InviteeID }}Чтобы зарегистрироваться, перейдите по ссылке: https://rsmon.ru/by-invite/{{.Token}}
{{end}} `)) } // 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 }