diff --git a/pkg/api/forget_passwords.go b/pkg/api/forget_passwords.go index e6df9b31..4a51f405 100644 --- a/pkg/api/forget_passwords.go +++ b/pkg/api/forget_passwords.go @@ -53,7 +53,7 @@ func (a *ForgetPasswordsApi) UserForgetPasswordRequestHandler(c *core.Context) ( return nil, errs.ErrTokenGenerating } - err = a.forgetPasswords.SendPasswordResetEmail(user, token) + err = a.forgetPasswords.SendPasswordResetEmail(user, token, c.GetClientLocale()) if err != nil { log.WarnfWithRequestId(c, "[forget_passwords.UserForgetPasswordRequestHandler] cannot send email to \"%s\", because %s", user.Email, err.Error()) diff --git a/pkg/cli/user_data.go b/pkg/cli/user_data.go index de63678f..6f5ff3e5 100644 --- a/pkg/cli/user_data.go +++ b/pkg/cli/user_data.go @@ -184,7 +184,7 @@ func (l *UserDataCli) SendPasswordResetMail(c *cli.Context, username string) err return err } - err = l.forgetPasswords.SendPasswordResetEmail(user, token) + err = l.forgetPasswords.SendPasswordResetEmail(user, token, "") if err != nil { log.BootWarnf("[user_data.SendPasswordResetMail] cannot send email to \"%s\", because %s", user.Email, err.Error()) diff --git a/pkg/core/context.go b/pkg/core/context.go index d05f5233..4033251e 100644 --- a/pkg/core/context.go +++ b/pkg/core/context.go @@ -13,6 +13,9 @@ const textualTokenFieldKey = "TOKEN_STRING" const tokenClaimsFieldKey = "TOKEN_CLAIMS" 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 const ClientTimezoneOffsetHeaderName = "X-Timezone-Offset" @@ -81,6 +84,13 @@ func (c *Context) GetCurrentUid() int64 { 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 func (c *Context) GetClientTimezoneOffset() (int16, error) { value := c.GetHeader(ClientTimezoneOffsetHeaderName) diff --git a/pkg/services/forget_passwords.go b/pkg/services/forget_passwords.go index 799c9486..a1d7ea61 100644 --- a/pkg/services/forget_passwords.go +++ b/pkg/services/forget_passwords.go @@ -34,12 +34,18 @@ var ( ) // 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 { return errs.ErrSmtpServerNotEnabled } - localeTextItems := locales.GetLocaleTextItems(user.Language) + locale := user.Language + + if locale == "" { + locale = backupLocale + } + + localeTextItems := locales.GetLocaleTextItems(locale) forgetPasswordTextItems := localeTextItems.ForgetPasswordMailTextItems expireTimeInMinutes := s.CurrentConfig().ForgetPasswordTokenExpiredTimeDuration.Minutes()