···120120 }
121121 }
122122123123- // Redirect to dashboard if user tries to visit any non-login page.
123123+ // 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() != "/" {
125125- ctx.Redirect(setting.AppSubURL + "/")
125125+ ctx.RedirectToFirst(ctx.FormString("redirect_to"))
126126 return
127127 }
128128
+19
services/mailer/mail_team_invite.go
···66import (
77 "bytes"
88 "context"
99+ "fmt"
1010+ "net/url"
9111012 org_model "code.gitea.io/gitea/models/organization"
1113 user_model "code.gitea.io/gitea/models/user"
···33353436 locale := translation.NewLocale(inviter.Language)
35373838+ // check if a user with this email already exists
3939+ user, err := user_model.GetUserByEmail(ctx, invite.Email)
4040+ if err != nil && !user_model.IsErrUserNotExist(err) {
4141+ return err
4242+ } else if user != nil && user.ProhibitLogin {
4343+ return fmt.Errorf("login is prohibited for the invited user")
4444+ }
4545+4646+ inviteRedirect := url.QueryEscape(fmt.Sprintf("/org/invite/%s", invite.Token))
4747+ inviteURL := fmt.Sprintf("%suser/sign_up?redirect_to=%s", setting.AppURL, inviteRedirect)
4848+4949+ if err == nil && user != nil {
5050+ // user account exists
5151+ inviteURL = fmt.Sprintf("%suser/login?redirect_to=%s", setting.AppURL, inviteRedirect)
5252+ }
5353+3654 subject := locale.Tr("mail.team_invite.subject", inviter.DisplayName(), org.DisplayName())
3755 mailMeta := map[string]any{
3856 "Inviter": inviter,
···4058 "Team": team,
4159 "Invite": invite,
4260 "Subject": subject,
6161+ "InviteURL": inviteURL,
4362 // helper
4463 "locale": locale,
4564 "Str2html": templates.Str2html,