feat: publish standalone worker
Separate worker packaging and service lifecycle from the control plane.
Этот коммит содержится в:
85
internal/sender/invite.go
Обычный файл
85
internal/sender/invite.go
Обычный файл
@@ -0,0 +1,85 @@
|
||||
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(`
|
||||
<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
|
||||
}
|
||||
Ссылка в новой задаче
Block a user