fix(user): handle status errors in pkg/user callers, remove redundant checks
This commit is contained in:
parent
04704e0fde
commit
91c0f386c6
|
|
@ -39,6 +39,11 @@ import (
|
|||
"xorm.io/xorm"
|
||||
)
|
||||
|
||||
// isErrUserStatusError returns true if the error is an ErrAccountDisabled or ErrAccountLocked.
|
||||
func isErrUserStatusError(err error) bool {
|
||||
return IsErrAccountDisabled(err) || IsErrAccountLocked(err)
|
||||
}
|
||||
|
||||
// Login Object to recive user credentials in JSON format
|
||||
type Login struct {
|
||||
// The username used to log in.
|
||||
|
|
@ -129,7 +134,7 @@ func (u *User) RouteForMail() (string, error) {
|
|||
s := db.NewSession()
|
||||
defer s.Close()
|
||||
user, err := getUser(s, &User{ID: u.ID}, true)
|
||||
if err != nil {
|
||||
if err != nil && !isErrUserStatusError(err) {
|
||||
return "", err
|
||||
}
|
||||
return user.Email, nil
|
||||
|
|
@ -151,12 +156,14 @@ func (u *User) ShouldNotify(sessions ...*xorm.Session) (bool, error) {
|
|||
s = db.NewSession()
|
||||
defer s.Close()
|
||||
}
|
||||
user, err := getUser(s, &User{ID: u.ID}, true)
|
||||
_, err := getUser(s, &User{ID: u.ID}, true)
|
||||
if isErrUserStatusError(err) {
|
||||
return false, nil
|
||||
}
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
|
||||
return user.Status != StatusDisabled && user.Status != StatusAccountLocked, err
|
||||
return true, nil
|
||||
}
|
||||
|
||||
func (u *User) Lang() string {
|
||||
|
|
@ -531,7 +538,7 @@ func UpdateUser(s *xorm.Session, user *User, forceOverride bool) (updatedUser *U
|
|||
|
||||
// Check if it exists
|
||||
theUser, err := GetUserWithEmail(s, &User{ID: user.ID})
|
||||
if err != nil {
|
||||
if err != nil && !isErrUserStatusError(err) {
|
||||
return &User{}, err
|
||||
}
|
||||
|
||||
|
|
@ -541,7 +548,7 @@ func UpdateUser(s *xorm.Session, user *User, forceOverride bool) (updatedUser *U
|
|||
} else {
|
||||
// Check if the new username already exists
|
||||
uu, err := GetUserByUsername(s, user.Username)
|
||||
if err != nil && !IsErrUserDoesNotExist(err) {
|
||||
if err != nil && !IsErrUserDoesNotExist(err) && !isErrUserStatusError(err) {
|
||||
return nil, err
|
||||
}
|
||||
if uu.ID != 0 && uu.ID != user.ID {
|
||||
|
|
@ -563,7 +570,7 @@ func UpdateUser(s *xorm.Session, user *User, forceOverride bool) (updatedUser *U
|
|||
Issuer: user.Issuer,
|
||||
Subject: user.Subject,
|
||||
}, true)
|
||||
if err != nil && !IsErrUserDoesNotExist(err) {
|
||||
if err != nil && !IsErrUserDoesNotExist(err) && !isErrUserStatusError(err) {
|
||||
return nil, err
|
||||
}
|
||||
if uu.ID != 0 && uu.ID != user.ID {
|
||||
|
|
@ -629,7 +636,7 @@ func UpdateUser(s *xorm.Session, user *User, forceOverride bool) (updatedUser *U
|
|||
|
||||
// Get the newly updated user
|
||||
updatedUser, err = GetUserByID(s, user.ID)
|
||||
if err != nil {
|
||||
if err != nil && !isErrUserStatusError(err) {
|
||||
return &User{}, err
|
||||
}
|
||||
|
||||
|
|
@ -652,7 +659,7 @@ func UpdateUserPassword(s *xorm.Session, user *User, newPassword string) (err er
|
|||
|
||||
// Get all user details
|
||||
theUser, err := GetUserByID(s, user.ID)
|
||||
if err != nil {
|
||||
if err != nil && !isErrUserStatusError(err) {
|
||||
return err
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -84,7 +84,7 @@ func CreateUser(s *xorm.Session, user *User) (newUser *User, err error) {
|
|||
|
||||
// Get the full new User
|
||||
newUserOut, err := GetUserByID(s, user.ID)
|
||||
if err != nil {
|
||||
if err != nil && !isErrUserStatusError(err) {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -43,12 +43,8 @@ func ConfirmEmail(s *xorm.Session, c *EmailConfirm) (err error) {
|
|||
}
|
||||
|
||||
user, err := GetUserByID(s, token.UserID)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
if user.Status == StatusDisabled {
|
||||
return &ErrAccountDisabled{UserID: user.ID}
|
||||
if err != nil && !IsErrAccountLocked(err) {
|
||||
return err
|
||||
}
|
||||
|
||||
user.Status = StatusActive
|
||||
|
|
|
|||
|
|
@ -54,8 +54,8 @@ func ResetPassword(s *xorm.Session, reset *PasswordReset) (userID int64, err err
|
|||
}
|
||||
|
||||
user, err := GetUserByID(s, token.UserID)
|
||||
if err != nil {
|
||||
return
|
||||
if err != nil && !IsErrAccountLocked(err) {
|
||||
return 0, err
|
||||
}
|
||||
userID = user.ID
|
||||
|
||||
|
|
@ -70,10 +70,6 @@ func ResetPassword(s *xorm.Session, reset *PasswordReset) (userID int64, err err
|
|||
return
|
||||
}
|
||||
|
||||
if user.Status == StatusDisabled {
|
||||
return 0, &ErrAccountDisabled{UserID: user.ID}
|
||||
}
|
||||
|
||||
if user.Status == StatusAccountLocked || user.Status == StatusEmailConfirmationRequired {
|
||||
user.Status = StatusActive
|
||||
}
|
||||
|
|
@ -112,12 +108,8 @@ func RequestUserPasswordResetTokenByEmail(s *xorm.Session, tr *PasswordTokenRequ
|
|||
|
||||
// Check if the user exists
|
||||
user, err := GetUserWithEmail(s, &User{Email: tr.Email})
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
if user.Status == StatusDisabled {
|
||||
return &ErrAccountDisabled{UserID: user.ID}
|
||||
if err != nil && !IsErrAccountLocked(err) {
|
||||
return err
|
||||
}
|
||||
|
||||
return RequestUserPasswordResetToken(s, user)
|
||||
|
|
|
|||
Loading…
Reference in New Issue