add generate and hash password

This commit is contained in:
2026-06-29 13:26:57 +07:00
parent 18fad25b27
commit 7806061313
5 changed files with 66 additions and 10 deletions
@@ -0,0 +1,32 @@
package password_generator
import (
"crypto/rand"
"math/big"
)
const (
charset = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
)
type generator struct {
length int
}
func NewGenerator(length int) IPasswordGenerator {
return &generator{
length: length,
}
}
func (g *generator) Generate() (string, error) {
password := make([]byte, g.length)
for i := range password {
num, err := rand.Int(rand.Reader, big.NewInt(int64(len(charset))))
if err != nil {
return "", err
}
password[i] = charset[num.Int64()]
}
return string(password), nil
}
@@ -0,0 +1,5 @@
package password_generator
type IPasswordGenerator interface {
Generate() (string, error)
}
+21 -5
View File
@@ -2,16 +2,24 @@ package users_service
import (
"context"
"evening_detective_server/internal/modules/password_generator"
"evening_detective_server/internal/repos/users_repo"
"golang.org/x/crypto/bcrypt"
)
type UsersService struct {
usersRepo *users_repo.UsersRepo
usersRepo *users_repo.UsersRepo
passwordGenerator password_generator.IPasswordGenerator
}
func NewUsersService(usersRepo *users_repo.UsersRepo) *UsersService {
func NewUsersService(
usersRepo *users_repo.UsersRepo,
passwordGenerator password_generator.IPasswordGenerator,
) *UsersService {
return &UsersService{
usersRepo: usersRepo,
usersRepo: usersRepo,
passwordGenerator: passwordGenerator,
}
}
@@ -20,11 +28,19 @@ func (s *UsersService) AddUser(
username string,
email string,
) error {
err := s.usersRepo.AddUser(
password, err := s.passwordGenerator.Generate()
if err != nil {
return err
}
hashedPassword, err := bcrypt.GenerateFromPassword([]byte(password), bcrypt.DefaultCost)
if err != nil {
return err
}
err = s.usersRepo.AddUser(
ctx,
username,
email,
"hello", // TODO: generate password and send email
string(hashedPassword),
"user",
)
return err