@@ -22,6 +22,7 @@ import (
22
22
"code.gitea.io/gitea/modules/log"
23
23
"code.gitea.io/gitea/modules/password"
24
24
"code.gitea.io/gitea/modules/recaptcha"
25
+ "code.gitea.io/gitea/modules/session"
25
26
"code.gitea.io/gitea/modules/setting"
26
27
"code.gitea.io/gitea/modules/timeutil"
27
28
"code.gitea.io/gitea/modules/web"
@@ -90,6 +91,10 @@ func AutoSignIn(ctx *context.Context) (bool, error) {
90
91
91
92
isSucceed = true
92
93
94
+ if _ , err := session .RegenerateSession (ctx .Resp , ctx .Req ); err != nil {
95
+ return false , fmt .Errorf ("unable to RegenerateSession: Error: %w" , err )
96
+ }
97
+
93
98
// Set session IDs
94
99
if err := ctx .Session .Set ("uid" , u .ID ); err != nil {
95
100
return false , err
@@ -256,6 +261,11 @@ func SignInPost(ctx *context.Context) {
256
261
return
257
262
}
258
263
264
+ if _ , err := session .RegenerateSession (ctx .Resp , ctx .Req ); err != nil {
265
+ ctx .ServerError ("UserSignIn: Unable to set regenerate session" , err )
266
+ return
267
+ }
268
+
259
269
// User will need to use 2FA TOTP or U2F, save data
260
270
if err := ctx .Session .Set ("twofaUid" , u .ID ); err != nil {
261
271
ctx .ServerError ("UserSignIn: Unable to set twofaUid in session" , err )
@@ -419,6 +429,9 @@ func TwoFactorScratchPost(ctx *context.Context) {
419
429
}
420
430
421
431
handleSignInFull (ctx , u , remember , false )
432
+ if ctx .Written () {
433
+ return
434
+ }
422
435
ctx .Flash .Info (ctx .Tr ("auth.twofa_scratch_used" ))
423
436
ctx .Redirect (setting .AppSubURL + "/user/settings/security" )
424
437
return
@@ -526,6 +539,9 @@ func U2FSign(ctx *context.Context) {
526
539
}
527
540
}
528
541
redirect := handleSignInFull (ctx , user , remember , false )
542
+ if ctx .Written () {
543
+ return
544
+ }
529
545
if redirect == "" {
530
546
redirect = setting .AppSubURL + "/"
531
547
}
@@ -538,7 +554,11 @@ func U2FSign(ctx *context.Context) {
538
554
539
555
// This handles the final part of the sign-in process of the user.
540
556
func handleSignIn (ctx * context.Context , u * user_model.User , remember bool ) {
541
- handleSignInFull (ctx , u , remember , true )
557
+ redirect := handleSignInFull (ctx , u , remember , true )
558
+ if ctx .Written () {
559
+ return
560
+ }
561
+ ctx .Redirect (redirect )
542
562
}
543
563
544
564
func handleSignInFull (ctx * context.Context , u * user_model.User , remember , obeyRedirect bool ) string {
@@ -549,6 +569,12 @@ func handleSignInFull(ctx *context.Context, u *user_model.User, remember, obeyRe
549
569
setting .CookieRememberName , u .Name , days )
550
570
}
551
571
572
+ if _ , err := session .RegenerateSession (ctx .Resp , ctx .Req ); err != nil {
573
+ ctx .ServerError ("RegenerateSession" , err )
574
+ return setting .AppSubURL + "/"
575
+ }
576
+
577
+ // Delete the openid, 2fa and linkaccount data
552
578
_ = ctx .Session .Delete ("openid_verified_uri" )
553
579
_ = ctx .Session .Delete ("openid_signin_remember" )
554
580
_ = ctx .Session .Delete ("openid_determined_email" )
@@ -572,7 +598,7 @@ func handleSignInFull(ctx *context.Context, u *user_model.User, remember, obeyRe
572
598
if len (u .Language ) == 0 {
573
599
u .Language = ctx .Locale .Language ()
574
600
if err := user_model .UpdateUserCols (db .DefaultContext , u , "language" ); err != nil {
575
- log . Error ( fmt .Sprintf ("Error updating user language [user: %d, locale: %s]" , u .ID , u .Language ))
601
+ ctx . ServerError ( "UpdateUserCols Language" , fmt .Errorf ("Error updating user language [user: %d, locale: %s]" , u .ID , u .Language ))
576
602
return setting .AppSubURL + "/"
577
603
}
578
604
}
@@ -779,6 +805,11 @@ func getUserName(gothUser *goth.User) string {
779
805
}
780
806
781
807
func showLinkingLogin (ctx * context.Context , gothUser goth.User ) {
808
+ if _ , err := session .RegenerateSession (ctx .Resp , ctx .Req ); err != nil {
809
+ ctx .ServerError ("RegenerateSession" , err )
810
+ return
811
+ }
812
+
782
813
if err := ctx .Session .Set ("linkAccountGothUser" , gothUser ); err != nil {
783
814
log .Error ("Error setting linkAccountGothUser in session: %v" , err )
784
815
}
@@ -822,6 +853,12 @@ func handleOAuth2SignIn(ctx *context.Context, source *login.Source, u *user_mode
822
853
// If this user is enrolled in 2FA and this source doesn't override it,
823
854
// we can't sign the user in just yet. Instead, redirect them to the 2FA authentication page.
824
855
if ! needs2FA {
856
+ if _ , err := session .RegenerateSession (ctx .Resp , ctx .Req ); err != nil {
857
+ ctx .ServerError ("RegenerateSession" , err )
858
+ return
859
+ }
860
+
861
+ // Set session IDs
825
862
if err := ctx .Session .Set ("uid" , u .ID ); err != nil {
826
863
log .Error ("Error setting uid in session: %v" , err )
827
864
}
@@ -878,6 +915,11 @@ func handleOAuth2SignIn(ctx *context.Context, source *login.Source, u *user_mode
878
915
}
879
916
}
880
917
918
+ if _ , err := session .RegenerateSession (ctx .Resp , ctx .Req ); err != nil {
919
+ ctx .ServerError ("RegenerateSession" , err )
920
+ return
921
+ }
922
+
881
923
// User needs to use 2FA, save data and redirect to 2FA page.
882
924
if err := ctx .Session .Set ("twofaUid" , u .ID ); err != nil {
883
925
log .Error ("Error setting twofaUid in session: %v" , err )
@@ -1090,6 +1132,11 @@ func linkAccount(ctx *context.Context, u *user_model.User, gothUser goth.User, r
1090
1132
return
1091
1133
}
1092
1134
1135
+ if _ , err := session .RegenerateSession (ctx .Resp , ctx .Req ); err != nil {
1136
+ ctx .ServerError ("RegenerateSession" , err )
1137
+ return
1138
+ }
1139
+
1093
1140
// User needs to use 2FA, save data and redirect to 2FA page.
1094
1141
if err := ctx .Session .Set ("twofaUid" , u .ID ); err != nil {
1095
1142
log .Error ("Error setting twofaUid in session: %v" , err )
@@ -1227,7 +1274,7 @@ func LinkAccountPostRegister(ctx *context.Context) {
1227
1274
return
1228
1275
}
1229
1276
1230
- ctx . Redirect ( setting . AppSubURL + "/user/login" )
1277
+ handleSignIn ( ctx , u , false )
1231
1278
}
1232
1279
1233
1280
// HandleSignOut resets the session and sets the cookies
@@ -1370,7 +1417,7 @@ func SignUpPost(ctx *context.Context) {
1370
1417
}
1371
1418
1372
1419
ctx .Flash .Success (ctx .Tr ("auth.sign_up_successful" ))
1373
- handleSignInFull (ctx , u , false , true )
1420
+ handleSignIn (ctx , u , false )
1374
1421
}
1375
1422
1376
1423
// createAndHandleCreatedUser calls createUserInContext and
@@ -1591,6 +1638,13 @@ func handleAccountActivation(ctx *context.Context, user *user_model.User) {
1591
1638
1592
1639
log .Trace ("User activated: %s" , user .Name )
1593
1640
1641
+ if _ , err := session .RegenerateSession (ctx .Resp , ctx .Req ); err != nil {
1642
+ log .Error ("Unable to regenerate session for user: %-v with email: %s: %v" , user , user .Email , err )
1643
+ ctx .ServerError ("ActivateUserEmail" , err )
1644
+ return
1645
+ }
1646
+
1647
+ // Set session IDs
1594
1648
if err := ctx .Session .Set ("uid" , user .ID ); err != nil {
1595
1649
log .Error ("Error setting uid in session[%s]: %v" , ctx .Session .ID (), err )
1596
1650
}
@@ -1862,11 +1916,14 @@ func ResetPasswdPost(ctx *context.Context) {
1862
1916
1863
1917
handleSignInFull (ctx , u , remember , false )
1864
1918
ctx .Flash .Info (ctx .Tr ("auth.twofa_scratch_used" ))
1919
+ if ctx .Written () {
1920
+ return
1921
+ }
1865
1922
ctx .Redirect (setting .AppSubURL + "/user/settings/security" )
1866
1923
return
1867
1924
}
1868
1925
1869
- handleSignInFull (ctx , u , remember , true )
1926
+ handleSignIn (ctx , u , remember )
1870
1927
}
1871
1928
1872
1929
// MustChangePassword renders the page to change a user's password
0 commit comments