Files
Arthur Puechberty 95cd796839 refonte css of site
2026-01-17 20:59:52 +01:00

71 lines
2.2 KiB
JavaScript

const express = require("express");
const fetch = require("cross-fetch");
const router = express.Router();
const path = require("path");
const CLIENT_ID = process.env.CLIENT_ID;
const CLIENT_SECRET = process.env.CLIENT_SECRET;
const REDIRECT_URI = process.env.REDIRECT_URI;
module.exports = (app, db, client) => {
// --- Redirection login ---
router.get("/login", (req, res) => {
res.redirect("/auth/discord");
});
// --- Connexion Discord ---
router.get("/discord", (req, res) => {
const url = `https://discord.com/api/oauth2/authorize?client_id=${CLIENT_ID}&redirect_uri=${encodeURIComponent(REDIRECT_URI)}&response_type=code&scope=identify%20guilds`;
res.redirect(url);
});
router.get("/discord/callback", async (req, res) => {
const code = req.query.code;
if (!code) return res.send("Pas de code OAuth reçu !");
try {
const data = new URLSearchParams();
data.append("client_id", CLIENT_ID);
data.append("client_secret", CLIENT_SECRET);
data.append("grant_type", "authorization_code");
data.append("code", code);
data.append("redirect_uri", REDIRECT_URI);
data.append("scope", "identify");
const tokenResponse = await fetch("https://discord.com/api/oauth2/token", {
method: "POST",
body: data,
headers: { "Content-Type": "application/x-www-form-urlencoded" },
});
const tokenJson = await tokenResponse.json();
const accessToken = tokenJson.access_token;
const userResponse = await fetch("https://discord.com/api/users/@me", {
headers: { Authorization: `Bearer ${accessToken}` },
});
const user = await userResponse.json();
const guildsResponse = await fetch("https://discord.com/api/users/@me/guilds", {
headers: { Authorization: `Bearer ${accessToken}` },
});
const guilds = await guildsResponse.json();
req.session.user = user;
req.session.guilds = guilds;
res.redirect("/dashboard");
} catch (err) {
console.error(err);
res.send("Erreur lors de la connexion Discord !");
}
});
router.get("/logout", (req, res) => {
req.session.destroy();
res.redirect("/");
});
app.use("/auth", router);
};