Conversation
The declared pattern was an alternation, so any of its branches was enough: abcdefgh, aaaaaaaaaaaa and eight spaces were accepted while the description promised a number, an uppercase letter, a lowercase letter and a special character. A field_validator now rejects a password missing any of the four classes, and min_length stays. Pydantic compiles pattern with the Rust regex crate, which has no lookahead, so the check cannot be expressed as a corrected pattern. Refs benavlabs#298
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Refs #298 — this is the interim option from the issue; the move to a crudauth
PasswordPolicystill follows once #292 lands.UserCreate.passworddeclaredpattern=r"^.{8,}|[0-9]+|[A-Z]+|[a-z]+|[^a-zA-Z0-9]+$". Because that is a top-level alternation, a password only has to match one branch, soabcdefgh,aaaaaaaaaaaaand eight spaces were all accepted while the description promised a number, an uppercase letter, a lowercase letter and a special character.A
field_validatornow rejects a password that is missing any of the four classes, naming the one that is missing.min_length=8stays as it was. A correctedpatterncannot express this: pydantic compilespatternwith the Rust regex crate, which has no lookahead.Tests cover each character class, the documented example, and the length boundary.
pytest tests/unit/modules/user/test_schemas.py— 10 passed; 7 of the 10 fail without the change. The fulltests/unitsuite is 260 passed,ruff check backend/src cli/src backend/testsis clean, andmypy srcreports only the three pre-existing errors in the redis backends.