From cf14bcbb4be7f78d9caa081fb1dc4ba8d7c1ea92 Mon Sep 17 00:00:00 2001 From: Laurent Date: Tue, 4 Mar 2025 09:55:46 +0100 Subject: [PATCH] Raise error if we find users with the same letters, case-insensitive wise --- api/views.py | 2 +- tournaments/signals.py | 9 ++++++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/api/views.py b/api/views.py index 0f12567..b2f2d8f 100644 --- a/api/views.py +++ b/api/views.py @@ -59,7 +59,7 @@ class CustomAuthToken(APIView): user = CustomUser.objects.get(email=email) return user.username except ObjectDoesNotExist: - return None # or handle the case where the user doesn't exist + return None class Logout(APIView): permission_classes = (IsAuthenticated,) diff --git a/tournaments/signals.py b/tournaments/signals.py index 494a623..368b768 100644 --- a/tournaments/signals.py +++ b/tournaments/signals.py @@ -1,11 +1,12 @@ import random import string -from django.db.models.signals import post_save, pre_delete, post_delete +from django.db.models.signals import pre_save, post_save, pre_delete, post_delete from django.dispatch import receiver from django.conf import settings from tournaments.models.tournament import Tournament from tournaments.models.unregistered_player import UnregisteredPlayer from django.utils import timezone +from django.db.utils import IntegrityError from .models import Club, FailedApiCall, CustomUser, Log, TeamRegistration, PlayerRegistration, UnregisteredTeam, UnregisteredPlayer import requests @@ -14,6 +15,12 @@ from tournaments.models import PlayerDataSource from shared.discord import send_discord_log_message, send_discord_failed_calls_message +@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(): characters = string.ascii_lowercase + string.digits while True: