From f8eae61818f60173af0f47cba74c8b6ea5b6bb9f Mon Sep 17 00:00:00 2001 From: Arthur Puechberty Date: Thu, 15 Jan 2026 21:57:42 +0100 Subject: [PATCH] add little css & add session --- app/package-lock.json | 12 +++++ app/package.json | 1 + app/public/index.css | 103 ++++++++++++++++++++++++++++++++++++++++++ app/public/index.html | 27 +++++++++++ app/server.js | 12 ++++- 5 files changed, 154 insertions(+), 1 deletion(-) create mode 100644 app/public/index.css diff --git a/app/package-lock.json b/app/package-lock.json index 64f8359..d50f42f 100644 --- a/app/package-lock.json +++ b/app/package-lock.json @@ -9,6 +9,7 @@ "version": "1.0.0", "license": "ISC", "dependencies": { + "connect-sqlite3": "^0.9.16", "cross-fetch": "^4.1.0", "discord.js": "^14.25.1", "dotenv": "^17.2.3", @@ -553,6 +554,17 @@ "license": "MIT", "optional": true }, + "node_modules/connect-sqlite3": { + "version": "0.9.16", + "resolved": "https://registry.npmjs.org/connect-sqlite3/-/connect-sqlite3-0.9.16.tgz", + "integrity": "sha512-2gqo0QmcBBL8p8+eqpBETn7RgM/PaoKvpQGl8PfjEgwlr0VuMYNMxRJRrRCo3KR3fxMYeSsCw2tGNG0JKN9Nvg==", + "dependencies": { + "sqlite3": "^5.0.2" + }, + "engines": { + "node": ">=0.4.x" + } + }, "node_modules/console-control-strings": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", diff --git a/app/package.json b/app/package.json index 0401ce8..f745aff 100644 --- a/app/package.json +++ b/app/package.json @@ -23,6 +23,7 @@ "test": "echo \"Error: no test specified\" && exit 1" }, "dependencies": { + "connect-sqlite3": "^0.9.16", "cross-fetch": "^4.1.0", "discord.js": "^14.25.1", "dotenv": "^17.2.3", diff --git a/app/public/index.css b/app/public/index.css new file mode 100644 index 0000000..f5339b1 --- /dev/null +++ b/app/public/index.css @@ -0,0 +1,103 @@ +:root { + --bg: #0f1115; + --bg-card: #161a22; + --text: #e6e6eb; + --muted: #9aa0b4; + --primary: #5865F2; /* couleur Discord */ + --primary-hover: #4752c4; + --border: #23283a; +} + +* { + box-sizing: border-box; + font-family: system-ui, -apple-system, BlinkMacSystemFont, sans-serif; +} + +body { + margin: 0; + background-color: var(--bg); + color: var(--text); + min-height: 100vh; +} + +/* NAVBAR */ +nav { + display: flex; + gap: 20px; + padding: 16px 24px; + background: var(--bg-card); + border-bottom: 1px solid var(--border); +} + +nav a { + color: var(--muted); + text-decoration: none; + font-weight: 500; +} + +nav a:hover { + color: var(--text); +} + +#profile { + margin-left: auto; + display: flex; + align-items: center; + gap: 10px; +} + +#avatar { + width: 32px; + height: 32px; + border-radius: 50%; +} + +#username { + color: var(--text); + font-weight: 500; +} + +#logout { + color: var(--muted); + text-decoration: none; +} + +#logout:hover { + color: var(--text); +} + +/* CONTENU */ +h1 { + margin: 40px 0 10px; + text-align: center; + font-size: 3rem; +} + +h2 { + margin-top: 40px; + text-align: center; +} + +p { + text-align: center; + color: var(--muted); +} + +/* BOUTON INVITE */ +#invite-link { + display: block; + width: fit-content; + margin: 30px auto; + padding: 14px 26px; + background: var(--primary); + color: white; + text-decoration: none; + border-radius: 10px; + font-weight: 600; + transition: background 0.2s ease, transform 0.1s ease; +} + +#invite-link:hover { + background: var(--primary-hover); + transform: translateY(-1px); +} \ No newline at end of file diff --git a/app/public/index.html b/app/public/index.html index f1483bb..211f6cf 100644 --- a/app/public/index.html +++ b/app/public/index.html @@ -2,14 +2,25 @@ LazyBot - Bot Discord + + +

LazyBot

Ajouter à Discord + +

Ajout du bot

+

Message de bienvenue et d'au revoir personnalisables.

diff --git a/app/server.js b/app/server.js index d3a906e..41cdcda 100644 --- a/app/server.js +++ b/app/server.js @@ -2,6 +2,7 @@ require("dotenv").config(); // charge les variables depuis .env const express = require("express"); const session = require("express-session"); +const SQLiteStore = require("connect-sqlite3")(session); const fetch = require("cross-fetch"); // fetch compatible Node const path = require("path"); @@ -20,9 +21,11 @@ const REDIRECT_URI = process.env.REDIRECT_URI; // --- Session setup --- app.use(session({ + store: new SQLiteStore({ db: "sessions.sqlite", dir: "./" }), secret: process.env.SESSION_SECRET, resave: false, - saveUninitialized: true, + saveUninitialized: false, + cookie: { maxAge: 7*24*60*60*1000 } // 7 jours })); // --- Servir le dossier public --- @@ -82,6 +85,13 @@ app.get("/auth/discord/callback", async (req, res) => { } }); + +app.get("/logout", (req, res) => { + req.session.destroy(); + res.redirect("/"); +}); + + // --- API pour récupérer l'objet user côté front --- app.get("/api/user", (req, res) => { if (req.session.user) {