| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- package notifications
- import (
- "bytes"
- "encoding/hex"
- "errors"
- "html/template"
- "path/filepath"
- "github.com/Unknwon/com"
- "github.com/grafana/grafana/pkg/bus"
- m "github.com/grafana/grafana/pkg/models"
- "github.com/grafana/grafana/pkg/setting"
- "github.com/grafana/grafana/pkg/util"
- )
- var mailTemplates *template.Template
- var tmplResetPassword = "reset_password.html"
- func Init() error {
- bus.AddHandler("email", sendResetPasswordEmail)
- mailTemplates = template.New("name")
- mailTemplates.Funcs(template.FuncMap{
- "Subject": subjectTemplateFunc,
- })
- templatePattern := filepath.Join(setting.StaticRootPath, "emails/*.html")
- _, err := mailTemplates.ParseGlob(templatePattern)
- if err != nil {
- return err
- }
- if !util.IsEmail(setting.Smtp.FromAddress) {
- return errors.New("Invalid email address for smpt from_adress config")
- }
- if setting.EmailCodeValidMinutes == 0 {
- setting.EmailCodeValidMinutes = 120
- }
- return nil
- }
- var dispatchMail = func(cmd *m.SendEmailCommand) error {
- return bus.Dispatch(cmd)
- }
- func subjectTemplateFunc(obj map[string]interface{}, value string) string {
- obj["value"] = value
- return ""
- }
- func sendResetPasswordEmail(cmd *m.SendResetPasswordEmailCommand) error {
- var buffer bytes.Buffer
- var data = getMailTmplData(cmd.User)
- code := CreateUserActiveCode(cmd.User, nil)
- data["Code"] = code
- mailTemplates.ExecuteTemplate(&buffer, tmplResetPassword, data)
- dispatchMail(&m.SendEmailCommand{
- To: []string{cmd.User.Email},
- From: setting.Smtp.FromAddress,
- Subject: data["Subject"].(map[string]interface{})["value"].(string),
- Body: buffer.String(),
- })
- return nil
- }
- func CreateUserActiveCode(u *m.User, startInf interface{}) string {
- minutes := setting.EmailCodeValidMinutes
- data := com.ToStr(u.Id) + u.Email + u.Login + u.Password + u.Rands
- code := CreateTimeLimitCode(data, minutes, startInf)
- // add tail hex username
- code += hex.EncodeToString([]byte(u.Login))
- return code
- }
- // // verify active code when active account
- // func VerifyUserActiveCode(code string) (user *User) {
- // minutes := setting.Service.ActiveCodeLives
- //
- // if user = getVerifyUser(code); user != nil {
- // // time limit code
- // prefix := code[:base.TimeLimitCodeLength]
- // data := com.ToStr(user.Id) + user.Email + user.LowerName + user.Passwd + user.Rands
- //
- // if base.VerifyTimeLimitCode(data, minutes, prefix) {
- // return user
- // }
- // }
- // return nil
- // }
- //
- // // verify active code when active account
- // func VerifyUserActiveCode(code string) (user *User) {
- // minutes := setting.Service.ActiveCodeLives
- //
- // if user = getVerifyUser(code); user != nil {
- // // time limit code
- // prefix := code[:base.TimeLimitCodeLength]
- // data := com.ToStr(user.Id) + user.Email + user.LowerName + user.Passwd + user.Rands
- //
- // if base.VerifyTimeLimitCode(data, minutes, prefix) {
- // return user
- // }
- // }
- // return nil
- // }
|