fix password rules on server side

This commit is contained in:
2024-09-06 18:54:55 +02:00
parent 4a54997f0f
commit 6c6ad4e395
2 changed files with 29 additions and 24 deletions

View File

@ -6,7 +6,7 @@
# By: edbernar <edbernar@student.42angouleme. +#+ +:+ +#+ #
# +#+#+#+#+#+ +#+ #
# Created: 2024/08/09 08:08:00 by edbernar #+# #+# #
# Updated: 2024/08/27 23:20:40 by tomoron ### ########.fr #
# Updated: 2024/09/06 18:53:05 by tomoron ### ########.fr #
# #
# **************************************************************************** #
@ -17,46 +17,40 @@ import re
import json
import hashlib
pattern = r'^(?=.*[a-z])(?=.*[A-Z])(?=.*[\W_]).+$'
# {'username': 'Kumita', 'mail': 'eddydhj@gmail.com', 'password': '3b19482535d1ab2f4e3c629c4e3e5e2d6af0a5f5280be190726a4c3be518a475'}
mail_pattern = "^((?!\.)[\w\-_.]*[^.])(@\w+)(\.\w+(\.\w+)?[^.\W])$"
password_pattern = "^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@$%^&*-]).{8,}$"
def createAccount(socket, content):
try:
content["mail"] = content["mail"].lower()
if (content["mail"].find('@') == -1 or content["mail"].find('.') == -1):
socket.sendError("Invalid mail", 9006)
if (not bool(re.match(mail_pattern, content["mail"]))):
socket.sendError("Invalid mail", 9014)
return
if (content["username"].find(' ') != -1):
socket.sendError("Username must not contain spaces", 9007)
socket.sendError("Username must not contain spaces", 9015)
return
if (len(content["username"]) < 3):
socket.sendError("Username must be at least 3 characters long", 9008)
socket.sendError("Username must be at least 3 characters long", 9016)
return
if (len(content["username"]) > 20):
socket.sendError("Username must be at most 20 characters long", 9009)
return
if (content["username"].find(' ') != -1):
socket.sendError("Username must not contain spaces", 9011)
socket.sendError("Username must be at most 20 characters long", 9017)
return
if (content["username"].isalnum() == False):
socket.sendError("Username must contain only letters and numbers", 9012)
socket.sendError("Username must contain only letters and numbers", 9018)
return
if (len(content["password"]) < 8):
socket.sendError("Password must be at least 8 characters long", 9013)
socket.sendError("Password must be at least 8 characters long", 9019)
return
if (bool(re.match(pattern, content["password"]))):
socket.sendError("Password must contain at least one lowercase letter, one uppercase letter and one special character", 9014)
if (not bool(re.match(password_pattern, content["password"]))):
socket.sendError("Password must contain at least one lowercase letter, one uppercase letter and one special character", 9020)
return
if (content["password"].find(content["username"]) != -1):
socket.sendError("Password must not contain the username", 9015)
socket.sendError("Password must not contain the username", 9021)
return
if (len(User.objects.filter(mail=content["mail"]))):
socket.sendError("Mail already used", 9016)
if (User.objects.filter(mail=content["mail"]).exists()):
socket.sendError("Mail already used", 9022)
return
if (len(User.objects.filter(username=content["username"]))):
socket.sendError("Username already used", 9017)
if (User.objects.filter(username=content["username"]).exists()):
socket.sendError("Username already used", 9023)
return
password = hashlib.md5((content["mail"] + content["password"]).encode()).hexdigest()
new_user = User.objects.create(username=content["username"], mail=content["mail"], password=password)
@ -66,4 +60,4 @@ def createAccount(socket, content):
else:
socket.sendError("Already logged in", 9012)
except Exception as e:
socket.sendError("Error create account", 9005, e)
socket.sendError("An error occured while creating the account", 9024, e)

View File

@ -15,3 +15,14 @@
- 9011 : Not user registered with this 42 account
- 9012 : Already logged in
- 9013 : User already connected
- 9014 : Invalid mail
- 9015 : Username must not contain spaces
- 9016 : Username must be at least 3 characters long
- 9017 : Username must be at most 20 characters long
- 9018 : Username must contain only letters and numbers
- 9019 : Password must be at least 8 characters long
- 9020 : Password must contain at least one lowercase letter, one uppercase letter and one special character
- 9021 : Password must not contain the username
- 9022 : Mail already used
- 9023 : Username already used
- 9024 : An error occured while creating the account