update login websocket

This commit is contained in:
edbernar
2024-08-03 09:12:45 +02:00
parent e5b6b3bf3a
commit 881c2f8200
8 changed files with 97 additions and 56 deletions

View File

@ -4,4 +4,6 @@
- 9000 : Invalid token - 9000 : Invalid token
- 9001 : Token not found - 9001 : Token not found
- 9002 : Invalid json - 9002 : Invalid json
- 9003 : Invalid path - 9003 : Invalid path
- 9004 : Invalid type
- 9005 : Invalid request

View File

@ -1,53 +1,49 @@
# **************************************************************************** #
# #
# ::: :::::::: #
# main.py :+: :+: :+: #
# +:+ +:+ +:+ #
# By: edbernar <edbernar@student.42.fr> +#+ +:+ +#+ #
# +#+#+#+#+#+ +#+ #
# Created: 2024/08/03 08:10:40 by edbernar #+# #+# #
# Updated: 2024/08/03 08:46:38 by edbernar ### ########.fr #
# #
# **************************************************************************** #
from typeRequets.getPrivateListUser import getPrivateListUser from typeRequets.getPrivateListUser import getPrivateListUser
import asyncio from typeRequets.login import login, userList
import websockets import websockets
import asyncio
import json import json
connected_clients = set() connected_clients = set()
userList = [
{
"username": "user1",
"token": "123456",
"id": 1
},
{
"username": "user2",
"token": "789123",
"id": 2
},
{
"username": "user3",
"token": "456789",
"id": 3
}
]
typeRequest = ["get_private_list_user"] class userInfo(websockets.WebSocketServerProtocol):
functionRequest = [getPrivateListUser] def __init__(self, websocket):
self.websocket = websocket
self.username = ""
self.token = ""
self.id = 0
typeRequest = ["login", "get_private_list_user"]
functionRequest = [login, getPrivateListUser]
async def sendError(websocket, message, code): async def sendError(websocket, message, code):
jsonVar = {"type": "error", "content": message, "code": code} jsonVar = {"type": "error", "content": message, "code": code}
await websocket.send(json.dumps(jsonVar)) await websocket.send(json.dumps(jsonVar))
async def sendInfoUser(websocket): def verifyToken(websocket, token):
token = websocket.request_headers.get('Sec-WebSocket-Protocol') for user in userList:
user = [user for user in userList if user['token'] == token][0] if (user["token"] == token):
jsonVar = {"type": "login", "content": user} return True
await websocket.send(json.dumps(jsonVar)) return False
async def isValidToken(websocket):
token = websocket.request_headers.get('Sec-WebSocket-Protocol')
# |TOM| Faire une requête à la base de données pour vérifier si le token est valide
if (token in [user['token'] for user in userList]):
await sendInfoUser(websocket)
return True
else:
return False
async def handler(websocket, path): async def handler(websocket, path):
if (not await isValidToken(websocket)): if (path != "/"):
await websocket.close(reason="Invalid token") await sendError(websocket, "Invalid path", 9003)
await websocket.close()
return return
connected_clients.add(userInfo(websocket))
try: try:
async for resquet in websocket: async for resquet in websocket:
try: try:
@ -56,19 +52,24 @@ async def handler(websocket, path):
await sendError(websocket, "Invalid JSON", 9002) await sendError(websocket, "Invalid JSON", 9002)
continue continue
try: try:
if (jsonRequest["token"][0] != websocket.request_headers.get('Sec-WebSocket-Protocol')): if (jsonRequest["type"] in typeRequest):
await sendError(websocket, "Invalid token", 9000) if jsonRequest["type"] == "login":
continue await functionRequest[typeRequest.index(jsonRequest["type"])](websocket, jsonRequest["content"])
else:
if (verifyToken(websocket, jsonRequest["token"]) == False):
await sendError(websocket, "Invalid token", 9001)
continue
await functionRequest[typeRequest.index(jsonRequest["type"])](websocket)
else:
await sendError(websocket, "Invalid type", 9004)
except: except:
await sendError(websocket, "Token not found", 9001) await sendError(websocket, "Invalid request", 9005)
continue
if (jsonRequest["type"] in typeRequest):
await functionRequest[typeRequest.index(jsonRequest["type"])](websocket)
except websockets.ConnectionClosed: except websockets.ConnectionClosed:
connected_clients.remove(websocket)
print("Client déconnecté") print("Client déconnecté")
start_server = websockets.serve(handler, "localhost", 8000, subprotocols=['123456']) start_server = websockets.serve(handler, "localhost", 8000, subprotocols=['123456'])
asyncio.get_event_loop().run_until_complete(start_server) asyncio.get_event_loop().run_until_complete(start_server)
print("Server started")
asyncio.get_event_loop().run_forever() asyncio.get_event_loop().run_forever()

View File

@ -0,0 +1,36 @@
# **************************************************************************** #
# #
# ::: :::::::: #
# login.py :+: :+: :+: #
# +:+ +:+ +:+ #
# By: edbernar <edbernar@student.42.fr> +#+ +:+ +#+ #
# +#+#+#+#+#+ +#+ #
# Created: 2024/08/03 08:10:38 by edbernar #+# #+# #
# Updated: 2024/08/03 08:46:00 by edbernar ### ########.fr #
# #
# **************************************************************************** #
import asyncio
import websockets
import json
userList = [
{
"username": "user1",
"token": "123456",
"id": 1
},
{
"username": "user2",
"token": "789123",
"id": 2
},
{
"username": "user3",
"token": "456789",
"id": 3
}
]
async def login(websocket, content):
print(content)

View File

@ -3,10 +3,10 @@
/* ::: :::::::: */ /* ::: :::::::: */
/* main.js :+: :+: :+: */ /* main.js :+: :+: :+: */
/* +:+ +:+ +:+ */ /* +:+ +:+ +:+ */
/* By: edbernar <edbernar@student.42angouleme. +#+ +:+ +#+ */ /* By: edbernar <edbernar@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2024/07/30 13:50:35 by edbernar #+# #+# */ /* Created: 2024/07/30 13:50:35 by edbernar #+# #+# */
/* Updated: 2024/08/02 03:09:12 by edbernar ### ########.fr */ /* Updated: 2024/08/03 08:31:07 by edbernar ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@ -29,7 +29,7 @@ function liveChat() {
chatDiv.style.display = "flex"; chatDiv.style.display = "flex";
gameButtonChatHome.removeAttribute("id"); gameButtonChatHome.removeAttribute("id");
privateButtonChatHome.setAttribute("id", "selected"); privateButtonChatHome.setAttribute("id", "selected");
await showListUserMessage(userList); await showListUserMessage();
}); });
topChatHomeCross.addEventListener("click", () => { topChatHomeCross.addEventListener("click", () => {
chatDiv.style.display = "none"; chatDiv.style.display = "none";
@ -38,7 +38,7 @@ function liveChat() {
privateButtonChatHome.addEventListener("click", async () => { privateButtonChatHome.addEventListener("click", async () => {
gameButtonChatHome.removeAttribute("id"); gameButtonChatHome.removeAttribute("id");
privateButtonChatHome.setAttribute("id", "selected"); privateButtonChatHome.setAttribute("id", "selected");
await showListUserMessage(userList); await showListUserMessage();
}); });
gameButtonChatHome.addEventListener("click", () => { gameButtonChatHome.addEventListener("click", () => {
privateButtonChatHome.removeAttribute("id"); privateButtonChatHome.removeAttribute("id");
@ -47,13 +47,14 @@ function liveChat() {
}); });
} }
async function showListUserMessage(userList) { async function showListUserMessage() {
const divMessageListChatHome = document.getElementById("messageListChatHome"); const divMessageListChatHome = document.getElementById("messageListChatHome");
let divUser; let divUser;
socket.send(JSON.stringify({ socket.send(JSON.stringify({
type: 'get_private_list_user', type: 'get_private_list_user',
token: token, token: token,
content: {}
})); }));
await waitForUserList(); await waitForUserList();

View File

@ -3,10 +3,10 @@
/* ::: :::::::: */ /* ::: :::::::: */
/* typePrivateListUser.js :+: :+: :+: */ /* typePrivateListUser.js :+: :+: :+: */
/* +:+ +:+ +:+ */ /* +:+ +:+ +:+ */
/* By: edbernar <edbernar@student.42angouleme. +#+ +:+ +#+ */ /* By: edbernar <edbernar@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2024/08/02 01:56:15 by edbernar #+# #+# */ /* Created: 2024/08/02 01:56:15 by edbernar #+# #+# */
/* Updated: 2024/08/02 03:09:04 by edbernar ### ########.fr */ /* Updated: 2024/08/02 11:42:46 by edbernar ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@ -27,6 +27,7 @@ function waitForUserList() {
function typePrivateListUser(list) { function typePrivateListUser(list) {
userList = list; userList = list;
userListAvailable = true; userListAvailable = true;
console.log(userListResolve)
if (userListResolve) { if (userListResolve) {
userListResolve(); userListResolve();
userListResolve = null; userListResolve = null;

View File

@ -3,18 +3,18 @@
/* ::: :::::::: */ /* ::: :::::::: */
/* websocket.js :+: :+: :+: */ /* websocket.js :+: :+: :+: */
/* +:+ +:+ +:+ */ /* +:+ +:+ +:+ */
/* By: edbernar <edbernar@student.42angouleme. +#+ +:+ +#+ */ /* By: edbernar <edbernar@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2024/07/31 22:17:24 by edbernar #+# #+# */ /* Created: 2024/07/31 22:17:24 by edbernar #+# #+# */
/* Updated: 2024/08/02 03:00:42 by edbernar ### ########.fr */ /* Updated: 2024/08/03 08:46:22 by edbernar ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
import { typeLogin } from "./typeResponse/typeLogin.js"; import { typeLogin } from "./typeResponse/typeLogin.js";
import { typePrivateListUser } from "./typeResponse/typePrivateListUser.js"; import { typePrivateListUser } from "./typeResponse/typePrivateListUser.js";
const token = ['123456']; const socket = new WebSocket('ws://localhost:8000/');
const socket = new WebSocket('ws://localhost:8000/', token); const token = "123456";
const typeResponse = ["login", "private_list_user"]; const typeResponse = ["login", "private_list_user"];
const functionResponse = [typeLogin, typePrivateListUser]; const functionResponse = [typeLogin, typePrivateListUser];