the language of password reset email set to client language if user language is not set

This commit is contained in:
MaysWind
2023-08-27 22:29:54 +08:00
parent c1d90485a1
commit c0bfe429ee
4 changed files with 20 additions and 4 deletions
+1 -1
View File
@@ -53,7 +53,7 @@ func (a *ForgetPasswordsApi) UserForgetPasswordRequestHandler(c *core.Context) (
return nil, errs.ErrTokenGenerating return nil, errs.ErrTokenGenerating
} }
err = a.forgetPasswords.SendPasswordResetEmail(user, token) err = a.forgetPasswords.SendPasswordResetEmail(user, token, c.GetClientLocale())
if err != nil { if err != nil {
log.WarnfWithRequestId(c, "[forget_passwords.UserForgetPasswordRequestHandler] cannot send email to \"%s\", because %s", user.Email, err.Error()) log.WarnfWithRequestId(c, "[forget_passwords.UserForgetPasswordRequestHandler] cannot send email to \"%s\", because %s", user.Email, err.Error())
+1 -1
View File
@@ -184,7 +184,7 @@ func (l *UserDataCli) SendPasswordResetMail(c *cli.Context, username string) err
return err return err
} }
err = l.forgetPasswords.SendPasswordResetEmail(user, token) err = l.forgetPasswords.SendPasswordResetEmail(user, token, "")
if err != nil { if err != nil {
log.BootWarnf("[user_data.SendPasswordResetMail] cannot send email to \"%s\", because %s", user.Email, err.Error()) log.BootWarnf("[user_data.SendPasswordResetMail] cannot send email to \"%s\", because %s", user.Email, err.Error())
+10
View File
@@ -13,6 +13,9 @@ const textualTokenFieldKey = "TOKEN_STRING"
const tokenClaimsFieldKey = "TOKEN_CLAIMS" const tokenClaimsFieldKey = "TOKEN_CLAIMS"
const responseErrorFieldKey = "RESPONSE_ERROR" const responseErrorFieldKey = "RESPONSE_ERROR"
// AcceptLanguageHeaderName represents the header name of accept language
const AcceptLanguageHeaderName = "Accept-Language"
// ClientTimezoneOffsetHeaderName represents the header name of client timezone offset // ClientTimezoneOffsetHeaderName represents the header name of client timezone offset
const ClientTimezoneOffsetHeaderName = "X-Timezone-Offset" const ClientTimezoneOffsetHeaderName = "X-Timezone-Offset"
@@ -81,6 +84,13 @@ func (c *Context) GetCurrentUid() int64 {
return claims.Uid return claims.Uid
} }
// GetClientLocale returns the client locale name
func (c *Context) GetClientLocale() string {
value := c.GetHeader(AcceptLanguageHeaderName)
return value
}
// GetClientTimezoneOffset returns the client timezone offset // GetClientTimezoneOffset returns the client timezone offset
func (c *Context) GetClientTimezoneOffset() (int16, error) { func (c *Context) GetClientTimezoneOffset() (int16, error) {
value := c.GetHeader(ClientTimezoneOffsetHeaderName) value := c.GetHeader(ClientTimezoneOffsetHeaderName)
+8 -2
View File
@@ -34,12 +34,18 @@ var (
) )
// SendPasswordResetEmail sends password reset email according to specified parameters // SendPasswordResetEmail sends password reset email according to specified parameters
func (s *ForgetPasswordService) SendPasswordResetEmail(user *models.User, passwordResetToken string) error { func (s *ForgetPasswordService) SendPasswordResetEmail(user *models.User, passwordResetToken string, backupLocale string) error {
if !s.CurrentConfig().EnableSmtp { if !s.CurrentConfig().EnableSmtp {
return errs.ErrSmtpServerNotEnabled return errs.ErrSmtpServerNotEnabled
} }
localeTextItems := locales.GetLocaleTextItems(user.Language) locale := user.Language
if locale == "" {
locale = backupLocale
}
localeTextItems := locales.GetLocaleTextItems(locale)
forgetPasswordTextItems := localeTextItems.ForgetPasswordMailTextItems forgetPasswordTextItems := localeTextItems.ForgetPasswordMailTextItems
expireTimeInMinutes := s.CurrentConfig().ForgetPasswordTokenExpiredTimeDuration.Minutes() expireTimeInMinutes := s.CurrentConfig().ForgetPasswordTokenExpiredTimeDuration.Minutes()