From 9cfdf5a6c20133847eb15444134efab89cbce16c Mon Sep 17 00:00:00 2001 From: Arnav Brahmasandra Date: Thu, 30 Nov 2023 13:34:08 -0600 Subject: [PATCH] ensure that username not all numeric #321 --- src/chigame/users/models.py | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/chigame/users/models.py b/src/chigame/users/models.py index acb911a5..ae7cd55e 100644 --- a/src/chigame/users/models.py +++ b/src/chigame/users/models.py @@ -2,6 +2,7 @@ from django.contrib.auth.models import AbstractUser from django.contrib.contenttypes.fields import GenericForeignKey from django.contrib.contenttypes.models import ContentType +from django.core.exceptions import ValidationError from django.core.validators import MaxValueValidator from django.urls import reverse from django.utils import timezone @@ -10,6 +11,14 @@ from chigame.users.managers import UserManager +def validate_username(value): + """ + Validate that the username is not all numeric. + """ + if value.isdigit(): + raise ValidationError(_("Username cannot be all numbers."), code="invalid_username") + + class User(AbstractUser): """ Default custom user model for ChiGame. @@ -22,7 +31,9 @@ class User(AbstractUser): first_name = None # type: ignore last_name = None # type: ignore email = models.EmailField(_("email address"), unique=True) - username = models.CharField(_("username"), max_length=255, unique=True, blank=True, null=True) + username = models.CharField( + _("username"), max_length=255, unique=True, blank=True, null=True, validators=[validate_username] + ) tokens = models.PositiveSmallIntegerField(validators=[MaxValueValidator(3)], default=1) USERNAME_FIELD = "email" @@ -30,6 +41,10 @@ class User(AbstractUser): objects = UserManager() + def clean(self) -> None: + super().clean() + self.validate_username(self.username) + def get_absolute_url(self) -> str: """Get URL for user's detail view.