const axios = require("axios"); const { getUserByDId } = require('./../users/getUsers'); const { postUser } = require('./../users/postUsers'); const BOT_ID = "1410258710407811082"; const BOT_SECRET = "Bn5FGfrNZCdG1XpCciOcLkzLmrz6fhib"; const REDIRECT_URI = "http://localhost:3000/auth/discord/callback"; exports.handleDiscordAuth = async (req, res) => { const code = req.query.code; if (!code) return res.status(400).json({ error: "Code de validation manquant" }); try { const params = new URLSearchParams(); params.append("client_id", BOT_ID); params.append("client_secret", BOT_SECRET); params.append("grant_type", "authorization_code"); params.append("code", code); params.append("redirect_uri", REDIRECT_URI); params.append("scope", "identify email"); const tokenData = await axios.post( "https://discord.com/api/oauth2/token", params, { headers: { "Content-Type": "application/x-www-form-urlencoded", }, } ); const accessToken = tokenData.data.access_token; const userResponse = await axios.get("https://discord.com/api/users/@me", { headers: { Authorization: `Bearer ${accessToken}`, }, }); const userData = userResponse.data; if (!userData || !userData.id) { console.error('Réponse Discord inattendue:', userResponse.data); return res.status(500).json({ error: "Impossible de récupérer les infos utilisateur depuis Discord", details: userResponse.data }); } let savedUser = await getUserByDId(userData.id); if (!savedUser) { const newUser = { username: userData.username, discord_id: userData.id, avatar: userData.avatar ? `https://cdn.discordapp.com/avatars/${userData.id}/${userData.avatar}.png` : null, }; savedUser = await postUser(newUser); } req.session.user = savedUser; res.redirect('/'); } catch (err) { console.error(err.response?.data || err.message); res.status(500).json({ error: "Erreur lors de la connexion à Discord" }); } };