Skip to content

Commit c0ab707

Browse files
jackHay22kdumontnujtran
authored
Update team invitation email link (#26550)
Co-authored-by: Kyle D <[email protected]> Co-authored-by: Jonathan Tran <[email protected]>
1 parent 3cae50e commit c0ab707

File tree

5 files changed

+346
-10
lines changed

5 files changed

+346
-10
lines changed

routers/web/auth/auth.go

+11
Original file line numberDiff line numberDiff line change
@@ -398,6 +398,11 @@ func SignUp(ctx *context.Context) {
398398
// Show Disabled Registration message if DisableRegistration or AllowOnlyExternalRegistration options are true
399399
ctx.Data["DisableRegistration"] = setting.Service.DisableRegistration || setting.Service.AllowOnlyExternalRegistration
400400

401+
redirectTo := ctx.FormString("redirect_to")
402+
if len(redirectTo) > 0 {
403+
middleware.SetRedirectToCookie(ctx.Resp, redirectTo)
404+
}
405+
401406
ctx.HTML(http.StatusOK, tplSignUp)
402407
}
403408

@@ -729,6 +734,12 @@ func handleAccountActivation(ctx *context.Context, user *user_model.User) {
729734
}
730735

731736
ctx.Flash.Success(ctx.Tr("auth.account_activated"))
737+
if redirectTo := ctx.GetSiteCookie("redirect_to"); len(redirectTo) > 0 {
738+
middleware.DeleteRedirectToCookie(ctx.Resp)
739+
ctx.RedirectToFirst(redirectTo)
740+
return
741+
}
742+
732743
ctx.Redirect(setting.AppSubURL + "/")
733744
}
734745

services/auth/middleware.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -120,9 +120,9 @@ func VerifyAuthWithOptions(options *VerifyOptions) func(ctx *context.Context) {
120120
}
121121
}
122122

123-
// Redirect to dashboard if user tries to visit any non-login page.
123+
// Redirect to dashboard (or alternate location) if user tries to visit any non-login page.
124124
if options.SignOutRequired && ctx.IsSigned && ctx.Req.URL.RequestURI() != "/" {
125-
ctx.Redirect(setting.AppSubURL + "/")
125+
ctx.RedirectToFirst(ctx.FormString("redirect_to"))
126126
return
127127
}
128128

services/mailer/mail_team_invite.go

+19
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ package mailer
66
import (
77
"bytes"
88
"context"
9+
"fmt"
10+
"net/url"
911

1012
org_model "code.gitea.io/gitea/models/organization"
1113
user_model "code.gitea.io/gitea/models/user"
@@ -33,13 +35,30 @@ func MailTeamInvite(ctx context.Context, inviter *user_model.User, team *org_mod
3335

3436
locale := translation.NewLocale(inviter.Language)
3537

38+
// check if a user with this email already exists
39+
user, err := user_model.GetUserByEmail(ctx, invite.Email)
40+
if err != nil && !user_model.IsErrUserNotExist(err) {
41+
return err
42+
} else if user != nil && user.ProhibitLogin {
43+
return fmt.Errorf("login is prohibited for the invited user")
44+
}
45+
46+
inviteRedirect := url.QueryEscape(fmt.Sprintf("/org/invite/%s", invite.Token))
47+
inviteURL := fmt.Sprintf("%suser/sign_up?redirect_to=%s", setting.AppURL, inviteRedirect)
48+
49+
if err == nil && user != nil {
50+
// user account exists
51+
inviteURL = fmt.Sprintf("%suser/login?redirect_to=%s", setting.AppURL, inviteRedirect)
52+
}
53+
3654
subject := locale.Tr("mail.team_invite.subject", inviter.DisplayName(), org.DisplayName())
3755
mailMeta := map[string]any{
3856
"Inviter": inviter,
3957
"Organization": org,
4058
"Team": team,
4159
"Invite": invite,
4260
"Subject": subject,
61+
"InviteURL": inviteURL,
4362
// helper
4463
"locale": locale,
4564
"Str2html": templates.Str2html,

templates/mail/team_invite.tmpl

+1-2
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,9 @@
44
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
55
<meta name="format-detection" content="telephone=no,date=no,address=no,email=no,url=no">
66
</head>
7-
{{$invite_url := printf "%sorg/invite/%s" AppUrl (QueryEscape .Invite.Token)}}
87
<body>
98
<p>{{.locale.Tr "mail.team_invite.text_1" (DotEscape .Inviter.DisplayName) (DotEscape .Team.Name) (DotEscape .Organization.DisplayName) | Str2html}}</p>
10-
<p>{{.locale.Tr "mail.team_invite.text_2"}}</p><p><a href="{{$invite_url}}">{{$invite_url}}</a></p>
9+
<p>{{.locale.Tr "mail.team_invite.text_2"}}</p><p><a href="{{.InviteURL}}">{{.InviteURL}}</a></p>
1110
<p>{{.locale.Tr "mail.link_not_working_do_paste"}}</p>
1211
<p>{{.locale.Tr "mail.team_invite.text_3" .Invite.Email}}</p>
1312

0 commit comments

Comments
 (0)