chore: check if username exists
This commit is contained in:
parent
b12aa48066
commit
3a0f0ced51
5 changed files with 52 additions and 2 deletions
|
|
@ -3,6 +3,6 @@ package miniauth
|
||||||
import "errors"
|
import "errors"
|
||||||
|
|
||||||
var (
|
var (
|
||||||
ErrUSernameInvalide = errors.New("username not valide")
|
|
||||||
ErrUserHasInvalideChars = errors.New("username has invalide chars")
|
ErrUserHasInvalideChars = errors.New("username has invalide chars")
|
||||||
|
ErrUsernameIsTaken = errors.New("username already takebn")
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -34,5 +34,15 @@ func (m Miniauth) checkUsernameForRegistration(username string) error {
|
||||||
if !reg.MatchString(username) {
|
if !reg.MatchString(username) {
|
||||||
return ErrUserHasInvalideChars
|
return ErrUserHasInvalideChars
|
||||||
}
|
}
|
||||||
|
|
||||||
|
exists, err := m.store.UserExists(username)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if exists {
|
||||||
|
return ErrUsernameIsTaken
|
||||||
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -38,9 +38,16 @@ func TestInvalideUsernames(t *testing.T) {
|
||||||
username: "kekskurse",
|
username: "kekskurse",
|
||||||
exptErr: nil,
|
exptErr: nil,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: "username already taken",
|
||||||
|
username: "testuser",
|
||||||
|
exptErr: ErrUsernameIsTaken,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
ma := getMiniAuth(t)
|
ma := getMiniAuth(t)
|
||||||
|
_, err := ma.store.UserWrite("testuser", "testpassword")
|
||||||
|
assert.Nil(t, err, "[setup] should be abel to write user without error")
|
||||||
for _, tt := range tts {
|
for _, tt := range tts {
|
||||||
t.Run(tt.name, func(t *testing.T) {
|
t.Run(tt.name, func(t *testing.T) {
|
||||||
err := ma.checkUsernameForRegistration(tt.username)
|
err := ma.checkUsernameForRegistration(tt.username)
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@ import (
|
||||||
|
|
||||||
func (s Store) UserWrite(username, password string) (int64, error) {
|
func (s Store) UserWrite(username, password string) (int64, error) {
|
||||||
query := "INSERT INTO users (username, password) VALUES (?, ?);"
|
query := "INSERT INTO users (username, password) VALUES (?, ?);"
|
||||||
log := s.log.With().Str("query", query).Str("username", username).Logger()
|
log := s.log.With().Str("func", "UserWrite").Str("query", query).Str("username", username).Logger()
|
||||||
|
|
||||||
pwHash, err := bcrypt.GenerateFromPassword([]byte(password), bcrypt.DefaultCost)
|
pwHash, err := bcrypt.GenerateFromPassword([]byte(password), bcrypt.DefaultCost)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
@ -25,3 +25,20 @@ func (s Store) UserWrite(username, password string) (int64, error) {
|
||||||
}
|
}
|
||||||
return id, nil
|
return id, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s Store) UserExists(username string) (bool, error) {
|
||||||
|
query := "SELECT COUNT(*) FROM users WHERE username = ?"
|
||||||
|
log := s.log.With().Str("func", "UserExists").Str("query", query).Str("username", username).Logger()
|
||||||
|
|
||||||
|
var count int
|
||||||
|
err := s.db.QueryRow(query, username).Scan(&count)
|
||||||
|
if err != nil {
|
||||||
|
return true, utils.WrapError(ErrCantExecuteQuery, err, log)
|
||||||
|
}
|
||||||
|
|
||||||
|
if count == 0 {
|
||||||
|
return false, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
return true, nil
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -68,3 +68,19 @@ func TestWriteUser(t *testing.T) {
|
||||||
assert.NotEqual(t, "kekskurse", pw2)
|
assert.NotEqual(t, "kekskurse", pw2)
|
||||||
assert.NotEqual(t, pw1, pw2, "passwords should not be equal")
|
assert.NotEqual(t, pw1, pw2, "passwords should not be equal")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestUserExists(t *testing.T) {
|
||||||
|
store, err := NewDummyStore()
|
||||||
|
assert.Nil(t, err, "[setup] should get dummy store without error")
|
||||||
|
|
||||||
|
exists, err := store.UserExists("kekskurse")
|
||||||
|
assert.Nil(t, err)
|
||||||
|
assert.False(t, exists)
|
||||||
|
|
||||||
|
_, err = store.UserWrite("kekskurse", "kekskurse")
|
||||||
|
assert.Nil(t, err, "[setup] should be abel to create user")
|
||||||
|
|
||||||
|
exists, err = store.UserExists("kekskurse")
|
||||||
|
assert.Nil(t, err)
|
||||||
|
assert.True(t, exists)
|
||||||
|
}
|
||||||
|
|
|
||||||
Reference in a new issue