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