Skip to content

Commit 4ce9c80

Browse files
committed
Improve logging and refactor isEmailActive
Signed-off-by: Andrew Thornton <[email protected]>
1 parent 8ae1fd6 commit 4ce9c80

File tree

3 files changed

+20
-17
lines changed

3 files changed

+20
-17
lines changed

models/user_mail.go

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -74,14 +74,15 @@ func GetEmailAddressByID(uid, id int64) (*EmailAddress, error) {
7474
return email, nil
7575
}
7676

77-
func isEmailActive(e Engine, email string, userID, emailID int64) (bool, error) {
77+
// isEmailActive check if email is activated with a different emailID
78+
func isEmailActive(e Engine, email string, excludeEmailID int64) (bool, error) {
7879
if len(email) == 0 {
7980
return true, nil
8081
}
8182

8283
// Can't filter by boolean field unless it's explicit
8384
cond := builder.NewCond()
84-
cond = cond.And(builder.Eq{"lower_email": strings.ToLower(email)}, builder.Neq{"id": emailID})
85+
cond = cond.And(builder.Eq{"lower_email": strings.ToLower(email)}, builder.Neq{"id": excludeEmailID})
8586
if setting.Service.RegisterEmailConfirm {
8687
// Inactive (unvalidated) addresses don't count as active if email validation is required
8788
cond = cond.And(builder.Eq{"is_activated": true})
@@ -90,7 +91,7 @@ func isEmailActive(e Engine, email string, userID, emailID int64) (bool, error)
9091
var em EmailAddress
9192
if has, err := e.Where(cond).Get(&em); has || err != nil {
9293
if has {
93-
log.Info("isEmailActive('%s',%d,%d) found duplicate in email ID %d", email, userID, emailID, em.ID)
94+
log.Info("isEmailActive(%q, %d) found duplicate in email ID %d", email, excludeEmailID, em.ID)
9495
}
9596
return has, err
9697
}
@@ -387,14 +388,14 @@ func ActivateUserEmail(userID int64, email string, activate bool) (err error) {
387388
return nil
388389
}
389390
if activate {
390-
if used, err := isEmailActive(sess, email, 0, addr.ID); err != nil {
391-
return fmt.Errorf("isEmailActive(): %v", err)
391+
if used, err := isEmailActive(sess, email, addr.ID); err != nil {
392+
return fmt.Errorf("unable to check isEmailActive() for %s: %v", email, err)
392393
} else if used {
393394
return ErrEmailAlreadyUsed{Email: email}
394395
}
395396
}
396397
if err = addr.updateActivation(sess, activate); err != nil {
397-
return fmt.Errorf("updateActivation(): %v", err)
398+
return fmt.Errorf("unable to updateActivation() for %d:%s: %w", addr.ID, addr.Email, err)
398399
}
399400

400401
// Activate/deactivate a user's primary email address and account
@@ -403,16 +404,16 @@ func ActivateUserEmail(userID int64, email string, activate bool) (err error) {
403404
if has, err := sess.Get(&user); err != nil {
404405
return err
405406
} else if !has {
406-
return fmt.Errorf("no such user: %d (%s)", userID, email)
407+
return fmt.Errorf("no user with ID: %d and Email: %s", userID, email)
407408
}
408-
// The user's activation state should synchronized with the primary email
409+
// The user's activation state should be synchronized with the primary email
409410
if user.IsActive != activate {
410411
user.IsActive = activate
411412
if user.Rands, err = GetUserSalt(); err != nil {
412-
return fmt.Errorf("generate salt: %v", err)
413+
return fmt.Errorf("unable to generate salt: %v", err)
413414
}
414415
if err = updateUserCols(sess, &user, "is_active", "rands"); err != nil {
415-
return fmt.Errorf("updateUserCols(): %v", err)
416+
return fmt.Errorf("unable to updateUserCols() for user ID: %d: %v", userID, err)
416417
}
417418
}
418419
}

routers/web/user/auth.go

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1430,19 +1430,21 @@ func handleAccountActivation(ctx *context.Context, user *models.User) {
14301430
}
14311431

14321432
if err := models.ActivateUserEmail(user.ID, user.Email, true); err != nil {
1433-
log.Error(fmt.Sprintf("Error active user mail: %v", err))
1433+
log.Error("Unable to activate email for user: %-v with email: %s: %v", user, user.Email, err)
1434+
ctx.ServerError("ActivateUserEmail", err)
1435+
return
14341436
}
14351437

14361438
log.Trace("User activated: %s", user.Name)
14371439

14381440
if err := ctx.Session.Set("uid", user.ID); err != nil {
1439-
log.Error(fmt.Sprintf("Error setting uid in session: %v", err))
1441+
log.Error("Error setting uid in session[%s]: %v", ctx.Session.ID(), err)
14401442
}
14411443
if err := ctx.Session.Set("uname", user.Name); err != nil {
1442-
log.Error(fmt.Sprintf("Error setting uname in session: %v", err))
1444+
log.Error("Error setting uname in session[%s]: %v", ctx.Session.ID(), err)
14431445
}
14441446
if err := ctx.Session.Release(); err != nil {
1445-
log.Error("Error storing session: %v", err)
1447+
log.Error("Error storing session[%s]: %v", ctx.Session.ID(), err)
14461448
}
14471449

14481450
ctx.Flash.Success(ctx.Tr("auth.account_activated"))

routers/web/user/setting/account.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -116,18 +116,18 @@ func EmailPost(ctx *context.Context) {
116116
return
117117
}
118118
if email == nil {
119-
log.Error("Send activation: EmailAddress not found; user:%d, id: %d", ctx.User.ID, id)
119+
log.Warn("Send activation failed: EmailAddress[%d] not found for user: %-v", id, ctx.User)
120120
ctx.Redirect(setting.AppSubURL + "/user/settings/account")
121121
return
122122
}
123123
if email.IsActivated {
124-
log.Error("Send activation: email not set for activation")
124+
log.Debug("Send activation failed: email %s is already activated for user: %-v", email.Email, ctx.User)
125125
ctx.Redirect(setting.AppSubURL + "/user/settings/account")
126126
return
127127
}
128128
if email.IsPrimary {
129129
if ctx.User.IsActive && !setting.Service.RegisterEmailConfirm {
130-
log.Error("Send activation: email not set for activation")
130+
log.Debug("Send activation failed: email %s is already activated for user: %-v", email.Email, ctx.User)
131131
ctx.Redirect(setting.AppSubURL + "/user/settings/account")
132132
return
133133
}

0 commit comments

Comments
 (0)