diff --git a/api/templates/welcome_body.html b/api/templates/welcome_body.html index 94b597cbb3..b7cb3704d1 100644 --- a/api/templates/welcome_body.html +++ b/api/templates/welcome_body.html @@ -15,6 +15,17 @@ + {{if .Props.VerifyUrl }} + + + + {{end}}
+

You've been invited

+

Please verify your email address by clicking below.

+

+ Verify Email +

+

You can sign-in to your new team from the web address:

diff --git a/api/user.go b/api/user.go index faf828cf99..146ede0154 100644 --- a/api/user.go +++ b/api/user.go @@ -198,13 +198,12 @@ func CreateUser(c *Context, team *model.Team, user *model.User) *model.User { l4g.Error("Encountered an issue joining default channels user_id=%s, team_id=%s, err=%v", ruser.Id, ruser.TeamId, err) } - fireAndForgetWelcomeEmail(ruser.Email, team.DisplayName, c.GetSiteURL(), c.GetTeamURLFromTeam(team)) + fireAndForgetWelcomeEmail(result.Data.(*model.User).Id, ruser.Email, team.Name, team.DisplayName, c.GetSiteURL(), c.GetTeamURLFromTeam(team), user.EmailVerified) + if user.EmailVerified { if cresult := <-Srv.Store.User().VerifyEmail(ruser.Id); cresult.Err != nil { l4g.Error("Failed to set email verified err=%v", cresult.Err) } - } else { - FireAndForgetVerifyEmail(result.Data.(*model.User).Id, ruser.Email, team.Name, team.DisplayName, c.GetSiteURL(), c.GetTeamURLFromTeam(team)) } ruser.Sanitize(map[string]bool{}) @@ -218,7 +217,7 @@ func CreateUser(c *Context, team *model.Team, user *model.User) *model.User { } } -func fireAndForgetWelcomeEmail(email, teamDisplayName, siteURL, teamURL string) { +func fireAndForgetWelcomeEmail(userId, email, teamName, teamDisplayName, siteURL, teamURL string, verified bool) { go func() { subjectPage := NewServerTemplatePage("welcome_subject") @@ -227,10 +226,14 @@ func fireAndForgetWelcomeEmail(email, teamDisplayName, siteURL, teamURL string) bodyPage.Props["SiteURL"] = siteURL bodyPage.Props["TeamURL"] = teamURL + if !verified { + link := fmt.Sprintf("%s/verify_email?uid=%s&hid=%s&teamname=%s&email=%s", siteURL, userId, model.HashPassword(userId), teamName, email) + bodyPage.Props["VerifyUrl"] = link + } + if err := utils.SendMail(email, subjectPage.Render(), bodyPage.Render()); err != nil { l4g.Error("Failed to send welcome email successfully err=%v", err) } - }() } diff --git a/docker/1.1/Dockerfile b/docker/1.1/Dockerfile index 855dd43758..92bac6a047 100644 --- a/docker/1.1/Dockerfile +++ b/docker/1.1/Dockerfile @@ -34,7 +34,7 @@ VOLUME /var/lib/mysql WORKDIR /mattermost # Copy over files -ADD https://github.com/mattermost/platform/releases/download/v1.1.0-rc2/mattermost.tar.gz / +ADD https://github.com/mattermost/platform/releases/download/v1.1.0/mattermost.tar.gz / RUN tar -zxvf /mattermost.tar.gz --strip-components=1 && rm /mattermost.tar.gz ADD config_docker.json / ADD docker-entry.sh / diff --git a/web/react/components/rhs_root_post.jsx b/web/react/components/rhs_root_post.jsx index c44844f347..442d3483ef 100644 --- a/web/react/components/rhs_root_post.jsx +++ b/web/react/components/rhs_root_post.jsx @@ -117,20 +117,51 @@ export default class RhsRootPost extends React.Component { ); } + let userProfile = ; + let botIndicator; + + if (post.props && post.props.from_webhook) { + if (post.props.override_username && global.window.config.EnablePostUsernameOverride === 'true') { + userProfile = ( + + ); + } + + botIndicator =
  • {'BOT'}
  • ; + } + + let src = '/api/v1/users/' + post.user_id + '/image?time=' + timestamp; + if (post.props && post.props.from_webhook && global.window.config.EnablePostIconOverride === 'true') { + if (post.props.override_icon_url) { + src = post.props.override_icon_url; + } + } + + const profilePic = ( +
    + +
    + ); + return (
    {channelName}
    - + {profilePic}
      -
    • +
    • {userProfile}
    • + {botIndicator}