@@ -1203,6 +1203,8 @@ func SignUpPost(ctx *context.Context, cpt *captcha.Captcha, form auth.RegisterFo
1203
1203
// Activate render activate user page
1204
1204
func Activate (ctx * context.Context ) {
1205
1205
code := ctx .Query ("code" )
1206
+ password := ctx .Query ("password" )
1207
+
1206
1208
if len (code ) == 0 {
1207
1209
ctx .Data ["IsActivatePage" ] = true
1208
1210
if ctx .User .IsActive {
@@ -1228,42 +1230,58 @@ func Activate(ctx *context.Context) {
1228
1230
return
1229
1231
}
1230
1232
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 )
1237
1247
return
1238
1248
}
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 )
1245
1252
return
1246
1253
}
1254
+ }
1247
1255
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 )
1258
1267
}
1259
-
1260
- ctx .Flash .Success (ctx .Tr ("auth.account_activated" ))
1261
- ctx .Redirect (setting .AppSubURL + "/" )
1262
1268
return
1263
1269
}
1264
1270
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 + "/" )
1267
1285
}
1268
1286
1269
1287
// ActivateEmail render the activate email page
0 commit comments