This commit is contained in:
2026-09-13 00:38:31 +07:00
parent 9f818c6aad
commit 3e555c9944
3 changed files with 7 additions and 3 deletions
Binary file not shown.
@@ -31,7 +31,10 @@ func TestChangeUserPassword(t *testing.T) {
{"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},
{"16 characters", "admin", strings.Repeat("a", 16), 1, 2, nil},
{"17 characters", "admin", strings.Repeat("a", 17), 1, 2, ErrInvalidPasswordChange},
{"16 unicode characters", "admin", strings.Repeat("😀", 16), 1, 2, nil},
{"17 unicode characters", "admin", strings.Repeat("😀", 17), 1, 2, ErrInvalidPasswordChange},
} {
t.Run(tc.name, func(t *testing.T) {
r := newFakeRepo()
+3 -2
View File
@@ -369,7 +369,7 @@ func (s *UsersService) DeleteUserRole(
var (
ErrPasswordChangeForbidden = errors.New("Изменять чужой пароль может только администратор")
ErrInvalidPasswordChange = errors.New("Укажите чужой положительный ID и пароль от 8 символов до 72 байт")
ErrInvalidPasswordChange = errors.New("Укажите чужой положительный ID и пароль от 8 до 16 символов")
)
// ChangeUserPassword сохраняет только хеш; действующие сеансы не изменяются.
@@ -384,7 +384,8 @@ 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) < 8 || len(password) > 72 {
passwordLength := utf8.RuneCountInString(password)
if userID <= 0 || userID == actorID || !utf8.ValidString(password) || passwordLength < 8 || passwordLength > 16 {
return ErrInvalidPasswordChange
}
user, err := s.usersRepo.GetUserByID(ctx, userID)