Add password validation for email auth - #265
Conversation
## Изменения Сделал баг фикс. Теперь проверка проходит по всему дереву ## Детали реализации Создал функцию для проверки всех членов дерева, которая позже применяется в коде ## Check-List - [x] Вы проверили свой код перед отправкой запроса? - [x] Вы написали тесты к реализованным функциям? - [x] Вы не забыли применить форматирование `black` и `isort` для _Back-End_ или `Prettier` для _Front-End_?
|
сделай git rebase, надо подтянуть изменения с коммита Артема, который я замерджил вчера p.s. можно и через кнопку update branch (если она есть у тебя, находится внизу пр рядом с галочками all checks passed) сделать это, но тогда проверь что конфликтов кода не должно быть с последним мерджем |
petrCher
left a comment
There was a problem hiding this comment.
отревьюил пока что без тестов, в целом можешь уже начать менять, ревью тестов сейчас тоже уже начну
| from pydantic.json_schema import JsonSchemaValue | ||
| from pydantic_core import core_schema | ||
|
|
||
| PASSWORD_MIN_LENGTH = 8 |
There was a problem hiding this comment.
надо эту переменную перенести в settings и здесь ее просто оттуда импортировать
в settings надо, так как все переменные окружения лежат там, чтобы можно было их не прописывать вручную в коде, а дать возможность не меняя код в секретах репозитория в environments values задать то, что хочется. Конечно, можно и не задавать свои значения будет, тогда возьмутся значения дефолта, то есть =8 как ты и пропишешь
также, когда перенесешь это в settings надо еще в github/workflows в test и prod прописать аналогичные команды как здесь https://github.com/profcomff/auth-api/blob/main/.github/workflows/build_and_publish.yml#L147
There was a problem hiding this comment.
Вск сделал, как ты сказал, только так как сам в секретах писать не могу, в строчке написал так:
--env PASSWORD_MIN_LENGTH='${{ vars.PASSWORD_MIN_LENGTH || '8' }}'
--env PASSWORD_MAX_LENGTH='${{ vars.PASSWORD_MAX_LENGTH || '32' }}'
Можешь пожалуйста сам добавить значения переменных в секреты
petrCher
left a comment
There was a problem hiding this comment.
все отревьюил, можно исправлять)
|
@Georgon не забудь только пж, что для моих комментов которые исправил сделай resolved, а для того что не менял по моим комментам ответь своим комментом почему |
|
Исправил все, как ты сказал, кроме одного места с секретными значениями. Там нужна твоя помощь, написал коммент |
Введена новая политика пароля:
Разрешены:
Запрещены пробелы, \n, \t, кириллица, буквы с диакритикой и вообще символы вне ASCII.
При этом я специально не применял новые ограничения к паролю при логине и к полю старого пароля при смене. Это важно для обратной совместимости: пользователь, зарегистрированный раньше с паролем вроде пароль123, по-прежнему сможет войти. Но установить такой пароль заново уже нельзя.
Основные изменения хранятся в auth_backend/schemas/types/password.py - новый файл, где централизовано хранятся условия на пароль: PASSWORD_MIN_LENGTH = 8, PASSWORD_MAX_LENGTH = 32, набор разрешённых символов, validate_password() и Pydantic-тип Password. В OpenAPI добавлены minLength, maxLength, pattern, format=password и текстовое описание требований.
Создание пользователя через CLI теперь тоже не позволяет обойти политику пароля.
Добавлены новые тесты: tests/test_unit/test_password.py - проверяются длина, Unicode, пробел, \n, \t, все ASCII-спецсимволы и данные, которые попадут в OpenAPI; tests/test_routes/test_registration.py и test_change_password.py - добавлены проверки, что короткие и недопустимые пароли дают 422.
Также изменен README и Makefile под новые правила пароля.
Closes #246