Refactor logout and lobby management logic

This commit is contained in:
IM23a-spirgif
2025-05-07 09:20:45 +02:00
parent 4a92b61930
commit 512fdf1e96
+20 -16
View File
@@ -148,34 +148,30 @@ app.post("/verify", authenticateToken, (request, response) => {
}); });
app.delete("/logout", authenticateToken, (request, response) => { app.delete("/logout", authenticateToken, (request, response) => {
/* #swagger.security = [{
"bearerAuth": []
}] */
const username = request.user.username; const username = request.user.username;
const users = get_data(); const users = get_data();
const user = users.find(u => u.username === username); const user = users.find(u => u.username === username);
let lobbyId = request.lobbyId; if (!user) return response.status(404).json({ error: "User not found" });
if (playerMap[lobbyId].includes(username)) { const lobbyId = user.lobbyId;
playerMap[lobbyId].splice(username, 1); if (lobbyId && playerMap[lobbyId]) {
playerMap[lobbyId] = playerMap[lobbyId].filter(player => player !== username);
if (playerMap[lobbyId].length === 0) {
delete playerMap[lobbyId];
} }
// 1) Clear the HttpOnly cookie in the browser delete user.lobbyId;
}
delete user.token;
save_data(users);
response.clearCookie("authorization", { response.clearCookie("authorization", {
httpOnly: true, httpOnly: true,
secure: process.env.NODE_ENV === "production", secure: process.env.NODE_ENV === "production",
sameSite: "Strict" sameSite: "Strict"
}); });
response.json({ message: "Logged out successfully." });
// 2) Delete the token from your JSON store
if (user) {
delete user.token;
save_data(users);
}
// 3) Send final response
response.json({message: "Logged out successfully."});
}); });
/* /*
Here will be the Game logic ----------------------------------------------------------------------------------------------- Here will be the Game logic -----------------------------------------------------------------------------------------------
*/ */
@@ -210,6 +206,12 @@ app.get("/lobby/create", authenticateToken, async (req, res) => {
if (!playerMap[lobbyId].includes(username)) { if (!playerMap[lobbyId].includes(username)) {
playerMap[lobbyId].push(username); playerMap[lobbyId].push(username);
} }
const users = get_data();
const user = users.find(u => u.username === username);
if (user) {
user.lobbyId = lobbyId;
save_data(users);
}
res.redirect(`/lobby/join?lobbyId=${lobbyId}&username=${username}`); res.redirect(`/lobby/join?lobbyId=${lobbyId}&username=${username}`);
}) })
@@ -228,6 +230,8 @@ app.get("/lobby/join", authenticateToken, async (req, res) => {
if (!playerMap[lobbyId].includes(username)) { if (!playerMap[lobbyId].includes(username)) {
playerMap[lobbyId].push(username); playerMap[lobbyId].push(username);
} }
user.lobbyId = lobbyId;
save_data(users);
res.json({ lobbyId, username }); res.json({ lobbyId, username });
} else { } else {
console.log("Lobby with " + lobbyId + " not found."); console.log("Lobby with " + lobbyId + " not found.");