diff options
Diffstat (limited to 'api')
-rw-r--r-- | api/post.go | 6 | ||||
-rw-r--r-- | api/team.go | 10 | ||||
-rw-r--r-- | api/user.go | 51 | ||||
-rw-r--r-- | api/user_test.go | 45 |
4 files changed, 72 insertions, 40 deletions
diff --git a/api/post.go b/api/post.go index e5e18cb52..f17df8831 100644 --- a/api/post.go +++ b/api/post.go @@ -842,9 +842,7 @@ func sendNotificationEmail(c *Context, post *model.Post, user *model.User, chann "ChannelName": channelName, "Month": month, "Day": day, "Year": year} } - subjectPage := utils.NewHTMLTemplate("post_subject", user.Locale) - subjectPage.Props["Subject"] = userLocale(mailTemplate, mailParameters) - subjectPage.Props["SiteName"] = utils.Cfg.TeamSettings.SiteName + subject := fmt.Sprintf("[%v] %v", utils.Cfg.TeamSettings.SiteName, userLocale(mailTemplate, mailParameters)) bodyPage := utils.NewHTMLTemplate("post_body", user.Locale) bodyPage.Props["SiteURL"] = c.GetSiteURL() @@ -857,7 +855,7 @@ func sendNotificationEmail(c *Context, post *model.Post, user *model.User, chann "Hour": fmt.Sprintf("%02d", tm.Hour()), "Minute": fmt.Sprintf("%02d", tm.Minute()), "TimeZone": zone, "Month": month, "Day": day})) - if err := utils.SendMail(user.Email, html.UnescapeString(subjectPage.Render()), bodyPage.Render()); err != nil { + if err := utils.SendMail(user.Email, html.UnescapeString(subject), bodyPage.Render()); err != nil { l4g.Error(utils.T("api.post.send_notifications_and_forget.send.error"), user.Email, err) } } diff --git a/api/team.go b/api/team.go index b1a1ae3cd..e7db79ae2 100644 --- a/api/team.go +++ b/api/team.go @@ -69,8 +69,7 @@ func signupTeam(c *Context, w http.ResponseWriter, r *http.Request) { return } - subjectPage := utils.NewHTMLTemplate("signup_team_subject", c.Locale) - subjectPage.Props["Subject"] = c.T("api.templates.signup_team_subject", + subject := c.T("api.templates.signup_team_subject", map[string]interface{}{"SiteName": utils.ClientCfg["SiteName"]}) bodyPage := utils.NewHTMLTemplate("signup_team_body", c.Locale) @@ -89,7 +88,7 @@ func signupTeam(c *Context, w http.ResponseWriter, r *http.Request) { bodyPage.Props["Link"] = fmt.Sprintf("%s/signup_team_complete/?d=%s&h=%s", c.GetSiteURL(), url.QueryEscape(data), url.QueryEscape(hash)) - if err := utils.SendMail(email, subjectPage.Render(), bodyPage.Render()); err != nil { + if err := utils.SendMail(email, subject, bodyPage.Render()); err != nil { c.Err = err return } @@ -717,8 +716,7 @@ func InviteMembers(c *Context, team *model.Team, user *model.User, invites []str senderRole := c.T("api.team.invite_members.member") - subjectPage := utils.NewHTMLTemplate("invite_subject", c.Locale) - subjectPage.Props["Subject"] = c.T("api.templates.invite_subject", + subject := c.T("api.templates.invite_subject", map[string]interface{}{"SenderName": sender, "TeamDisplayName": team.DisplayName, "SiteName": utils.ClientCfg["SiteName"]}) bodyPage := utils.NewHTMLTemplate("invite_body", c.Locale) @@ -744,7 +742,7 @@ func InviteMembers(c *Context, team *model.Team, user *model.User, invites []str l4g.Info(utils.T("api.team.invite_members.sending.info"), invite, bodyPage.Props["Link"]) } - if err := utils.SendMail(invite, subjectPage.Render(), bodyPage.Render()); err != nil { + if err := utils.SendMail(invite, subject, bodyPage.Render()); err != nil { l4g.Error(utils.T("api.team.invite_members.send.error"), err) } } diff --git a/api/user.go b/api/user.go index 9c24609ce..2238aca8b 100644 --- a/api/user.go +++ b/api/user.go @@ -192,6 +192,7 @@ func createUser(c *Context, w http.ResponseWriter, r *http.Request) { } +// Check that a user's email domain matches a list of space-delimited domains as a string. func CheckUserDomain(user *model.User, domains string) bool { if len(domains) == 0 { return true @@ -358,8 +359,7 @@ func CreateOAuthUser(c *Context, w http.ResponseWriter, r *http.Request, service func sendWelcomeEmail(c *Context, userId string, email string, siteURL string, verified bool) { rawUrl, _ := url.Parse(siteURL) - subjectPage := utils.NewHTMLTemplate("welcome_subject", c.Locale) - subjectPage.Props["Subject"] = c.T("api.templates.welcome_subject", map[string]interface{}{"ServerURL": rawUrl.Host}) + subject := c.T("api.templates.welcome_subject", map[string]interface{}{"ServerURL": rawUrl.Host}) bodyPage := utils.NewHTMLTemplate("welcome_body", c.Locale) bodyPage.Props["SiteURL"] = siteURL @@ -380,7 +380,7 @@ func sendWelcomeEmail(c *Context, userId string, email string, siteURL string, v bodyPage.Props["VerifyUrl"] = link } - if err := utils.SendMail(email, subjectPage.Render(), bodyPage.Render()); err != nil { + if err := utils.SendMail(email, subject, bodyPage.Render()); err != nil { l4g.Error(utils.T("api.user.send_welcome_email_and_forget.failed.error"), err) } } @@ -427,8 +427,7 @@ func SendVerifyEmail(c *Context, userId, userEmail, siteURL string) { url, _ := url.Parse(siteURL) - subjectPage := utils.NewHTMLTemplate("verify_subject", c.Locale) - subjectPage.Props["Subject"] = c.T("api.templates.verify_subject", + subject := c.T("api.templates.verify_subject", map[string]interface{}{"SiteName": utils.ClientCfg["SiteName"]}) bodyPage := utils.NewHTMLTemplate("verify_body", c.Locale) @@ -438,7 +437,7 @@ func SendVerifyEmail(c *Context, userId, userEmail, siteURL string) { bodyPage.Props["VerifyUrl"] = link bodyPage.Props["Button"] = c.T("api.templates.verify_body.button") - if err := utils.SendMail(userEmail, subjectPage.Render(), bodyPage.Render()); err != nil { + if err := utils.SendMail(userEmail, subject, bodyPage.Render()); err != nil { l4g.Error(utils.T("api.user.send_verify_email_and_forget.failed.error"), err) } } @@ -1734,8 +1733,7 @@ func sendPasswordReset(c *Context, w http.ResponseWriter, r *http.Request) { link := fmt.Sprintf("%s/reset_password_complete?code=%s", c.GetSiteURL(), url.QueryEscape(recovery.Code)) - subjectPage := utils.NewHTMLTemplate("reset_subject", c.Locale) - subjectPage.Props["Subject"] = c.T("api.templates.reset_subject") + subject := c.T("api.templates.reset_subject") bodyPage := utils.NewHTMLTemplate("reset_body", c.Locale) bodyPage.Props["SiteURL"] = c.GetSiteURL() @@ -1744,7 +1742,7 @@ func sendPasswordReset(c *Context, w http.ResponseWriter, r *http.Request) { bodyPage.Props["ResetUrl"] = link bodyPage.Props["Button"] = c.T("api.templates.reset_body.button") - if err := utils.SendMail(email, subjectPage.Render(), bodyPage.Render()); err != nil { + if err := utils.SendMail(email, subject, bodyPage.Render()); err != nil { c.Err = model.NewLocAppError("sendPasswordReset", "api.user.send_password_reset.send.app_error", nil, "err="+err.Message) return } @@ -1830,8 +1828,7 @@ func ResetPassword(c *Context, userId, newPassword string) *model.AppError { } func sendPasswordChangeEmail(c *Context, email, siteURL, method string) { - subjectPage := utils.NewHTMLTemplate("password_change_subject", c.Locale) - subjectPage.Props["Subject"] = c.T("api.templates.password_change_subject", + subject := c.T("api.templates.password_change_subject", map[string]interface{}{"TeamDisplayName": utils.Cfg.TeamSettings.SiteName, "SiteName": utils.Cfg.TeamSettings.SiteName}) bodyPage := utils.NewHTMLTemplate("password_change_body", c.Locale) @@ -1840,16 +1837,14 @@ func sendPasswordChangeEmail(c *Context, email, siteURL, method string) { bodyPage.Html["Info"] = template.HTML(c.T("api.templates.password_change_body.info", map[string]interface{}{"TeamDisplayName": utils.Cfg.TeamSettings.SiteName, "TeamURL": siteURL, "Method": method})) - if err := utils.SendMail(email, subjectPage.Render(), bodyPage.Render()); err != nil { + if err := utils.SendMail(email, subject, bodyPage.Render()); err != nil { l4g.Error(utils.T("api.user.send_password_change_email_and_forget.error"), err) } } func sendEmailChangeEmail(c *Context, oldEmail, newEmail, siteURL string) { - subjectPage := utils.NewHTMLTemplate("email_change_subject", c.Locale) - subjectPage.Props["Subject"] = c.T("api.templates.email_change_subject", - map[string]interface{}{"TeamDisplayName": utils.Cfg.TeamSettings.SiteName}) - subjectPage.Props["SiteName"] = utils.Cfg.TeamSettings.SiteName + subject := fmt.Sprintf("[%v] %v", utils.Cfg.TeamSettings.SiteName, c.T("api.templates.email_change_subject", + map[string]interface{}{"TeamDisplayName": utils.Cfg.TeamSettings.SiteName})) bodyPage := utils.NewHTMLTemplate("email_change_body", c.Locale) bodyPage.Props["SiteURL"] = siteURL @@ -1857,7 +1852,7 @@ func sendEmailChangeEmail(c *Context, oldEmail, newEmail, siteURL string) { bodyPage.Html["Info"] = template.HTML(c.T("api.templates.email_change_body.info", map[string]interface{}{"TeamDisplayName": utils.Cfg.TeamSettings.SiteName, "NewEmail": newEmail})) - if err := utils.SendMail(oldEmail, subjectPage.Render(), bodyPage.Render()); err != nil { + if err := utils.SendMail(oldEmail, subject, bodyPage.Render()); err != nil { l4g.Error(utils.T("api.user.send_email_change_email_and_forget.error"), err) } } @@ -1865,10 +1860,8 @@ func sendEmailChangeEmail(c *Context, oldEmail, newEmail, siteURL string) { func SendEmailChangeVerifyEmail(c *Context, userId, newUserEmail, siteURL string) { link := fmt.Sprintf("%s/do_verify_email?uid=%s&hid=%s&email=%s", siteURL, userId, model.HashPassword(userId+utils.Cfg.EmailSettings.InviteSalt), url.QueryEscape(newUserEmail)) - subjectPage := utils.NewHTMLTemplate("email_change_verify_subject", c.Locale) - subjectPage.Props["Subject"] = c.T("api.templates.email_change_verify_subject", - map[string]interface{}{"TeamDisplayName": utils.Cfg.TeamSettings.SiteName}) - subjectPage.Props["SiteName"] = utils.Cfg.TeamSettings.SiteName + subject := fmt.Sprintf("[%v] %v", utils.Cfg.TeamSettings.SiteName, c.T("api.templates.email_change_verify_subject", + map[string]interface{}{"TeamDisplayName": utils.Cfg.TeamSettings.SiteName})) bodyPage := utils.NewHTMLTemplate("email_change_verify_body", c.Locale) bodyPage.Props["SiteURL"] = siteURL @@ -1878,16 +1871,14 @@ func SendEmailChangeVerifyEmail(c *Context, userId, newUserEmail, siteURL string bodyPage.Props["VerifyUrl"] = link bodyPage.Props["VerifyButton"] = c.T("api.templates.email_change_verify_body.button") - if err := utils.SendMail(newUserEmail, subjectPage.Render(), bodyPage.Render()); err != nil { + if err := utils.SendMail(newUserEmail, subject, bodyPage.Render()); err != nil { l4g.Error(utils.T("api.user.send_email_change_verify_email_and_forget.error"), err) } } func sendEmailChangeUsername(c *Context, oldUsername, newUsername, email, siteURL string) { - subjectPage := utils.NewHTMLTemplate("username_change_subject", c.Locale) - subjectPage.Props["Subject"] = c.T("api.templates.username_change_subject", - map[string]interface{}{"TeamDisplayName": utils.Cfg.TeamSettings.SiteName}) - subjectPage.Props["SiteName"] = utils.Cfg.TeamSettings.SiteName + subject := fmt.Sprintf("[%v] %v", utils.Cfg.TeamSettings.SiteName, c.T("api.templates.username_change_subject", + map[string]interface{}{"TeamDisplayName": utils.Cfg.TeamSettings.SiteName})) bodyPage := utils.NewHTMLTemplate("email_change_body", c.Locale) bodyPage.Props["SiteURL"] = siteURL @@ -1895,7 +1886,7 @@ func sendEmailChangeUsername(c *Context, oldUsername, newUsername, email, siteUR bodyPage.Html["Info"] = template.HTML(c.T("api.templates.username_change_body.info", map[string]interface{}{"TeamDisplayName": utils.Cfg.TeamSettings.SiteName, "NewUsername": newUsername})) - if err := utils.SendMail(email, subjectPage.Render(), bodyPage.Render()); err != nil { + if err := utils.SendMail(email, subject, bodyPage.Render()); err != nil { l4g.Error(utils.T("api.user.send_email_change_username_and_forget.error"), err) } @@ -1967,6 +1958,7 @@ func updateUserNotify(c *Context, w http.ResponseWriter, r *http.Request) { } } +// Check if the username is already used by another user. Return false if the username is invalid. func IsUsernameTaken(name string) bool { if !model.IsValidUsername(name) { @@ -2239,8 +2231,7 @@ func ldapToEmail(c *Context, w http.ResponseWriter, r *http.Request) { } func sendSignInChangeEmail(c *Context, email, siteURL, method string) { - subjectPage := utils.NewHTMLTemplate("signin_change_subject", c.Locale) - subjectPage.Props["Subject"] = c.T("api.templates.singin_change_email.subject", + subject := c.T("api.templates.singin_change_email.subject", map[string]interface{}{"SiteName": utils.ClientCfg["SiteName"]}) bodyPage := utils.NewHTMLTemplate("signin_change_body", c.Locale) @@ -2249,7 +2240,7 @@ func sendSignInChangeEmail(c *Context, email, siteURL, method string) { bodyPage.Html["Info"] = template.HTML(c.T("api.templates.singin_change_email.body.info", map[string]interface{}{"SiteName": utils.ClientCfg["SiteName"], "Method": method})) - if err := utils.SendMail(email, subjectPage.Render(), bodyPage.Render()); err != nil { + if err := utils.SendMail(email, subject, bodyPage.Render()); err != nil { l4g.Error(utils.T("api.user.send_sign_in_change_email_and_forget.error"), err) } } diff --git a/api/user_test.go b/api/user_test.go index 1ffb2140c..f91d71177 100644 --- a/api/user_test.go +++ b/api/user_test.go @@ -80,6 +80,51 @@ func TestCreateUser(t *testing.T) { } } +func TestCheckUserDomain(t *testing.T) { + th := Setup().InitBasic() + user := th.BasicUser + + cases := []struct { + domains string + matched bool + }{ + {"simulator.amazonses.com", true}, + {"gmail.com", false}, + {"", true}, + {"gmail.com simulator.amazonses.com", true}, + } + for _, c := range cases { + matched := CheckUserDomain(user, c.domains) + if matched != c.matched { + if c.matched { + t.Logf("'%v' should have matched '%v'", user.Email, c.domains) + } else { + t.Logf("'%v' should not have matched '%v'", user.Email, c.domains) + } + t.FailNow() + } + } +} + +func TestIsUsernameTaken(t *testing.T) { + th := Setup().InitBasic() + user := th.BasicUser + taken := IsUsernameTaken(user.Username) + + if !taken { + t.Logf("the username '%v' should be taken", user.Username) + t.FailNow() + } + + newUsername := "randomUsername" + taken = IsUsernameTaken(newUsername) + + if taken { + t.Logf("the username '%v' should not be taken", newUsername) + t.FailNow() + } +} + func TestLogin(t *testing.T) { th := Setup() Client := th.CreateClient() |