const axios = require("axios"); const db = require('./db'); const BOT_ID = "1410578978712060024"; const BOT_SECRET = "vhk6jp_jYjvShOqpI8MJ2Efjjm_9Cmyi"; exports.handleDiscordAuth = async (request, reply) => { const protocol = request.protocol || (request.headers['x-forwarded-proto'] || '').split(',')[0] || 'http'; const host = request.hostname || request.headers.host; const REDIRECT_URI = `${protocol}://${host}/auth/discord/callback`; const code = request.query.code; if (!code) return reply.code(400).send({ 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 reply.code(500).send({ error: "Impossible de récupérer les infos utilisateur depuis Discord", details: userResponse.data }); } let savedUser = db.getUserByDiscordId(userData.id); if (!savedUser) { db.createUser(userData.username, userData.id); savedUser = db.getUserByDiscordId(userData.id); } request.session.user = savedUser; return reply.redirect('/'); } catch (err) { console.error(err.response?.data || err.message); return reply.code(500).send({ error: "Erreur lors de la connexion à Discord" }); } };