Skip to content

Commit 41ddcd0

Browse files
committed
Fixed user session initialization on login with reverse proxy header
Gitea does not initialize user session after login using reverse proxy header. This fixes it. Fixes: 45ea55d Author-Change-Id: IB#1104925
1 parent 0149559 commit 41ddcd0

File tree

1 file changed

+16
-17
lines changed

1 file changed

+16
-17
lines changed

modules/auth/sso/reverseproxy.go

Lines changed: 16 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -63,22 +63,32 @@ func (r *ReverseProxy) IsEnabled() bool {
6363
// user object is returned (populated with username or email found in header).
6464
// Returns nil if header is empty.
6565
func (r *ReverseProxy) VerifyAuthData(ctx *macaron.Context, sess session.Store) *models.User {
66+
67+
// Just return user if session is estabilshed already.
68+
user := SessionUser(sess)
69+
if user != nil {
70+
return user
71+
}
72+
73+
// If no session established, get username from header.
6674
username := r.getUserName(ctx)
6775
if len(username) == 0 {
6876
return nil
6977
}
7078

71-
var user *models.User
7279
var err error
7380

7481
if r.isAutoRegisterAllowed() {
7582
// Use auto registration from reverse proxy if ENABLE_REVERSE_PROXY_AUTO_REGISTRATION enabled.
7683
if user, err = models.GetUserByName(username); err != nil {
7784
if models.IsErrUserNotExist(err) && r.isAutoRegisterAllowed() {
78-
return r.newUser(ctx)
85+
if user = r.newUser(ctx); user == nil {
86+
return nil
87+
}
88+
} else {
89+
log.Error("GetUserByName: %v", err)
90+
return nil
7991
}
80-
log.Error("GetUserByName: %v", err)
81-
return nil
8292
}
8393
} else {
8494
// Use auto registration from other backends if ENABLE_REVERSE_PROXY_AUTO_REGISTRATION not enabled.
@@ -90,20 +100,9 @@ func (r *ReverseProxy) VerifyAuthData(ctx *macaron.Context, sess session.Store)
90100
}
91101
}
92102

93-
// If the user does not have a locale set, we save the current one.
94-
if len(user.Language) == 0 {
95-
user.Language = ctx.Locale.Language()
96-
if err = models.UpdateUserCols(user, "language"); err != nil {
97-
log.Error(fmt.Sprintf("VerifyAuthData: error updating user language [user: %d, locale: %s]", user.ID, user.Language))
98-
}
99-
}
100-
101-
ctx.SetCookie("lang", user.Language, nil, setting.AppSubURL, setting.SessionConfig.Domain, setting.SessionConfig.Secure, true)
102-
103-
// Clear whatever CSRF has right now, force to generate a new one.
104-
ctx.SetCookie(setting.CSRFCookieName, "", -1, setting.AppSubURL, setting.SessionConfig.Domain, setting.SessionConfig.Secure, true)
103+
// Initialize new session.
104+
handleSignIn(ctx, sess, user)
105105

106-
// Register last login.
107106
user.SetLastLogin()
108107
if err = models.UpdateUserCols(user, false, "last_login_unix"); err != nil {
109108
log.Error(fmt.Sprintf("VerifyAuthData: error updating user last login time [user: %d]", user.ID))

0 commit comments

Comments
 (0)