Raz 8 months ago
commit 18a684f760
  1. 8
      api/serializers.py
  2. 2
      api/views.py
  3. 8
      tournaments/forms.py
  4. 7
      tournaments/signals.py
  5. 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()

@ -59,7 +59,7 @@ class CustomAuthToken(APIView):
user = CustomUser.objects.get(email=email) user = CustomUser.objects.get(email=email)
return user.username return user.username
except ObjectDoesNotExist: except ObjectDoesNotExist:
return None # or handle the case where the user doesn't exist return None
class Logout(APIView): class Logout(APIView):
permission_classes = (IsAuthenticated,) permission_classes = (IsAuthenticated,)

@ -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):

@ -6,6 +6,7 @@ from django.conf import settings
from tournaments.models.tournament import Tournament from tournaments.models.tournament import Tournament
from tournaments.models.unregistered_player import UnregisteredPlayer from tournaments.models.unregistered_player import UnregisteredPlayer
from django.utils import timezone from django.utils import timezone
from django.db.utils import IntegrityError
from .models import Club, FailedApiCall, CustomUser, Log, TeamRegistration, PlayerRegistration, UnregisteredTeam, UnregisteredPlayer, TeamSortingType from .models import Club, FailedApiCall, CustomUser, Log, TeamRegistration, PlayerRegistration, UnregisteredTeam, UnregisteredPlayer, TeamSortingType
import requests import requests
@ -15,6 +16,12 @@ from tournaments.models import PlayerDataSource
from shared.discord import send_discord_log_message, send_discord_failed_calls_message from shared.discord import send_discord_log_message, send_discord_failed_calls_message
from datetime import datetime from datetime import datetime
# @receiver(pre_save, sender=CustomUser)
# def username_check(instance, sender, **kwargs):
# """Ensure that username unique constraint is case insensitive"""
# if sender.objects.filter(username__iexact=instance.username.lower()):
# raise IntegrityError("Le nom d'utilisateur existe déjà")
def generate_unique_code(): def generate_unique_code():
characters = string.ascii_lowercase + string.digits characters = string.ascii_lowercase + string.digits
while True: while True:

@ -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