Skip to content

Commit

Permalink
Add validate username by regex =)
Browse files Browse the repository at this point in the history
  • Loading branch information
Roman505050 committed Nov 7, 2024
1 parent 1dae9be commit 4316d37
Show file tree
Hide file tree
Showing 4 changed files with 24 additions and 3 deletions.
4 changes: 3 additions & 1 deletion src/core/application/user/dto/user.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,9 @@ class LoginUserDTO(BaseModel):


class RegisterUserDTO(BaseModel):
username: str = Field(min_length=3, max_length=64)
username: str = Field(
min_length=3, max_length=64, pattern=r"^[a-zA-Z0-9_]*$"
)
email: EmailStr = Field(max_length=100)
password: SecretStr = Field(min_length=6, max_length=64)

Expand Down
6 changes: 6 additions & 0 deletions src/core/domain/user/entities/user.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
from dataclasses import dataclass
from uuid import UUID
import re

from core.domain.user.entities.role import RoleEntity

Expand All @@ -20,3 +21,8 @@ def _validate(self):
raise ValueError("Email is too long")
if not 3 <= len(self.username) <= 64:
raise ValueError("Username must be between 3 and 64 characters")
pattern = re.compile(r"^[a-zA-Z0-9_]+$")
if not pattern.match(self.username):
raise ValueError(
"Username must only contain letters, numbers, and underscores."
)
14 changes: 13 additions & 1 deletion src/presentation/app/blueprints/auth/forms.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,24 @@
Length,
Email,
EqualTo,
Regexp,
)


class RegistrationForm(FlaskForm):
username = StringField(
"Username", validators=[DataRequired(), Length(min=3, max=64)]
"Username",
validators=[
DataRequired(),
Length(min=3, max=64),
Regexp(
r"^[a-zA-Z0-9_]+$",
message=(
"Username must only contain letters, "
"numbers, and underscores."
),
),
],
)
email = StringField(
"Email", validators=[DataRequired(), Email(), Length(max=100)]
Expand Down
3 changes: 2 additions & 1 deletion src/presentation/app/blueprints/auth/templates/register.html
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,8 @@ <h2>Реєстрація</h2>
{{ form.hidden_tag() }}
<div class="form-group {% if form.username.errors %}has-error{% endif %}">
{{ form.username.label }}
{{ form.username(size=32, class_="form-control") }}
{{ form.username(size=32, class_="form-control", pattern="^[a-zA-Z0-9_]+$", title="Username must
only contain letters, numbers, and underscores") }}
<div class="error-message">
{% for error in form.username.errors %}
{{ error }}
Expand Down

0 comments on commit 4316d37

Please sign in to comment.