Forbids same username case-insensitiveless

redesign-tournament-list
Laurent 8 months ago
parent aa339d0807
commit 0672184d46
  1. 8
      api/serializers.py
  2. 8
      tournaments/forms.py
  3. 10
      tournaments/views.py

@ -3,12 +3,16 @@ from tournaments.models.court import Court
from tournaments.models import Club, LiveMatch, TeamScore, Tournament, CustomUser, Event, Round, GroupStage, Match, TeamRegistration, PlayerRegistration, Purchase, FailedApiCall, DateInterval, Log, DeviceToken, UnregisteredTeam, UnregisteredPlayer from tournaments.models import Club, LiveMatch, TeamScore, Tournament, CustomUser, Event, Round, GroupStage, Match, TeamRegistration, PlayerRegistration, Purchase, FailedApiCall, DateInterval, Log, DeviceToken, UnregisteredTeam, UnregisteredPlayer
from django.contrib.auth import password_validation from django.contrib.auth import password_validation
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from django.db.utils import IntegrityError
from django.conf import settings
# email # email
from django.template.loader import render_to_string from django.template.loader import render_to_string
from django.utils.http import urlsafe_base64_encode, urlsafe_base64_decode from django.utils.http import urlsafe_base64_encode, urlsafe_base64_decode
from django.utils.encoding import force_bytes from django.utils.encoding import force_bytes
from django.core.mail import EmailMessage from django.core.mail import EmailMessage
from django.contrib.sites.shortcuts import get_current_site from django.contrib.sites.shortcuts import get_current_site
from api.tokens import account_activation_token from api.tokens import account_activation_token
from shared.cryptography import encryption_util from shared.cryptography import encryption_util
@ -48,6 +52,9 @@ class UserSerializer(serializers.ModelSerializer):
if 'country' in validated_data: if 'country' in validated_data:
country = validated_data['country'] country = validated_data['country']
if CustomUser.objects.filter(username__iexact=validated_data['username'].lower()):
raise IntegrityError("Le nom d'utilisateur existe déjà")
user = CustomUser.objects.create_user( user = CustomUser.objects.create_user(
username=validated_data['username'], username=validated_data['username'],
email=validated_data['email'], email=validated_data['email'],
@ -73,6 +80,7 @@ class UserSerializer(serializers.ModelSerializer):
origin=UserOrigin.APP, origin=UserOrigin.APP,
) )
if not settings.DEBUG:
self.send_email(self.context['request'], user) self.send_email(self.context['request'], user)
# RegistrationProfile.objects.filter(user=user).send_activation_email() # RegistrationProfile.objects.filter(user=user).send_activation_email()

@ -58,6 +58,14 @@ class SimpleCustomUserCreationForm(UserCreationForm):
'password2': 'Confirmer le mot de passe', 'password2': 'Confirmer le mot de passe',
} }
def clean_username(self):
username = self.cleaned_data.get('username')
if username:
username = username.lower()
if CustomUser.objects.filter(username__iexact=username).exists():
raise forms.ValidationError("Le nom d'utilisateur existe déjà")
return username
class CustomUserChangeForm(UserChangeForm): class CustomUserChangeForm(UserChangeForm):

@ -1,17 +1,21 @@
# Standard library imports # Standard library imports
import os import os
import csv import csv
from django.shortcuts import render, get_object_or_404 from django.shortcuts import render, get_object_or_404
from django.http import HttpResponse from django.http import JsonResponse, HttpResponse
from django.utils.encoding import force_str from django.utils.encoding import force_str
from django.utils.http import urlsafe_base64_encode, urlsafe_base64_decode from django.utils.http import urlsafe_base64_encode, urlsafe_base64_decode
from django.urls import reverse from django.urls import reverse
from django.conf import settings
from django.views.decorators.csrf import csrf_exempt from django.views.decorators.csrf import csrf_exempt
from django.contrib.admin.views.decorators import staff_member_required from django.contrib.admin.views.decorators import staff_member_required
from django.core.files.storage import default_storage from django.core.files.storage import default_storage
from django.core.files.base import ContentFile from django.core.files.base import ContentFile
from django.views.generic import View from django.views.generic import View
from django.db.models import Q
from django.template import loader
from tournaments.models.device_token import DeviceToken from tournaments.models.device_token import DeviceToken
@ -20,10 +24,7 @@ from .models import TeamSummon
from datetime import datetime, timedelta from datetime import datetime, timedelta
import time import time
from django.template import loader
from datetime import date from datetime import date
from django.http import JsonResponse, HttpResponse
from django.db.models import Q
import json import json
import time import time
import asyncio import asyncio
@ -638,6 +639,7 @@ def signup(request):
user.origin = UserOrigin.SITE user.origin = UserOrigin.SITE
user.save() user.save()
if not settings.DEBUG:
send_verification_email(request, user, next_url) send_verification_email(request, user, next_url)
return render(request, 'registration/signup_success.html', { return render(request, 'registration/signup_success.html', {

Loading…
Cancel
Save