Livechat
- Fixed forgetting to import "showActualGameMessage" - Changed filename "launchPrivateChat" to "showPrivateChat.js" - Fixed bug on buttons "private" and "game" Global - Reorganize folders
This commit is contained in:
69
websocket-server/typeRequets/getPrivateListMessage.py
Normal file
69
websocket-server/typeRequets/getPrivateListMessage.py
Normal file
@ -0,0 +1,69 @@
|
||||
# **************************************************************************** #
|
||||
# #
|
||||
# ::: :::::::: #
|
||||
# getPrivateListMessage.py :+: :+: :+: #
|
||||
# +:+ +:+ +:+ #
|
||||
# By: edbernar <edbernar@student.42angouleme. +#+ +:+ +#+ #
|
||||
# +#+#+#+#+#+ +#+ #
|
||||
# Created: 2024/08/03 22:53:14 by edbernar #+# #+# #
|
||||
# Updated: 2024/08/04 22:36:29 by edbernar ### ########.fr #
|
||||
# #
|
||||
# **************************************************************************** #
|
||||
|
||||
import random
|
||||
|
||||
listMessage = {
|
||||
"type": "private_list_message",
|
||||
"content": [
|
||||
{
|
||||
"from": 0,
|
||||
"content": "",
|
||||
"date": "10:05 31/07/2024"
|
||||
},
|
||||
{
|
||||
"from": 0,
|
||||
"content": "",
|
||||
"date": "10:05 31/07/2024"
|
||||
},
|
||||
{
|
||||
"from": 0,
|
||||
"content": "",
|
||||
"date": "10:06 31/07/2024"
|
||||
},
|
||||
{
|
||||
"from": 0,
|
||||
"content": "",
|
||||
"date": "10:06 31/07/2024"
|
||||
},
|
||||
{
|
||||
"from": 0,
|
||||
"content": "",
|
||||
"date": "10:45 31/07/2024"
|
||||
},
|
||||
{
|
||||
"from": 0,
|
||||
"content": "",
|
||||
"date": "10:46 31/07/2024"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
def generate_random_string():
|
||||
char = "abcdefghijklmnopqrstuvwxyz 123456789"
|
||||
string = ""
|
||||
|
||||
for i in range(20):
|
||||
string += char[random.randint(0, len(char) - 1)]
|
||||
return string
|
||||
|
||||
async def getPrivateListMessage(userClass, content):
|
||||
# |TOM| Requete pour avoir la liste des messages privés grace à l'id de l'utilisateur
|
||||
copyListMessage = listMessage.copy()
|
||||
for message in copyListMessage["content"]:
|
||||
if (random.randint(1, 10) % 2 == 0):
|
||||
message["from"] = 4561268
|
||||
else:
|
||||
message["from"] = content["id"]
|
||||
message["content"] = generate_random_string()
|
||||
await userClass.send(copyListMessage)
|
||||
|
61
websocket-server/typeRequets/getPrivateListUser.py
Normal file
61
websocket-server/typeRequets/getPrivateListUser.py
Normal file
@ -0,0 +1,61 @@
|
||||
# **************************************************************************** #
|
||||
# #
|
||||
# ::: :::::::: #
|
||||
# getPrivateListUser.py :+: :+: :+: #
|
||||
# +:+ +:+ +:+ #
|
||||
# By: edbernar <edbernar@student.42angouleme. +#+ +:+ +#+ #
|
||||
# +#+#+#+#+#+ +#+ #
|
||||
# Created: 2024/08/03 15:10:23 by edbernar #+# #+# #
|
||||
# Updated: 2024/08/04 14:00:44 by edbernar ### ########.fr #
|
||||
# #
|
||||
# **************************************************************************** #
|
||||
|
||||
import websockets
|
||||
import asyncio
|
||||
import json
|
||||
|
||||
data = [
|
||||
{
|
||||
"name": "Nessundorma",
|
||||
"status": "online",
|
||||
"pfp": "https://wallpapers-clan.com/wp-content/uploads/2023/05/cool-pfp-02.jpg",
|
||||
"id": 145564
|
||||
},
|
||||
{
|
||||
"name": "Succotash",
|
||||
"status": "offline",
|
||||
"pfp": "https://i.pinimg.com/200x/28/75/96/287596f98304bf1adc2c411619ae8fef.jpg",
|
||||
"id": 256981
|
||||
},
|
||||
{
|
||||
"name": "Astropower",
|
||||
"status": "online",
|
||||
"pfp": "https://ashisheditz.com/wp-content/uploads/2024/03/cool-anime-pfp-demon-slayer-HD.jpg",
|
||||
"id": 301547
|
||||
},
|
||||
{
|
||||
"name": "Assaultive",
|
||||
"status": "offline",
|
||||
"pfp": "https://i1.sndcdn.com/artworks-1Li0JIJrQGlojD3y-AEiNkw-t500x500.jpg",
|
||||
"id": 432448
|
||||
},
|
||||
{
|
||||
"name": "Redshock",
|
||||
"status": "offline",
|
||||
"pfp": "https://cdn.pfps.gg/pfps/7094-boy-pfp.png",
|
||||
"id": 543211
|
||||
},
|
||||
{
|
||||
"name": "Parley",
|
||||
"status": "offline",
|
||||
"pfp": "https://pbs.twimg.com/media/EscE6ckU0AA-Uhe.png",
|
||||
"id": 654123
|
||||
},
|
||||
]
|
||||
|
||||
async def getPrivateListUser(userClass, content=None):
|
||||
# |TOM| Faire une requête à la base de données pour récupérer la liste des
|
||||
# utilisateurs qui doivent apparaitre dans la liste du chat privé
|
||||
# (ceux qui ont eu conversation avec l'utilisateur)
|
||||
# Si user existe pas, faire ça : await userClass.sendError("User not found", 9008)
|
||||
await userClass.send({"type": "private_list_user", "content": data})
|
108
websocket-server/typeRequets/login.py
Normal file
108
websocket-server/typeRequets/login.py
Normal file
@ -0,0 +1,108 @@
|
||||
# **************************************************************************** #
|
||||
# #
|
||||
# ::: :::::::: #
|
||||
# login.py :+: :+: :+: #
|
||||
# +:+ +:+ +:+ #
|
||||
# By: edbernar <edbernar@student.42angouleme. +#+ +:+ +#+ #
|
||||
# +#+#+#+#+#+ +#+ #
|
||||
# Created: 2024/08/03 08:10:38 by edbernar #+# #+# #
|
||||
# Updated: 2024/08/04 15:51:04 by edbernar ### ########.fr #
|
||||
# #
|
||||
# **************************************************************************** #
|
||||
|
||||
import requests
|
||||
import json
|
||||
|
||||
# Les requêtes de login peuvent être de 3 types:
|
||||
# <-- {"type" : "login", "content" : {"type": "byToken", "token": "123456"}}
|
||||
# <-- {"type" : "login", "content" : {"type": "byPass", "mail": "aaa@a.com", "pass": "dasd"}}
|
||||
# <-- {"type" : "login", "content" : {"type": "by42", "token": "1dsa23dsa456"}}
|
||||
# --> {"type" : "login", "content" : {"username": "". "token": "", "id": 0}}
|
||||
|
||||
userList = [
|
||||
{
|
||||
"username": "Nexalith",
|
||||
"token": "IDSNCSDAd465sd13215421",
|
||||
"mail": "eddy@ediwor.fr",
|
||||
"password": "ABC123",
|
||||
"id": 9999999
|
||||
},
|
||||
{
|
||||
"username": "user2",
|
||||
"token": "789123",
|
||||
"mail": "bb@bb.fr",
|
||||
"password": "DEF456",
|
||||
"id": 2
|
||||
},
|
||||
{
|
||||
"username": "user3",
|
||||
"token": "456789",
|
||||
"mail": "cc@cc,fr",
|
||||
"password": "GHI789",
|
||||
"id": 3
|
||||
}
|
||||
]
|
||||
|
||||
async def loginByToken(userClass, content):
|
||||
# |TOM| Requete pour savoir si le token est valide
|
||||
for user in userList:
|
||||
if (user["token"] == content["token"]):
|
||||
jsonVar = {"type": "login", "content": {"username": user["username"], "token": user["token"], "id": user["id"]}}
|
||||
userClass.username = jsonVar["content"]["username"]
|
||||
userClass.token = jsonVar["content"]["token"]
|
||||
userClass.id = jsonVar["content"]["id"]
|
||||
await userClass.send(jsonVar)
|
||||
return
|
||||
jsonVar = {"type": "error", "content": "Invalid token", "code": 9001}
|
||||
await userClass.send(json.dumps(jsonVar))
|
||||
|
||||
async def loginByPass(userClass, content):
|
||||
# |TOM| Requete pour savoir si le mail et le mot de passe sont valides
|
||||
# et créer un token si celui-ci n'existe pas
|
||||
for user in userList:
|
||||
if (user["mail"] == content["mail"] and user["password"] == content["password"]):
|
||||
jsonVar = {"type": "login", "content": {"username": user["username"], "token": user["token"], "id": user["id"]}}
|
||||
userClass.username = jsonVar["content"]["username"]
|
||||
userClass.token = jsonVar["content"]["token"]
|
||||
userClass.id = jsonVar["content"]["id"]
|
||||
await userClass.send(jsonVar)
|
||||
return
|
||||
await userClass.send({"type": "error", "content": "Invalid username or password", "code": 9007})
|
||||
|
||||
async def verifyToken42(token42):
|
||||
url = "https://api.intra.42.fr/v2/me"
|
||||
headers = {
|
||||
"Authorization": f"Bearer {token42}"
|
||||
}
|
||||
response = requests.get(url, headers=headers)
|
||||
# |Eddy| Regarder ce que renvoie la requete quand elle est valide pour savoir qui rechercher
|
||||
# dans la base de données
|
||||
return (response.status_code == 200)
|
||||
|
||||
async def loginBy42(userClass, content):
|
||||
# |TOM| Requete pour récuperer les informations de l'utilisateur selon l'intra de la personne
|
||||
# et créer un token si celui-ci n'existe pas
|
||||
for user in userList:
|
||||
if (await verifyToken42(content["token42"])):
|
||||
jsonVar = {"type": "login", "content": {"username": user["username"], "token": user["token"], "id": user["id"]}}
|
||||
await userClass.send(json.dumps(jsonVar))
|
||||
return
|
||||
jsonVar = {"type": "error", "content": "Invalid 42 token", "code": 9008}
|
||||
await userClass.send(json.dumps(jsonVar))
|
||||
|
||||
async def login(userClass, content):
|
||||
# |TOM| Faire 3 types de requêtes:
|
||||
# - byToken: Récupérer les informations de l'utilisateur en fonction de son token
|
||||
# - byPass: Récupérer les informations de l'utilisateur en fonction de mail et de son mot de passe
|
||||
# - by42: Récupérer les informations de l'utilisateur en fonction de son token42 (qui sera different du token)
|
||||
try:
|
||||
if (content["type"] == "byToken"):
|
||||
await loginByToken(userClass, content)
|
||||
elif (content["type"] == "byPass"):
|
||||
await loginByPass(userClass, content)
|
||||
elif (content["type"] == "by42"):
|
||||
await loginBy42(userClass, content)
|
||||
else:
|
||||
await userClass.sendError("Invalid login type", 9006)
|
||||
except Exception as e:
|
||||
await userClass.sendError("Invalid request", 9005, e)
|
35
websocket-server/typeRequets/sendPrivateMessage.py
Normal file
35
websocket-server/typeRequets/sendPrivateMessage.py
Normal file
@ -0,0 +1,35 @@
|
||||
# **************************************************************************** #
|
||||
# #
|
||||
# ::: :::::::: #
|
||||
# sendPrivateMessage.py :+: :+: :+: #
|
||||
# +:+ +:+ +:+ #
|
||||
# By: edbernar <edbernar@student.42angouleme. +#+ +:+ +#+ #
|
||||
# +#+#+#+#+#+ +#+ #
|
||||
# Created: 2024/08/04 13:44:11 by edbernar #+# #+# #
|
||||
# Updated: 2024/08/04 15:48:24 by edbernar ### ########.fr #
|
||||
# #
|
||||
# **************************************************************************** #
|
||||
|
||||
from datetime import datetime
|
||||
|
||||
async def sendPrivateMessage(userClass, content):
|
||||
# |Tom| Requete pour vérifier si l'user existe
|
||||
# Si user existe pas, faire ça : await userClass.sendError("User not found", 9008)
|
||||
# Sinon l'ajouter à la base de données
|
||||
# |Eddy| Si user existe, envoyer le message privé aux deux personnes concernées
|
||||
# sachant que le receveur doit être connecté. Dans le cas contraire, uniquement
|
||||
# l'envoyeur recevra le message.
|
||||
|
||||
try:
|
||||
time = content["time"]
|
||||
time = datetime.strptime(time, "%Y-%m-%dT%H:%M:%S.%fZ")
|
||||
time = time.strftime("%H:%M %d/%m/%Y")
|
||||
jsonVar = {"type": "new_private_message", "content": {
|
||||
"from": content["from"],
|
||||
"channel": content["to"],
|
||||
"content": content["content"],
|
||||
"date": time
|
||||
}}
|
||||
await userClass.send(jsonVar)
|
||||
except Exception as e:
|
||||
await userClass.sendError("Invalid message sent", 9009, e)
|
Reference in New Issue
Block a user