diff --git a/bin/evening_detective_server b/bin/evening_detective_server index ce21cd5..4db0766 100755 Binary files a/bin/evening_detective_server and b/bin/evening_detective_server differ diff --git a/cmd/evening_detective_server/main.go b/cmd/evening_detective_server/main.go index 50eb687..6668d8d 100644 --- a/cmd/evening_detective_server/main.go +++ b/cmd/evening_detective_server/main.go @@ -85,7 +85,7 @@ func main() { } usersRepo := users_repo.NewUserRepo(dbpool) - passwordGenerator := password_generator.NewGenerator(12) + passwordGenerator := password_generator.NewGenerator(8) smtpTimeout := 10 * time.Second if v := os.Getenv("SMTP_TIMEOUT"); v != "" { if d, err := time.ParseDuration(v); err == nil && d > 0 { diff --git a/internal/modules/password_generator/generator.go b/internal/modules/password_generator/generator.go index 18ce9b1..0153b78 100644 --- a/internal/modules/password_generator/generator.go +++ b/internal/modules/password_generator/generator.go @@ -6,7 +6,7 @@ import ( ) const ( - charset = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" + charset = "abcdefghijklmnopqrstuvwxyz" ) type generator struct { diff --git a/internal/modules/password_generator/generator_test.go b/internal/modules/password_generator/generator_test.go new file mode 100644 index 0000000..baa830b --- /dev/null +++ b/internal/modules/password_generator/generator_test.go @@ -0,0 +1,21 @@ +package password_generator + +import "testing" + +func TestGenerate(t *testing.T) { + g := NewGenerator(8) + for range 100 { + password, err := g.Generate() + if err != nil { + t.Fatal(err) + } + if len(password) != 8 { + t.Fatalf("password length = %d, want 8", len(password)) + } + for _, char := range password { + if char < 'a' || char > 'z' { + t.Fatal("password contains a character outside a-z") + } + } + } +} diff --git a/internal/services/users_service/change_password_test.go b/internal/services/users_service/change_password_test.go index 843f1af..526ff12 100644 --- a/internal/services/users_service/change_password_test.go +++ b/internal/services/users_service/change_password_test.go @@ -26,7 +26,10 @@ func TestChangeUserPassword(t *testing.T) { {"bad id", "admin", "123456789012", 1, -1, ErrInvalidPasswordChange}, {"missing target", "admin", "123456789012", 1, 4, users_repo.ErrUserNotFound}, {"empty", "admin", "", 1, 2, ErrInvalidPasswordChange}, - {"short unicode", "admin", "яяббввггдде", 1, 2, ErrInvalidPasswordChange}, + {"8 characters", "admin", "abcdefgh", 1, 2, nil}, + {"8 unicode characters", "admin", "яяббввгг", 1, 2, nil}, + {"short", "admin", "abcdefg", 1, 2, ErrInvalidPasswordChange}, + {"short unicode", "admin", "яяббввг", 1, 2, ErrInvalidPasswordChange}, {"too many bytes", "admin", strings.Repeat("я", 37), 1, 2, ErrInvalidPasswordChange}, {"72 bytes", "admin", strings.Repeat("я", 36), 1, 2, nil}, } { diff --git a/internal/services/users_service/service.go b/internal/services/users_service/service.go index 5dd1181..5288ced 100644 --- a/internal/services/users_service/service.go +++ b/internal/services/users_service/service.go @@ -369,7 +369,7 @@ func (s *UsersService) DeleteUserRole( var ( ErrPasswordChangeForbidden = errors.New("Изменять чужой пароль может только администратор") - ErrInvalidPasswordChange = errors.New("Укажите чужой положительный ID и пароль от 12 символов до 72 байт") + ErrInvalidPasswordChange = errors.New("Укажите чужой положительный ID и пароль от 8 символов до 72 байт") ) // ChangeUserPassword сохраняет только хеш; действующие сеансы не изменяются. @@ -384,7 +384,7 @@ func (s *UsersService) ChangeUserPassword(ctx context.Context, actorID, userID i if !slices.Contains(actor.Roles, roles.Admin) { return ErrPasswordChangeForbidden } - if userID <= 0 || userID == actorID || !utf8.ValidString(password) || utf8.RuneCountInString(password) < 12 || len(password) > 72 { + if userID <= 0 || userID == actorID || !utf8.ValidString(password) || utf8.RuneCountInString(password) < 8 || len(password) > 72 { return ErrInvalidPasswordChange } user, err := s.usersRepo.GetUserByID(ctx, userID) diff --git a/internal/services/users_service/service_test.go b/internal/services/users_service/service_test.go index 86ff47a..fd46453 100644 --- a/internal/services/users_service/service_test.go +++ b/internal/services/users_service/service_test.go @@ -157,7 +157,7 @@ func newTestServiceWithBaseURL(repo usersRepository, sender email_sender.IEmailS } return NewUsersService( repo, - password_generator.NewGenerator(12), + password_generator.NewGenerator(8), sender, processor_jwt.NewProcessor("test-secret"), refresh_tokens_repo.NewRefreshTokensRepo(pool),