fix password rules on server side
This commit is contained in:
@ -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)
|
||||||
|
@ -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
|
||||||
|
Reference in New Issue
Block a user