update login websocket
This commit is contained in:
@ -5,3 +5,5 @@
|
|||||||
- 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
|
@ -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()
|
Binary file not shown.
Binary file not shown.
36
site/module_livechat/server/typeRequets/login.py
Normal file
36
site/module_livechat/server/typeRequets/login.py
Normal 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)
|
@ -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();
|
||||||
|
@ -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;
|
||||||
|
@ -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];
|
||||||
|
Reference in New Issue
Block a user