diff --git a/docker-compose/requirements/djangoserver/file/server/server/templates/settingsPage.html b/docker-compose/requirements/djangoserver/file/server/server/templates/settingsPage.html index d82a824..9dd41cd 100644 --- a/docker-compose/requirements/djangoserver/file/server/server/templates/settingsPage.html +++ b/docker-compose/requirements/djangoserver/file/server/server/templates/settingsPage.html @@ -6,7 +6,7 @@ @@ -24,7 +24,7 @@ diff --git a/docker-compose/requirements/djangoserver/file/server/server/typeRequests/changePrivateInfo.py b/docker-compose/requirements/djangoserver/file/server/server/typeRequests/changePrivateInfo.py new file mode 100644 index 0000000..da76c08 --- /dev/null +++ b/docker-compose/requirements/djangoserver/file/server/server/typeRequests/changePrivateInfo.py @@ -0,0 +1,86 @@ +# **************************************************************************** # +# # +# ::: :::::::: # +# changePrivateInfo.py :+: :+: :+: # +# +:+ +:+ +:+ # +# By: edbernar 20): + socket.sendError("Username must be at most 20 characters long", 9017) + return + if (not all(c in "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_" for c in content["username"])): + socket.sendError("Username must contain only letters and numbers", 9018) + return + if (User.objects.filter(username=content["username"]).exists()): + socket.sendError("Username already used", 9023) + return + if (content.get("password")): + if (len(content["password"]) < 8): + socket.sendError("Password must be at least 8 characters long", 9019) + return + if (content["password"].find(content["username"]) != -1): + socket.sendError("Password must not contain the username", 9021) + return + 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.get("discord")): + if (len(content["discord"]) > 32): + socket.sendError("Discord must be at most 32 characters long", 9024) + return + if (not bool(re.match(discord_pattern, content["discord"]))): + socket.sendError("Discord must contain only letters, numbers and underscores or points", 9025) + return + + user = User.objects.get(id=socket.id) + if (content.get("username")): + user.username = content["username"] + socket.username = content["username"] + socket.scope["session"]['username'] = content["username"] + if (content.get("password")): + user.password = hashlib.sha256(user['mail' + content["password"]].encode()).hexdigest() + if (content.get("discord")): + if (content["discord"] != ""): + user.discord_username = content["discord"] + else: + user.discord_username = None + user.save() + socket.scope["session"].save() + socket.sync_send(json.dumps({"type": "change_private_info", "content": "Successfully updated."})) + except Exception as e: + socket.sendError("An unknown error occured", 9027, e) \ No newline at end of file diff --git a/docker-compose/requirements/djangoserver/file/server/server/typeRequests/getPrivateInfo.py b/docker-compose/requirements/djangoserver/file/server/server/typeRequests/getPrivateInfo.py new file mode 100644 index 0000000..f2a979f --- /dev/null +++ b/docker-compose/requirements/djangoserver/file/server/server/typeRequests/getPrivateInfo.py @@ -0,0 +1,28 @@ +# **************************************************************************** # +# # +# ::: :::::::: # +# getPrivateInfo.py :+: :+: :+: # +# +:+ +:+ +:+ # +# By: edbernar +#+ +:+ +#+ */ +/* By: edbernar { + if (status) + { + sendRequest("get_private_info", {}); + clearInterval(interval); + } + }, 200); + waitForPrivateInfo().then(data => { + console.log(data); + emailInput.value = data.mail ? data.mail : "Disabled because you have a 42 account." + passwordInput.value = newPasswordInput.value = confirmOasswordInput.value = data.is42Account ? "Disabled because you have a 42 account." : null; + if (data.is42Account) + { + passwordInput.style.backgroundColor = newPasswordInput.style.backgroundColor = confirmOasswordInput.style.backgroundColor = "#bbbbbb"; + passwordInput.type = newPasswordInput.type = confirmOasswordInput.type = 'text'; + } + discordInput.value = data.discord_username; + usernameInput.value = data.username; + + usernameSaveButton.addEventListener('click', () => { + sendRequest("change_private_info", {username: usernameInput.value}); + }); + discordSaveButton.addEventListener('click', () => { + sendRequest("change_private_info", {discord: discordInput.value}); + }); + }); + } static dispose() diff --git a/docker-compose/requirements/nginx/static/javascript/typeResponse/typePrivateInfo.js b/docker-compose/requirements/nginx/static/javascript/typeResponse/typePrivateInfo.js new file mode 100644 index 0000000..7fd350a --- /dev/null +++ b/docker-compose/requirements/nginx/static/javascript/typeResponse/typePrivateInfo.js @@ -0,0 +1,42 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* typePrivateInfo.js :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: edbernar { + if (PrivateInfoAvailable) + { + PrivateInfoAvailable = false; + resolve(PrivateInfo); + } + else + PrivateInfoResolve = resolve; + }); +} + +function typePrivateInfo(data) +{ + PrivateInfo = data; + PrivateInfoAvailable = true; + if (PrivateInfoResolve) + { + PrivateInfoResolve(PrivateInfo); + PrivateInfoResolve = null; + PrivateInfoAvailable = false; + } +} + +export { typePrivateInfo, waitForPrivateInfo }; \ No newline at end of file diff --git a/docker-compose/requirements/nginx/static/javascript/websocket.js b/docker-compose/requirements/nginx/static/javascript/websocket.js index bec3f78..fcdf394 100644 --- a/docker-compose/requirements/nginx/static/javascript/websocket.js +++ b/docker-compose/requirements/nginx/static/javascript/websocket.js @@ -6,7 +6,7 @@ /* By: edbernar