@@ -1240,7 +1240,7 @@ func createUserInContext(ctx *context.Context, tpl base.TplName, form interface{
1240
1240
}
1241
1241
}
1242
1242
1243
- // TODO: probably we should respect 'remeber ' user's choice...
1243
+ // TODO: probably we should respect 'remember ' user's choice...
1244
1244
linkAccount (ctx , user , * gothUser , true )
1245
1245
return // user is already created here, all redirects are handled
1246
1246
} else if setting .OAuth2Client .AccountLinking == setting .OAuth2AccountLinkingLogin {
@@ -1327,12 +1327,11 @@ func handleUserCreated(ctx *context.Context, u *models.User, gothUser *goth.User
1327
1327
// Activate render activate user page
1328
1328
func Activate (ctx * context.Context ) {
1329
1329
code := ctx .Query ("code" )
1330
- password := ctx .Query ("password" )
1331
1330
1332
1331
if len (code ) == 0 {
1333
1332
ctx .Data ["IsActivatePage" ] = true
1334
- if ctx .User .IsActive {
1335
- ctx .Error ( http . StatusNotFound )
1333
+ if ctx .User == nil || ctx . User .IsActive {
1334
+ ctx .NotFound ( "invalid user" , nil )
1336
1335
return
1337
1336
}
1338
1337
// Resend confirmation email.
@@ -1364,6 +1363,34 @@ func Activate(ctx *context.Context) {
1364
1363
1365
1364
// if account is local account, verify password
1366
1365
if user .LoginSource == 0 {
1366
+ ctx .Data ["Code" ] = code
1367
+ ctx .Data ["NeedsPassword" ] = true
1368
+ ctx .HTML (http .StatusOK , TplActivate )
1369
+ return
1370
+ }
1371
+
1372
+ handleAccountActivation (ctx , user )
1373
+ }
1374
+
1375
+ // ActivatePost handles account activation with password check
1376
+ func ActivatePost (ctx * context.Context ) {
1377
+ code := ctx .Query ("code" )
1378
+ if len (code ) == 0 {
1379
+ ctx .Redirect (setting .AppSubURL + "/user/activate" )
1380
+ return
1381
+ }
1382
+
1383
+ user := models .VerifyUserActiveCode (code )
1384
+ // if code is wrong
1385
+ if user == nil {
1386
+ ctx .Data ["IsActivateFailed" ] = true
1387
+ ctx .HTML (http .StatusOK , TplActivate )
1388
+ return
1389
+ }
1390
+
1391
+ // if account is local account, verify password
1392
+ if user .LoginSource == 0 {
1393
+ password := ctx .Query ("password" )
1367
1394
if len (password ) == 0 {
1368
1395
ctx .Data ["Code" ] = code
1369
1396
ctx .Data ["NeedsPassword" ] = true
@@ -1377,6 +1404,10 @@ func Activate(ctx *context.Context) {
1377
1404
}
1378
1405
}
1379
1406
1407
+ handleAccountActivation (ctx , user )
1408
+ }
1409
+
1410
+ func handleAccountActivation (ctx * context.Context , user * models.User ) {
1380
1411
user .IsActive = true
1381
1412
var err error
1382
1413
if user .Rands , err = models .GetUserSalt (); err != nil {
@@ -1385,7 +1416,7 @@ func Activate(ctx *context.Context) {
1385
1416
}
1386
1417
if err := models .UpdateUserCols (user , "is_active" , "rands" ); err != nil {
1387
1418
if models .IsErrUserNotExist (err ) {
1388
- ctx .Error ( http . StatusNotFound )
1419
+ ctx .NotFound ( "UpdateUserCols" , err )
1389
1420
} else {
1390
1421
ctx .ServerError ("UpdateUser" , err )
1391
1422
}
0 commit comments