diff --git a/data.json b/data.json index 41b42e6..80c3487 100644 --- a/data.json +++ b/data.json @@ -1,3 +1,20 @@ [ - -] + { + "username": "jerome", + "password": "Sigma", + "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJsb3dlcl91c2VybmFtZSI6Implcm9tZSIsImlhdCI6MTc0NDg4OTY3MSwiZXhwIjoxNzQ0ODkxNDcxfQ.zYg3uxh_iNZ2xdEma8p3p-URT3Xa7wnYiQyOx0-QTac", + "money": 200 + }, + { + "username": "Gianimon", + "password": "gianimon", + "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6IkdpYW5pbW9uIiwiaWF0IjoxNzQ0ODc0NTczLCJleHAiOjE3NDQ4NzYzNzN9.dGp5WTKIDVhomKZ8J7nevz8O7PqwRhR9wEgeyDtL_XE", + "money": 200 + }, + { + "username": "any", + "password": "any", + "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6ImFueSIsImlhdCI6MTc0NDg4OTk1OSwiZXhwIjoxNzQ0ODkxNzU5fQ.TA6BA09DQlmUqEzQxD_wF0r-VyqCMccoxq8SxPnB9-4", + "money": 200 + } +] \ No newline at end of file diff --git a/gambling.js b/gambling.js index cccde04..0c0a027 100644 --- a/gambling.js +++ b/gambling.js @@ -62,8 +62,10 @@ function authenticateToken(request, response, next) { } app.post("/register", (request, response) => { - const { username, password } = request.body; - if (!username && !password) + let { username, password } = request.body; + username = username.toLowerCase(); + + if (!username || !password) return response.status(400).json({ error: "Username and password are required" }); const users = get_data(); @@ -71,19 +73,19 @@ app.post("/register", (request, response) => { return response.status(400).json({ error: "Username already exists" }); } - const token = generateAccessToken({ username }); saveUser({ username, password, token, "money": 200 }); - response.json({ username, token }); + response.json({ lower_username, token }); }); app.get("/login", (request, response) => { response.sendFile(path.join(__dirname, ".\\public\\login.html")); }) app.post("/login", (request, response) => { - const { username, password } = request.body; - if (!username && !password) + let { username, password } = request.body; + username = username.toLowerCase(); + if (!username || !password) return response.status(400).json({ error: "Username and password are required" }); const users = get_data(); @@ -105,15 +107,15 @@ app.get("/", authenticateToken, (request, response) => { /* #swagger.security = [{ "bearerAuth": [] }] */ - response.sendFile(path.join(__dirname, "structure.png")); + response.sendFile(path.join(__dirname, ".\\public\\home.html")); }); -app.post("/balance", authenticateToken, (request, response) => { +app.get("/balance", authenticateToken, (request, response) => { /* #swagger.security = [{ "bearerAuth": [] }] */ const username = request.user.username; - + console.log(username); const allUsers = get_data(); const me = allUsers.find(u => u.username === username); @@ -121,7 +123,7 @@ app.post("/balance", authenticateToken, (request, response) => { return response.status(404).json({ error: "User not found" }); } - response.json({ balance: me.money }); + response.json({ balance: me.money }).status(200); }); app.post("/verify", authenticateToken, (request, response) => { @@ -129,13 +131,27 @@ app.post("/verify", authenticateToken, (request, response) => { }); app.delete("/logout", authenticateToken, (request, response) => { + /* #swagger.security = [{ + "bearerAuth": [] + }] */ const username = request.user.username; const users = get_data(); const user = users.find(u => u.username === username); + + // 1) Clear the HttpOnly cookie in the browser + response.clearCookie("token", { + httpOnly: true, + secure: process.env.NODE_ENV === "production", + sameSite: "Strict" + }); + + // 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." }); }); diff --git a/public/frontend_home.js b/public/frontend_home.js new file mode 100644 index 0000000..6b5c1af --- /dev/null +++ b/public/frontend_home.js @@ -0,0 +1,19 @@ +document.addEventListener("DOMContentLoaded", async () => { + const logoutButton = document.getElementById("logout"); + const balance = document.getElementById("balance"); + try { + const balanceRes = await fetch('/balance', { + method: "GET", + headers: { + "Content-Type": "application/json", + } + }); + if (balanceRes.ok) { + const balanceData = await balanceRes.json(); + console.log(balanceData); + balance.innerHTML = balanceData.balance; + } + } catch (error) { + console.log(error); + } +}); \ No newline at end of file diff --git a/public/frontend.js b/public/frontend_login.js similarity index 91% rename from public/frontend.js rename to public/frontend_login.js index 1dfdad5..5382493 100644 --- a/public/frontend.js +++ b/public/frontend_login.js @@ -1,5 +1,4 @@ -const TokenHeader = new Headers(); -document.addEventListener("DOMContentLoaded", () => { +document.addEventListener("DOMContentLoaded", () => { const form = document.querySelector("form"); form.addEventListener("submit", async (e) => { @@ -20,6 +19,7 @@ document.addEventListener("DOMContentLoaded", () => { const loginData = await loginRes.json(); alert(`Welcome back, ${loginData.username}!`); document.cookie = `authorization=${loginData.token}` + window.location.href = "/"; return; } @@ -33,6 +33,7 @@ document.addEventListener("DOMContentLoaded", () => { const registerData = await registerRes.json(); alert(`Account created! Welcome, ${registerData.username}`); document.cookie = `authorization=${registerData.token}` + window.location.href = "/"; } else { const error = await registerRes.json(); alert("Register failed: " + (error.error || "Unknown error")); diff --git a/public/home.html b/public/home.html new file mode 100644 index 0000000..2fa4810 --- /dev/null +++ b/public/home.html @@ -0,0 +1,16 @@ + + +
+ +