@@ -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"
@@ -87,6 +88,10 @@ func AutoSignIn(ctx *context.Context) (bool, error) {
87
88
88
89
isSucceed = true
89
90
91
+ if _ , err := session .RegenerateSession (ctx .Resp , ctx .Req ); err != nil {
92
+ return false , fmt .Errorf ("unable to RegenerateSession: Error: %w" , err )
93
+ }
94
+
90
95
// Set session IDs
91
96
if err := ctx .Session .Set ("uid" , u .ID ); err != nil {
92
97
return false , err
@@ -235,6 +240,11 @@ func SignInPost(ctx *context.Context) {
235
240
return
236
241
}
237
242
243
+ if _ , err := session .RegenerateSession (ctx .Resp , ctx .Req ); err != nil {
244
+ ctx .ServerError ("UserSignIn: Unable to set regenerate session" , err )
245
+ return
246
+ }
247
+
238
248
// User needs to use 2FA, save data and redirect to 2FA page.
239
249
if err := ctx .Session .Set ("twofaUid" , u .ID ); err != nil {
240
250
ctx .ServerError ("UserSignIn: Unable to set twofaUid in session" , err )
@@ -395,6 +405,9 @@ func TwoFactorScratchPost(ctx *context.Context) {
395
405
}
396
406
397
407
handleSignInFull (ctx , u , remember , false )
408
+ if ctx .Written () {
409
+ return
410
+ }
398
411
ctx .Flash .Info (ctx .Tr ("auth.twofa_scratch_used" ))
399
412
ctx .Redirect (setting .AppSubURL + "/user/settings/security" )
400
413
return
@@ -505,6 +518,9 @@ func U2FSign(ctx *context.Context) {
505
518
}
506
519
}
507
520
redirect := handleSignInFull (ctx , user , remember , false )
521
+ if ctx .Written () {
522
+ return
523
+ }
508
524
if redirect == "" {
509
525
redirect = setting .AppSubURL + "/"
510
526
}
@@ -517,7 +533,11 @@ func U2FSign(ctx *context.Context) {
517
533
518
534
// This handles the final part of the sign-in process of the user.
519
535
func handleSignIn (ctx * context.Context , u * models.User , remember bool ) {
520
- handleSignInFull (ctx , u , remember , true )
536
+ redirect := handleSignInFull (ctx , u , remember , true )
537
+ if ctx .Written () {
538
+ return
539
+ }
540
+ ctx .Redirect (redirect )
521
541
}
522
542
523
543
func handleSignInFull (ctx * context.Context , u * models.User , remember bool , obeyRedirect bool ) string {
@@ -528,6 +548,12 @@ func handleSignInFull(ctx *context.Context, u *models.User, remember bool, obeyR
528
548
setting .CookieRememberName , u .Name , days )
529
549
}
530
550
551
+ if _ , err := session .RegenerateSession (ctx .Resp , ctx .Req ); err != nil {
552
+ ctx .ServerError ("RegenerateSession" , err )
553
+ return setting .AppSubURL + "/"
554
+ }
555
+
556
+ // Delete the openid, 2fa and linkaccount data
531
557
_ = ctx .Session .Delete ("openid_verified_uri" )
532
558
_ = ctx .Session .Delete ("openid_signin_remember" )
533
559
_ = ctx .Session .Delete ("openid_determined_email" )
@@ -551,7 +577,7 @@ func handleSignInFull(ctx *context.Context, u *models.User, remember bool, obeyR
551
577
if len (u .Language ) == 0 {
552
578
u .Language = ctx .Locale .Language ()
553
579
if err := models .UpdateUserCols (u , "language" ); err != nil {
554
- log . Error ( fmt .Sprintf ("Error updating user language [user: %d, locale: %s]" , u .ID , u .Language ))
580
+ ctx . ServerError ( "UpdateUserCols Language" , fmt .Errorf ("Error updating user language [user: %d, locale: %s]" , u .ID , u .Language ))
555
581
return setting .AppSubURL + "/"
556
582
}
557
583
}
@@ -697,6 +723,11 @@ func getUserName(gothUser *goth.User) string {
697
723
}
698
724
699
725
func showLinkingLogin (ctx * context.Context , gothUser goth.User ) {
726
+ if _ , err := session .RegenerateSession (ctx .Resp , ctx .Req ); err != nil {
727
+ ctx .ServerError ("RegenerateSession" , err )
728
+ return
729
+ }
730
+
700
731
if err := ctx .Session .Set ("linkAccountGothUser" , gothUser ); err != nil {
701
732
log .Error ("Error setting linkAccountGothUser in session: %v" , err )
702
733
}
@@ -736,6 +767,11 @@ func handleOAuth2SignIn(ctx *context.Context, u *models.User, gothUser goth.User
736
767
return
737
768
}
738
769
770
+ if _ , err := session .RegenerateSession (ctx .Resp , ctx .Req ); err != nil {
771
+ ctx .ServerError ("RegenerateSession" , err )
772
+ return
773
+ }
774
+
739
775
if err := ctx .Session .Set ("uid" , u .ID ); err != nil {
740
776
log .Error ("Error setting uid in session: %v" , err )
741
777
}
@@ -776,6 +812,11 @@ func handleOAuth2SignIn(ctx *context.Context, u *models.User, gothUser goth.User
776
812
return
777
813
}
778
814
815
+ if _ , err := session .RegenerateSession (ctx .Resp , ctx .Req ); err != nil {
816
+ ctx .ServerError ("RegenerateSession" , err )
817
+ return
818
+ }
819
+
779
820
// User needs to use 2FA, save data and redirect to 2FA page.
780
821
if err := ctx .Session .Set ("twofaUid" , u .ID ); err != nil {
781
822
log .Error ("Error setting twofaUid in session: %v" , err )
@@ -965,6 +1006,11 @@ func linkAccount(ctx *context.Context, u *models.User, gothUser goth.User, remem
965
1006
return
966
1007
}
967
1008
1009
+ if _ , err := session .RegenerateSession (ctx .Resp , ctx .Req ); err != nil {
1010
+ ctx .ServerError ("RegenerateSession" , err )
1011
+ return
1012
+ }
1013
+
968
1014
// User needs to use 2FA, save data and redirect to 2FA page.
969
1015
if err := ctx .Session .Set ("twofaUid" , u .ID ); err != nil {
970
1016
log .Error ("Error setting twofaUid in session: %v" , err )
@@ -1102,7 +1148,7 @@ func LinkAccountPostRegister(ctx *context.Context) {
1102
1148
return
1103
1149
}
1104
1150
1105
- ctx . Redirect ( setting . AppSubURL + "/user/login" )
1151
+ handleSignIn ( ctx , u , false )
1106
1152
}
1107
1153
1108
1154
// HandleSignOut resets the session and sets the cookies
@@ -1244,7 +1290,7 @@ func SignUpPost(ctx *context.Context) {
1244
1290
}
1245
1291
1246
1292
ctx .Flash .Success (ctx .Tr ("auth.sign_up_successful" ))
1247
- handleSignInFull (ctx , u , false , true )
1293
+ handleSignIn (ctx , u , false )
1248
1294
}
1249
1295
1250
1296
// createAndHandleCreatedUser calls createUserInContext and
@@ -1465,6 +1511,13 @@ func handleAccountActivation(ctx *context.Context, user *models.User) {
1465
1511
1466
1512
log .Trace ("User activated: %s" , user .Name )
1467
1513
1514
+ if _ , err := session .RegenerateSession (ctx .Resp , ctx .Req ); err != nil {
1515
+ log .Error ("Unable to regenerate session for user: %-v with email: %s: %v" , user , user .Email , err )
1516
+ ctx .ServerError ("ActivateUserEmail" , err )
1517
+ return
1518
+ }
1519
+
1520
+ // Set session IDs
1468
1521
if err := ctx .Session .Set ("uid" , user .ID ); err != nil {
1469
1522
log .Error ("Error setting uid in session[%s]: %v" , ctx .Session .ID (), err )
1470
1523
}
@@ -1737,11 +1790,14 @@ func ResetPasswdPost(ctx *context.Context) {
1737
1790
1738
1791
handleSignInFull (ctx , u , remember , false )
1739
1792
ctx .Flash .Info (ctx .Tr ("auth.twofa_scratch_used" ))
1793
+ if ctx .Written () {
1794
+ return
1795
+ }
1740
1796
ctx .Redirect (setting .AppSubURL + "/user/settings/security" )
1741
1797
return
1742
1798
}
1743
1799
1744
- handleSignInFull (ctx , u , remember , true )
1800
+ handleSignIn (ctx , u , remember )
1745
1801
}
1746
1802
1747
1803
// MustChangePassword renders the page to change a user's password
0 commit comments