generated from VLADIMIR/template
add generate and hash password
This commit is contained in:
@@ -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)
|
||||
}
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user