diff --git a/pkg/services/user/model.go b/pkg/services/user/model.go index 70f5a28f584..abff317f983 100644 --- a/pkg/services/user/model.go +++ b/pkg/services/user/model.go @@ -1,8 +1,6 @@ package user import ( - "fmt" - "strings" "time" "github.com/grafana/grafana/pkg/services/auth/identity" @@ -219,27 +217,6 @@ type CompleteEmailVerifyCommand struct { Code string } -type ErrCaseInsensitiveLoginConflict struct { - Users []User -} - -func (e *ErrCaseInsensitiveLoginConflict) Unwrap() error { - return ErrCaseInsensitive -} - -func (e *ErrCaseInsensitiveLoginConflict) Error() string { - n := len(e.Users) - - userStrings := make([]string, 0, n) - for _, v := range e.Users { - userStrings = append(userStrings, fmt.Sprintf("%s (email:%s, id:%d)", v.Login, v.Email, v.ID)) - } - - return fmt.Sprintf( - "Found a conflict in user login information. %d users already exist with either the same login or email: [%s].", - n, strings.Join(userStrings, ", ")) -} - type Filter interface { WhereCondition() *WhereCondition InCondition() *InCondition diff --git a/pkg/services/user/userimpl/store.go b/pkg/services/user/userimpl/store.go index dccc3145728..16a5876928d 100644 --- a/pkg/services/user/userimpl/store.go +++ b/pkg/services/user/userimpl/store.go @@ -185,14 +185,14 @@ func (ss *sqlStore) GetByEmail(ctx context.Context, query *user.GetUserByEmailQu } // LoginConflict returns an error if the provided email or login are already -// associated with a user. If caseInsensitive is true the search is not case -// sensitive. +// associated with a user. func (ss *sqlStore) LoginConflict(ctx context.Context, login, email string) error { + // enforcement of lowercase due to forcement of caseinsensitive login + login = strings.ToLower(login) + email = strings.ToLower(email) + err := ss.db.WithDbSession(ctx, func(sess *db.Session) error { - users := make([]user.User, 0) where := "email=? OR login=?" - login = strings.ToLower(login) - email = strings.ToLower(email) exists, err := sess.Where(where, email, login).Get(&user.User{}) if err != nil { @@ -201,14 +201,7 @@ func (ss *sqlStore) LoginConflict(ctx context.Context, login, email string) erro if exists { return user.ErrUserAlreadyExists } - if err := sess.Where("LOWER(email)=LOWER(?) OR LOWER(login)=LOWER(?)", - email, login).Find(&users); err != nil { - return err - } - if len(users) > 1 { - return &user.ErrCaseInsensitiveLoginConflict{Users: users} - } return nil }) return err