40 lines
815 B
Go
40 lines
815 B
Go
package lishwist
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
|
|
"golang.org/x/crypto/bcrypt"
|
|
)
|
|
|
|
func Register(username, newPassword string) error {
|
|
if username == "" {
|
|
return errors.New("Username required")
|
|
}
|
|
if newPassword == "" {
|
|
return errors.New("newPassword required")
|
|
}
|
|
|
|
existingUser, _ := getUserByName(username)
|
|
if existingUser != nil {
|
|
return errors.New("Username is taken")
|
|
}
|
|
|
|
hashedPasswordBytes, err := bcrypt.GenerateFromPassword([]byte(newPassword), bcrypt.MinCost)
|
|
if err != nil {
|
|
return fmt.Errorf("Failed to hash password: %w", err)
|
|
}
|
|
|
|
usersExist, err := hasUsers()
|
|
if err != nil {
|
|
return fmt.Errorf("Failed to count users: %w", err)
|
|
}
|
|
|
|
_, err = createUser(username, hashedPasswordBytes, !usersExist)
|
|
if err != nil {
|
|
return fmt.Errorf("Failed to create user: %w\n", err)
|
|
}
|
|
|
|
return nil
|
|
}
|