
- Log in is ok with token - Making people appear in chat but only works when you press private a second time
74 lines
2.0 KiB
Python
74 lines
2.0 KiB
Python
from typeRequets.getPrivateListUser import getPrivateListUser
|
|
import asyncio
|
|
import websockets
|
|
import json
|
|
|
|
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"]
|
|
functionRequest = [getPrivateListUser]
|
|
|
|
async def sendError(websocket, message, code):
|
|
jsonVar = {"type": "error", "content": message, "code": code}
|
|
await websocket.send(json.dumps(jsonVar))
|
|
|
|
async def sendInfoUser(websocket):
|
|
token = websocket.request_headers.get('Sec-WebSocket-Protocol')
|
|
user = [user for user in userList if user['token'] == token][0]
|
|
jsonVar = {"type": "login", "content": user}
|
|
await websocket.send(json.dumps(jsonVar))
|
|
|
|
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):
|
|
if (not await isValidToken(websocket)):
|
|
await websocket.close(reason="Invalid token")
|
|
return
|
|
try:
|
|
async for resquet in websocket:
|
|
try:
|
|
jsonRequest = json.loads(resquet)
|
|
except json.JSONDecodeError:
|
|
await sendError(websocket, "Invalid JSON", 9002)
|
|
continue
|
|
try:
|
|
if (jsonRequest["token"][0] != websocket.request_headers.get('Sec-WebSocket-Protocol')):
|
|
await sendError(websocket, "Invalid token", 9000)
|
|
continue
|
|
except:
|
|
await sendError(websocket, "Token not found", 9001)
|
|
continue
|
|
if (jsonRequest["type"] in typeRequest):
|
|
await functionRequest[typeRequest.index(jsonRequest["type"])](websocket)
|
|
|
|
except websockets.ConnectionClosed:
|
|
print("Client déconnecté")
|
|
|
|
start_server = websockets.serve(handler, "localhost", 8000, subprotocols=['123456'])
|
|
|
|
asyncio.get_event_loop().run_until_complete(start_server)
|
|
asyncio.get_event_loop().run_forever() |