lishwist/core/register.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
}