From 399cc20fb4da565b50b04e8094d2d5e925688726 Mon Sep 17 00:00:00 2001 From: Dustin Kroeger Date: Wed, 13 Mar 2024 23:18:30 +0100 Subject: [PATCH] Add username validation to registration forms --- core/forms.py | 20 +++++++++++++++----- core/views.py | 6 +++--- 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/core/forms.py b/core/forms.py index 453799b..498c49e 100644 --- a/core/forms.py +++ b/core/forms.py @@ -1,7 +1,7 @@ from django import forms from django.conf import settings from .models import PawUser - +from django.utils.translation import gettext_lazy as _ class UserChangeForm(forms.Form): email = forms.EmailField(required=True, widget=forms.EmailInput( @@ -20,10 +20,21 @@ class UserChangeForm(forms.Form): fields = ('email', 'profile_picture', 'language', 'telegram_username', 'use_darkmode') +USERNAME_REGEX_FIELD = forms.RegexField( + required=True, + label='Username', + max_length=50, + regex=r'^[a-zA-Z0-9-_@]+$', + error_messages={ + 'required': _('Please enter your name'), + 'invalid': _('Alphanumeric characters and underscores and dashes only (a-z, 0-9, _, -, @)') + }, + widget=forms.TextInput( + attrs={'placeholder': _('Username'), 'class': 'input input-bordered w-full'}), +) class RegisterForm(forms.Form): - username = forms.CharField(required=True, widget=forms.TextInput( - attrs={'class': 'input input-bordered w-full'})) + username = USERNAME_REGEX_FIELD email = forms.EmailField(required=True, widget=forms.EmailInput( attrs={'class': 'input input-bordered w-full'})) password = forms.CharField(required=True, widget=forms.PasswordInput( @@ -61,8 +72,7 @@ class RegisterForm(forms.Form): class AccountFinishForm(forms.Form): - username = forms.CharField(required=True, widget=forms.TextInput( - attrs={'class': 'input input-bordered w-full'})) + username = USERNAME_REGEX_FIELD class Meta: model = PawUser diff --git a/core/views.py b/core/views.py index 0548040..9138856 100644 --- a/core/views.py +++ b/core/views.py @@ -89,13 +89,13 @@ def google_callback_view(request): except Exception: return redirect("login") - user, created = PawUser.objects.get_or_create(email=user_info["email"]) + user, created = PawUser.objects.get_or_create(email=user_info["email"], username=user_info["email"]) if created: - GoogleSSOUser.objects.create(user=user, google_id=user_info["id"]) + GoogleSSOUser.objects.create(paw_user=user, google_id=user_info["id"]) login(request, user) - if created or not user.username: + if created or user.username == user.email: form = AccountFinishForm() return render(request, "core/account_finish.html", {"form": form}) -- 2.54.0