@@ -1233,12 +1233,11 @@ func SignUpPost(ctx *context.Context) {
12331233// Activate render activate user page
12341234func Activate (ctx * context.Context ) {
12351235 code := ctx .Query ("code" )
1236- password := ctx .Query ("password" )
12371236
12381237 if len (code ) == 0 {
12391238 ctx .Data ["IsActivatePage" ] = true
1240- if ctx .User .IsActive {
1241- ctx .Error ( 404 )
1239+ if ctx .User == nil || ctx . User .IsActive {
1240+ ctx .NotFound ( "invalid user" , nil )
12421241 return
12431242 }
12441243 // Resend confirmation email.
@@ -1270,6 +1269,34 @@ func Activate(ctx *context.Context) {
12701269
12711270 // if account is local account, verify password
12721271 if user .LoginSource == 0 {
1272+ ctx .Data ["Code" ] = code
1273+ ctx .Data ["NeedsPassword" ] = true
1274+ ctx .HTML (http .StatusOK , TplActivate )
1275+ return
1276+ }
1277+
1278+ handleAccountActivation (ctx , user )
1279+ }
1280+
1281+ // ActivatePost handles account activation with password check
1282+ func ActivatePost (ctx * context.Context ) {
1283+ code := ctx .Query ("code" )
1284+ if len (code ) == 0 {
1285+ ctx .Redirect (setting .AppSubURL + "/user/activate" )
1286+ return
1287+ }
1288+
1289+ user := models .VerifyUserActiveCode (code )
1290+ // if code is wrong
1291+ if user == nil {
1292+ ctx .Data ["IsActivateFailed" ] = true
1293+ ctx .HTML (http .StatusOK , TplActivate )
1294+ return
1295+ }
1296+
1297+ // if account is local account, verify password
1298+ if user .LoginSource == 0 {
1299+ password := ctx .Query ("password" )
12731300 if len (password ) == 0 {
12741301 ctx .Data ["Code" ] = code
12751302 ctx .Data ["NeedsPassword" ] = true
@@ -1283,6 +1310,10 @@ func Activate(ctx *context.Context) {
12831310 }
12841311 }
12851312
1313+ handleAccountActivation (ctx , user )
1314+ }
1315+
1316+ func handleAccountActivation (ctx * context.Context , user * models.User ) {
12861317 user .IsActive = true
12871318 var err error
12881319 if user .Rands , err = models .GetUserSalt (); err != nil {
@@ -1291,7 +1322,7 @@ func Activate(ctx *context.Context) {
12911322 }
12921323 if err := models .UpdateUserCols (user , "is_active" , "rands" ); err != nil {
12931324 if models .IsErrUserNotExist (err ) {
1294- ctx .Error ( 404 )
1325+ ctx .NotFound ( "UpdateUserCols" , err )
12951326 } else {
12961327 ctx .ServerError ("UpdateUser" , err )
12971328 }
0 commit comments