diff --git a/srcs/docker-compose.yml b/docker-compose/docker-compose.yml similarity index 100% rename from srcs/docker-compose.yml rename to docker-compose/docker-compose.yml diff --git a/srcs/requirements/PostgreSQL/Dockerfile b/docker-compose/requirements/PostgreSQL/Dockerfile similarity index 100% rename from srcs/requirements/PostgreSQL/Dockerfile rename to docker-compose/requirements/PostgreSQL/Dockerfile diff --git a/srcs/requirements/djangoserver/Dockerfile b/docker-compose/requirements/djangoserver/Dockerfile similarity index 100% rename from srcs/requirements/djangoserver/Dockerfile rename to docker-compose/requirements/djangoserver/Dockerfile diff --git a/srcs/requirements/djangoserver/file/server/main.py b/docker-compose/requirements/djangoserver/file/server/main.py similarity index 100% rename from srcs/requirements/djangoserver/file/server/main.py rename to docker-compose/requirements/djangoserver/file/server/main.py diff --git a/srcs/requirements/nginx/Dockerfile b/docker-compose/requirements/nginx/Dockerfile similarity index 100% rename from srcs/requirements/nginx/Dockerfile rename to docker-compose/requirements/nginx/Dockerfile diff --git a/srcs/requirements/nginx/conf/nginx.conf b/docker-compose/requirements/nginx/conf/nginx.conf similarity index 100% rename from srcs/requirements/nginx/conf/nginx.conf rename to docker-compose/requirements/nginx/conf/nginx.conf diff --git a/site/interface/site/index.html b/site/interface/site/index.html index c8e72b3..acc459e 100644 --- a/site/interface/site/index.html +++ b/site/interface/site/index.html @@ -22,12 +22,6 @@

X

-
-

Private

-

Game

-
-
-
\ No newline at end of file diff --git a/site/interface/site/liveChat/main.js b/site/interface/site/liveChat/main.js index de73027..cfb352f 100644 --- a/site/interface/site/liveChat/main.js +++ b/site/interface/site/liveChat/main.js @@ -6,48 +6,76 @@ /* By: edbernar { + newGameButton.removeAttribute("id"); + newPrivateButton.setAttribute("id", "selected"); + await showListUser(); + }); + newGameButton.addEventListener("click", () => { + newPrivateButton.removeAttribute("id"); + newGameButton.setAttribute("id", "selected"); + showActualGameMessage(); + }); +} + +function removeButtonIfExist() +{ + const divButtonTypeChatHome = document.getElementById("buttonTypeChatHome"); + + if (divButtonTypeChatHome) + { + divButtonTypeChatHome.remove(); + document.getElementById("messageListChatHome").remove(); + } +} + function liveChat() { const chatButton = document.getElementById("chatButton"); const chatDiv = document.getElementById("chatDiv"); const topChatHomeCross = document.getElementById("topChatCross"); - const privateButtonChatHome = document.getElementById("buttonTypeChatHome").getElementsByTagName("h2")[0]; - const gameButtonChatHome= document.getElementById("buttonTypeChatHome").getElementsByTagName("h2")[1]; - + chatButton.addEventListener("click", async () => { chatDiv.style.display = "flex"; - gameButtonChatHome.removeAttribute("id"); - privateButtonChatHome.setAttribute("id", "selected"); + removeButtonIfExist(); + addDefaultButton(); await showListUser(); }); topChatHomeCross.addEventListener("click", () => { chatDiv.style.display = "none"; infoPanel.isOpen = false; }); - privateButtonChatHome.addEventListener("click", async () => { - gameButtonChatHome.removeAttribute("id"); - privateButtonChatHome.setAttribute("id", "selected"); - await showListUser(); - }); - gameButtonChatHome.addEventListener("click", () => { - privateButtonChatHome.removeAttribute("id"); - gameButtonChatHome.setAttribute("id", "selected"); - showActualGameMessage(); - }); } export { liveChat }; \ No newline at end of file diff --git a/site/interface/site/liveChat/showActualGameMessage.js b/site/interface/site/liveChat/showActualGameMessage.js index a00b1e6..475b633 100644 --- a/site/interface/site/liveChat/showActualGameMessage.js +++ b/site/interface/site/liveChat/showActualGameMessage.js @@ -6,11 +6,11 @@ /* By: edbernar { divMessageListChatHome.innerHTML += `
-

${element.content}

-

${element.date}

+

${element.content}

+

${element.date}

`; }); diff --git a/site/interface/site/liveChat/launchPrivateChat.js b/site/interface/site/liveChat/showPrivateChat.js similarity index 87% rename from site/interface/site/liveChat/launchPrivateChat.js rename to site/interface/site/liveChat/showPrivateChat.js index e821ace..6383059 100644 --- a/site/interface/site/liveChat/launchPrivateChat.js +++ b/site/interface/site/liveChat/showPrivateChat.js @@ -1,12 +1,12 @@ /* ************************************************************************** */ /* */ /* ::: :::::::: */ -/* launchPrivateChat.js :+: :+: :+: */ +/* showPrivateChat.js :+: :+: :+: */ /* +:+ +:+ +:+ */ /* By: edbernar { + divButtonTypeChatHome.appendChild(element); + }); +} + async function changeButton(user) { const divButtonTypeChatHome = document.getElementById("buttonTypeChatHome"); @@ -38,8 +50,10 @@ async function changeButton(user) h2Button = divButtonTypeChatHome.getElementsByTagName("h2"); lenh2Button = h2Button.length; + savedButtons.splice(0, savedButtons.length); for (let i = 0; i < lenh2Button; i++) { - h2Button[i - i].remove(); + savedButtons.push(h2Button[0]); + h2Button[0].remove(); } divButtonTypeChatHome.innerHTML += `

${user.name}

@@ -49,10 +63,7 @@ async function changeButton(user) returnButton = document.getElementById("returnButton"); returnButton.style.cursor = "pointer"; returnButton.addEventListener("click", () => { - divButtonTypeChatHome.innerHTML = ` -

Private

-

Game

- `; + restoreButton(); infoPanel.isOpen = false; showListUser(); }); @@ -122,4 +133,4 @@ function sendMessage(user) { sendRequest("send_private_message", message); } -export { launchPrivateChat }; \ No newline at end of file +export { showPrivateChat }; \ No newline at end of file diff --git a/site/interface/site/liveChat/showUserList.js b/site/interface/site/liveChat/showUserList.js index 881c70a..d4a9612 100644 --- a/site/interface/site/liveChat/showUserList.js +++ b/site/interface/site/liveChat/showUserList.js @@ -6,13 +6,13 @@ /* By: edbernar { - await launchPrivateChat(userList[i]); + await showPrivateChat(userList[i]); }); } } diff --git a/site/module_livechat/listError.txt b/site/module_livechat/listError.txt deleted file mode 100644 index c78b396..0000000 --- a/site/module_livechat/listError.txt +++ /dev/null @@ -1,13 +0,0 @@ -8000 ~ 8999 : Ok code - -9000 ~ 9999 : Error code -- 9000 : Invalid token -- 9001 : Token not found -- 9002 : Invalid json -- 9003 : Invalid path -- 9004 : Invalid type -- 9005 : Invalid request -- 9006 : Invalid login type -- 9007 : Invalid username or password -- 9008 : User not found -- 9009 : Invalid message sent \ No newline at end of file diff --git a/site/module_livechat/server/Class/User.py b/site/module_livechat/server/Class/User.py deleted file mode 100644 index 34b8e46..0000000 --- a/site/module_livechat/server/Class/User.py +++ /dev/null @@ -1,121 +0,0 @@ -# **************************************************************************** # -# # -# ::: :::::::: # -# User.py :+: :+: :+: # -# +:+ +:+ +:+ # -# By: edbernar {"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) \ No newline at end of file diff --git a/site/module_livechat/server/typeRequets/sendPrivateMessage.py b/site/module_livechat/server/typeRequets/sendPrivateMessage.py deleted file mode 100644 index f1e27af..0000000 --- a/site/module_livechat/server/typeRequets/sendPrivateMessage.py +++ /dev/null @@ -1,35 +0,0 @@ -# **************************************************************************** # -# # -# ::: :::::::: # -# sendPrivateMessage.py :+: :+: :+: # -# +:+ +:+ +:+ # -# By: edbernar - - - - - Chat - - - - - - - - -
-

CHAT

-
-
-
-

Chat

-
-

X

-
-
-
-

Private

-

Game

-
-
-
-
- - \ No newline at end of file diff --git a/site/module_livechat/site/main.js b/site/module_livechat/site/main.js deleted file mode 100644 index 815aa09..0000000 --- a/site/module_livechat/site/main.js +++ /dev/null @@ -1,235 +0,0 @@ -/* ************************************************************************** */ -/* */ -/* ::: :::::::: */ -/* main.js :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: edbernar { - if (event.key === "-") - console.log(userList); -}); - -document.addEventListener('DOMContentLoaded', () => { - liveChat(); -}); - -function liveChat() { - const chatButton = document.getElementById("chatButton"); - const chatDiv = document.getElementById("chatDiv"); - const topChatHomeCross = document.getElementById("topChatCross"); - const privateButtonChatHome = document.getElementById("buttonTypeChatHome").getElementsByTagName("h2")[0]; - const gameButtonChatHome= document.getElementById("buttonTypeChatHome").getElementsByTagName("h2")[1]; - - chatButton.addEventListener("click", async () => { - chatDiv.style.display = "flex"; - gameButtonChatHome.removeAttribute("id"); - privateButtonChatHome.setAttribute("id", "selected"); - await showListUserMessage(); - }); - topChatHomeCross.addEventListener("click", () => { - chatDiv.style.display = "none"; - infoPanel.isOpen = false; - }); - - privateButtonChatHome.addEventListener("click", async () => { - gameButtonChatHome.removeAttribute("id"); - privateButtonChatHome.setAttribute("id", "selected"); - await showListUserMessage(); - }); - gameButtonChatHome.addEventListener("click", () => { - privateButtonChatHome.removeAttribute("id"); - gameButtonChatHome.setAttribute("id", "selected"); - showActualGameMessage(); - }); -} - -async function showListUserMessage() { - const divMessageListChatHome = document.getElementById("messageListChatHome"); - let divUser; - - sendRequest("get_private_list_user", {}); - await waitForUserList(); - divMessageListChatHome.style.height = "100%"; - divMessageListChatHome.style.paddingBottom = "10px"; - divMessageListChatHome.innerHTML = ''; - divMessageListChatHome.scrollTop = 0; - if (JSON.stringify(userList) !== "{}") - { - userList.forEach(element => { - divMessageListChatHome.innerHTML += ` -
-
- -
-

${element.name}

-
- `; - }); - } - divMessageListChatHome.innerHTML += "

New conversation +

"; - divUser = document.getElementsByClassName("user"); - for (let i = 0; i < divUser.length; i++) { - divUser[i].addEventListener("click", async () => { - await launchPrivateChat(userList[i]); - }); - } -} - -function showActualGameMessage() { - const divMessageListChatHome = document.getElementById("messageListChatHome"); - let me = "Kumita"; - let request = { - isInGame: false, - opponent: { - name: "Astropower", - pfp: "https://ashisheditz.com/wp-content/uploads/2024/03/cool-anime-pfp-demon-slayer-HD.jpg" - }, - listMessage: [ - { - from: "Astropower", - content: "Hello !", - date: "19:21 30/07/2024" - }, - { - from: "Kumita", - content: "Hey", - date: "19:21 30/07/2024" - }, - { - from: "Astropower", - content: "Do you want play ?", - date: "19:22 30/07/2024" - }, - { - from: "Kumita", - content: "Yes, i'm ready !", - date: "19:22 30/07/2024" - }, - { - from: "Kumita", - content: "The game was too hard but well played", - date: "19:27 30/07/2024" - }, - { - from: "Astropower", - content: "Yeah but you still won. See you soon", - date: "19:27 30/07/2024" - }, - ] - }; //Remplace temporairement la requete qui devra être de la meme forme - - - divMessageListChatHome.style.height = "230px"; - divMessageListChatHome.style.paddingBottom = "20px"; - divMessageListChatHome.innerHTML = ''; - if (request.isInGame === false) - { - divMessageListChatHome.innerHTML = "

You are currently not in a game.

"; - return ; - } - request.listMessage.forEach(element => { - divMessageListChatHome.innerHTML += ` -
-

${element.content}

-

${element.date}

-
- `; - }); - divMessageListChatHome.scrollTop = divMessageListChatHome.scrollHeight; - divMessageListChatHome.innerHTML += ` -
- -

\>

-
- `; -} - -async function launchPrivateChat(user) { - const divMessageListChatHome = document.getElementById("messageListChatHome"); - const divButtonTypeChatHome = document.getElementById("buttonTypeChatHome"); - let returnButton; - - sendRequest("get_private_list_message", {id: user.id}); - await waitForMessageList(); - infoPanel.id = user.id; - infoPanel.isOpen = true; - infoPanel.divMessage = divMessageListChatHome; - let h2Button = divButtonTypeChatHome.getElementsByTagName("h2"); - let len = h2Button.length; - for (let i = 0; i < len; i++) { - h2Button[i - i].remove(); - } - divButtonTypeChatHome.innerHTML += ` -

${user.name}

-

Return

- `; - h2Button[0].style.cursor = "default"; - returnButton = document.getElementById("returnButton"); - returnButton.style.cursor = "pointer"; - returnButton.addEventListener("click", () => { - divButtonTypeChatHome.innerHTML = ` -

Private

-

Game

- `; - infoPanel.isOpen = false; - showListUserMessage(); - }); - - - divMessageListChatHome.style.height = "230px"; - divMessageListChatHome.style.paddingBottom = "20px"; - divMessageListChatHome.innerHTML = ''; - messageList.forEach(element => { - divMessageListChatHome.innerHTML += ` -
-

${element.content}

-

${element.date}

-
- `; - }); - divMessageListChatHome.scrollTop = divMessageListChatHome.scrollHeight; - divMessageListChatHome.innerHTML += ` -
- -

\>

-
- `; - let sendButton = document.getElementById("sendButton"); - sendButton.style.cursor = "pointer"; - sendButton.addEventListener("click", () => { - sendMessage(); - inputMessage.value = ""; - }); - let inputMessage = document.getElementById("inputMessage"); - inputMessage.addEventListener("keyup", (event) => { - if (event.key === "Enter" && !event.shiftKey && inputMessage.value.trim() !== "") - { - event.preventDefault(); - sendMessage(user); - inputMessage.value = ""; - inputMessage.focus(); - } - }); - inputMessage.addEventListener("keydown", (event) => { - if (event.key === "Enter") - event.preventDefault(); - }); - inputMessage.focus(); -} - -function sendMessage(user) { - const inputMessage = document.getElementById("inputMessage"); - - sendRequest("send_private_message", {from: userMeInfo.id, to: user.id, content: inputMessage.value, time: new Date()}); -} diff --git a/site/module_livechat/site/pp.jpg b/site/module_livechat/site/pp.jpg deleted file mode 100644 index 9549734..0000000 Binary files a/site/module_livechat/site/pp.jpg and /dev/null differ diff --git a/site/module_livechat/site/style.css b/site/module_livechat/site/style.css deleted file mode 100644 index a1301bc..0000000 --- a/site/module_livechat/site/style.css +++ /dev/null @@ -1,243 +0,0 @@ -/* ************************************************************************** */ -/* */ -/* ::: :::::::: */ -/* style.css :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: edbernar -

${content.content}

-

${content.date}

- - `); - infoPanel.divMessage.scrollTop = infoPanel.divMessage.scrollHeight; - } -} - -export { typeNewPrivateMessage }; \ No newline at end of file diff --git a/site/module_livechat/site/typeResponse/typePrivateListMessage.js b/site/module_livechat/site/typeResponse/typePrivateListMessage.js deleted file mode 100644 index eb75aa1..0000000 --- a/site/module_livechat/site/typeResponse/typePrivateListMessage.js +++ /dev/null @@ -1,43 +0,0 @@ -/* ************************************************************************** */ -/* */ -/* ::: :::::::: */ -/* typePrivateListMessage.js :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: edbernar { - - if (messageListAvailable) - resolve(); - else - messageListResolve = resolve; - }); -} - -function typePrivateListMessage(list) { - messageList = list; - messageListAvailable = true; - if (messageListResolve) - { - messageListResolve(); - messageListResolve = null; - messageListAvailable = false; - } -} - -export { messageList, infoPanel, typePrivateListMessage, waitForMessageList }; \ No newline at end of file diff --git a/site/module_livechat/site/typeResponse/typePrivateListUser.js b/site/module_livechat/site/typeResponse/typePrivateListUser.js deleted file mode 100644 index e8e4df1..0000000 --- a/site/module_livechat/site/typeResponse/typePrivateListUser.js +++ /dev/null @@ -1,36 +0,0 @@ -/* ************************************************************************** */ -/* */ -/* ::: :::::::: */ -/* typePrivateListUser.js :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: edbernar { - if (userListAvailable) - resolve(); - else - userListResolve = resolve; - }); -} - -function typePrivateListUser(list) { - userList = list; - userListAvailable = true; - if (userListResolve) - { - userListResolve(); - userListResolve = null; - } -} - -export { userList, typePrivateListUser, waitForUserList }; \ No newline at end of file diff --git a/site/module_livechat/site/websocket.js b/site/module_livechat/site/websocket.js deleted file mode 100644 index 501c6b1..0000000 --- a/site/module_livechat/site/websocket.js +++ /dev/null @@ -1,72 +0,0 @@ -/* ************************************************************************** */ -/* */ -/* ::: :::::::: */ -/* websocket.js :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: edbernar { - console.log('Connected'); - if (token) - sendRequest("login", {"type": "byToken", "token": token}); - // |Eddy| Requete pour se connecter par mail et password. En attente du front pour le faire (déjà fonctionnel côté back) - // sendRequest("login", {type: "byPass", mail: "aa@aa.fr", password: "ABC123"}); - -}; - -socket.onmessage = (event) => { - let response; - - try { - response = JSON.parse(event.data); - } catch { - return ; - } - if (response.code >= 9000 && response.code <= 9999) - console.warn(response); - else - { - try { - functionResponse[typeResponse.indexOf(response.type)](response.content); - } - catch { - console.warn(response); - } - } -}; - -socket.onclose = () => { - console.log('Disconnected'); -}; - -function sendRequest(type, content) { - let coc = null; - - if (content instanceof Object) - coc = JSON.stringify(content); - else - coc = content; - socket.send(JSON.stringify({ - type: type, - token: token, - content: content - })); -} - -export { socket, token, sendRequest }; \ No newline at end of file diff --git a/site/interface/server/Class/User.py b/websocket-server/Class/User.py similarity index 100% rename from site/interface/server/Class/User.py rename to websocket-server/Class/User.py diff --git a/site/interface/server/main.py b/websocket-server/main.py similarity index 100% rename from site/interface/server/main.py rename to websocket-server/main.py diff --git a/site/interface/server/typeRequets/getPrivateListMessage.py b/websocket-server/typeRequets/getPrivateListMessage.py similarity index 96% rename from site/interface/server/typeRequets/getPrivateListMessage.py rename to websocket-server/typeRequets/getPrivateListMessage.py index 97245cd..cee83fa 100644 --- a/site/interface/server/typeRequets/getPrivateListMessage.py +++ b/websocket-server/typeRequets/getPrivateListMessage.py @@ -6,7 +6,7 @@ # By: edbernar