@@ -1203,6 +1203,8 @@ func SignUpPost(ctx *context.Context, cpt *captcha.Captcha, form auth.RegisterFo
12031203// Activate render activate user page
12041204func Activate (ctx * context.Context ) {
12051205 code := ctx .Query ("code" )
1206+ password := ctx .Query ("password" )
1207+
12061208 if len (code ) == 0 {
12071209 ctx .Data ["IsActivatePage" ] = true
12081210 if ctx .User .IsActive {
@@ -1228,42 +1230,58 @@ func Activate(ctx *context.Context) {
12281230 return
12291231 }
12301232
1231- // Verify code.
1232- if user := models .VerifyUserActiveCode (code ); user != nil {
1233- user .IsActive = true
1234- var err error
1235- if user .Rands , err = models .GetUserSalt (); err != nil {
1236- ctx .ServerError ("UpdateUser" , err )
1233+ user := models .VerifyUserActiveCode (code )
1234+ // if code is wrong
1235+ if user == nil {
1236+ ctx .Data ["IsActivateFailed" ] = true
1237+ ctx .HTML (200 , TplActivate )
1238+ return
1239+ }
1240+
1241+ // if account is local account, verify password
1242+ if user .LoginSource == 0 {
1243+ if len (password ) == 0 {
1244+ ctx .Data ["Code" ] = code
1245+ ctx .Data ["NeedsPassword" ] = true
1246+ ctx .HTML (200 , TplActivate )
12371247 return
12381248 }
1239- if err := models .UpdateUserCols (user , "is_active" , "rands" ); err != nil {
1240- if models .IsErrUserNotExist (err ) {
1241- ctx .Error (404 )
1242- } else {
1243- ctx .ServerError ("UpdateUser" , err )
1244- }
1249+ if ! user .ValidatePassword (password ) {
1250+ ctx .Data ["IsActivateFailed" ] = true
1251+ ctx .HTML (200 , TplActivate )
12451252 return
12461253 }
1254+ }
12471255
1248- log .Trace ("User activated: %s" , user .Name )
1249-
1250- if err := ctx .Session .Set ("uid" , user .ID ); err != nil {
1251- log .Error (fmt .Sprintf ("Error setting uid in session: %v" , err ))
1252- }
1253- if err := ctx .Session .Set ("uname" , user .Name ); err != nil {
1254- log .Error (fmt .Sprintf ("Error setting uname in session: %v" , err ))
1255- }
1256- if err := ctx .Session .Release (); err != nil {
1257- log .Error ("Error storing session: %v" , err )
1256+ user .IsActive = true
1257+ var err error
1258+ if user .Rands , err = models .GetUserSalt (); err != nil {
1259+ ctx .ServerError ("UpdateUser" , err )
1260+ return
1261+ }
1262+ if err := models .UpdateUserCols (user , "is_active" , "rands" ); err != nil {
1263+ if models .IsErrUserNotExist (err ) {
1264+ ctx .Error (404 )
1265+ } else {
1266+ ctx .ServerError ("UpdateUser" , err )
12581267 }
1259-
1260- ctx .Flash .Success (ctx .Tr ("auth.account_activated" ))
1261- ctx .Redirect (setting .AppSubURL + "/" )
12621268 return
12631269 }
12641270
1265- ctx .Data ["IsActivateFailed" ] = true
1266- ctx .HTML (200 , TplActivate )
1271+ log .Trace ("User activated: %s" , user .Name )
1272+
1273+ if err := ctx .Session .Set ("uid" , user .ID ); err != nil {
1274+ log .Error (fmt .Sprintf ("Error setting uid in session: %v" , err ))
1275+ }
1276+ if err := ctx .Session .Set ("uname" , user .Name ); err != nil {
1277+ log .Error (fmt .Sprintf ("Error setting uname in session: %v" , err ))
1278+ }
1279+ if err := ctx .Session .Release (); err != nil {
1280+ log .Error ("Error storing session: %v" , err )
1281+ }
1282+
1283+ ctx .Flash .Success (ctx .Tr ("auth.account_activated" ))
1284+ ctx .Redirect (setting .AppSubURL + "/" )
12671285}
12681286
12691287// ActivateEmail render the activate email page
0 commit comments