fix password rules on server side

This commit is contained in:
2024-09-06 18:54:55 +02:00
parent 949d94d604
commit dfe2dd1562
2 changed files with 29 additions and 24 deletions

View File

@ -6,7 +6,7 @@
# By: edbernar <edbernar@student.42angouleme. +#+ +:+ +#+ # # By: edbernar <edbernar@student.42angouleme. +#+ +:+ +#+ #
# +#+#+#+#+#+ +#+ # # +#+#+#+#+#+ +#+ #
# Created: 2024/08/09 08:08:00 by edbernar #+# #+# # # 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 json
import hashlib import hashlib
pattern = r'^(?=.*[a-z])(?=.*[A-Z])(?=.*[\W_]).+$' mail_pattern = "^((?!\.)[\w\-_.]*[^.])(@\w+)(\.\w+(\.\w+)?[^.\W])$"
password_pattern = "^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@$%^&*-]).{8,}$"
# {'username': 'Kumita', 'mail': 'eddydhj@gmail.com', 'password': '3b19482535d1ab2f4e3c629c4e3e5e2d6af0a5f5280be190726a4c3be518a475'}
def createAccount(socket, content): def createAccount(socket, content):
try: try:
content["mail"] = content["mail"].lower() if (not bool(re.match(mail_pattern, content["mail"]))):
if (content["mail"].find('@') == -1 or content["mail"].find('.') == -1): socket.sendError("Invalid mail", 9014)
socket.sendError("Invalid mail", 9006)
return return
if (content["username"].find(' ') != -1): if (content["username"].find(' ') != -1):
socket.sendError("Username must not contain spaces", 9007) socket.sendError("Username must not contain spaces", 9015)
return return
if (len(content["username"]) < 3): 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 return
if (len(content["username"]) > 20): if (len(content["username"]) > 20):
socket.sendError("Username must be at most 20 characters long", 9009) socket.sendError("Username must be at most 20 characters long", 9017)
return
if (content["username"].find(' ') != -1):
socket.sendError("Username must not contain spaces", 9011)
return return
if (content["username"].isalnum() == False): 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 return
if (len(content["password"]) < 8): 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 return
if (bool(re.match(pattern, content["password"]))): 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", 9014) socket.sendError("Password must contain at least one lowercase letter, one uppercase letter and one special character", 9020)
return return
if (content["password"].find(content["username"]) != -1): 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 return
if (len(User.objects.filter(mail=content["mail"]))): if (User.objects.filter(mail=content["mail"]).exists()):
socket.sendError("Mail already used", 9016) socket.sendError("Mail already used", 9022)
return return
if (len(User.objects.filter(username=content["username"]))): if (User.objects.filter(username=content["username"]).exists()):
socket.sendError("Username already used", 9017) socket.sendError("Username already used", 9023)
return return
password = hashlib.md5((content["mail"] + content["password"]).encode()).hexdigest() password = hashlib.md5((content["mail"] + content["password"]).encode()).hexdigest()
new_user = User.objects.create(username=content["username"], mail=content["mail"], password=password) new_user = User.objects.create(username=content["username"], mail=content["mail"], password=password)
@ -66,4 +60,4 @@ def createAccount(socket, content):
else: else:
socket.sendError("Already logged in", 9012) socket.sendError("Already logged in", 9012)
except Exception as e: 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 - 9011 : Not user registered with this 42 account
- 9012 : Already logged in - 9012 : Already logged in
- 9013 : User already connected - 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