small fixes
This commit is contained in:
@@ -19,10 +19,8 @@ var (
|
||||
ErrPasswordTooShort = errors.New("password is too short (minimum 8 characters)")
|
||||
)
|
||||
|
||||
// Регулярное выражение для валидации username
|
||||
var usernameRegex = regexp.MustCompile(`^[a-zA-Z0-9_]{3,16}$`)
|
||||
|
||||
// Регулярное выражение для валидации email (упрощенное, но эффективное)
|
||||
var emailRegex = regexp.MustCompile(`^[a-zA-Z0-9._%+\-]+@[a-zA-Z0-9.\-]+\.[a-zA-Z]{2,}$`)
|
||||
|
||||
type UserService struct {
|
||||
@@ -31,7 +29,6 @@ type UserService struct {
|
||||
|
||||
// RegisterNewUser выполняет полный алгоритм регистрации
|
||||
func (s *UserService) RegisterNewUser(ctx context.Context, req models.RegisterRequest) error {
|
||||
// Шаг 2 из ТЗ: Валидация
|
||||
if !usernameRegex.MatchString(req.Username) {
|
||||
return ErrInvalidUsername
|
||||
}
|
||||
@@ -42,13 +39,11 @@ func (s *UserService) RegisterNewUser(ctx context.Context, req models.RegisterRe
|
||||
return ErrPasswordTooShort
|
||||
}
|
||||
|
||||
// Шаг 5 из ТЗ: Генерация хеша пароля
|
||||
passwordHash, err := bcrypt.GenerateFromPassword([]byte(req.Password), 12) // Стоимость 12, как в ТЗ
|
||||
passwordHash, err := bcrypt.GenerateFromPassword([]byte(req.Password), 12)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// Шаг 6 из ТЗ: Генерация UUID
|
||||
userUUID, err := uuid.NewRandom()
|
||||
if err != nil {
|
||||
return err
|
||||
@@ -59,16 +54,14 @@ func (s *UserService) RegisterNewUser(ctx context.Context, req models.RegisterRe
|
||||
Username: req.Username,
|
||||
Email: req.Email,
|
||||
PasswordHash: string(passwordHash),
|
||||
Role: "user", // По умолчанию
|
||||
Role: "user",
|
||||
}
|
||||
|
||||
// Вызываем метод репозитория для сохранения в БД
|
||||
return s.Repo.CreateUserTx(ctx, user)
|
||||
}
|
||||
|
||||
// ValidateJoinRequest проверяет запрос на присоединение к серверу.
|
||||
func (s *AuthService) ValidateJoinRequest(ctx context.Context, req models.JoinRequest) error {
|
||||
// Преобразуем UUID из строки без дефисов в стандартный формат
|
||||
var uuidStr string
|
||||
if len(req.SelectedProfile) == 32 {
|
||||
uuidStr = fmt.Sprintf("%s-%s-%s-%s-%s",
|
||||
@@ -87,18 +80,14 @@ func (s *AuthService) ValidateJoinRequest(ctx context.Context, req models.JoinRe
|
||||
return fmt.Errorf("failed to parse profile UUID: %w", err)
|
||||
}
|
||||
|
||||
// Проверяем токен в базе данных
|
||||
err = s.UserRepo.ValidateAccessToken(ctx, req.AccessToken, userUUID)
|
||||
if err != nil {
|
||||
if errors.Is(err, database.ErrTokenNotFound) {
|
||||
// Возвращаем ту же ошибку, что и при неверных кредах, чтобы не давать лишней информации
|
||||
return ErrInvalidCredentials
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
// В ТЗ указано "привязка serverId". В простой реализации это может быть просто логирование
|
||||
// или запись в кеш (например, Redis). Для начала, просто прохождение валидации достаточно.
|
||||
log.Printf("User %s successfully joined server with serverId %s", userUUID, req.ServerID)
|
||||
|
||||
return nil
|
||||
|
||||
Reference in New Issue
Block a user