From 9e7d81323b2d1dd89aeede35f1686182f4bfdfd2 Mon Sep 17 00:00:00 2001 From: ExostFlash Date: Wed, 27 Aug 2025 16:30:29 +0200 Subject: [PATCH] Google adding ... --- database.sqlite | Bin 12288 -> 0 bytes db_init.js | 3 ++- modules/auth/google.js | 55 ++++++++++++++++++++++++++++++++++++++ modules/users/getUsers.js | 12 +++++++++ 4 files changed, 69 insertions(+), 1 deletion(-) delete mode 100644 database.sqlite create mode 100644 modules/auth/google.js diff --git a/database.sqlite b/database.sqlite deleted file mode 100644 index 98766f41596acbfa046dab4e8d7d0be9155ad921..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12288 zcmeI$O;5rw7zgln7+*+W-gd1wO$=j0U>HqAvx5;6MH1yi%2s3vY`7J}#RGm6zmMO? zg9pn5L*(Fzi}^ok*R{`{Z2R5XyW2(}1?xrekV{q~yM$75#uy<)Q$3^lBB;9ASWMJ7 zoBtIWDa3C%{ex(Fp6Ge~{jUP#ApijgKmY;|fB*y_009U<00Qe5n4Zur!!YRUz2x12 z7$+i5(u;P{bn7jbwd&^$m!(T=Kg)h1@L9`!XtA5-<#oN;W>;?ea49`22>DQ?4=pGB zAn~Hu@679er{Z83gj`1PN+Eydl7BD%yyxIR+cZuMN`lZAljLcjcJ>`UmQgzIq+i{! z(qXo*-=2BqRHyossD^+51Rwwb2tWV=5P$##AOHafKww=0FLaCSS!7xllPHnB0Z;l> zr&P3@Vx?NE6>Z11kBWUMN6E2idVW}#9~tn`sNh9I^ZOtmF;|OBQTBvY^Bv3aEvL&X ze$^8tr)!I9*)Ds$QW%AgS@mC3|0Jp*AOHafKmY;|fB*y_009U<00I#BhXR=l+4%zV CpK*Nv diff --git a/db_init.js b/db_init.js index 56bc850..163ea5c 100644 --- a/db_init.js +++ b/db_init.js @@ -9,7 +9,8 @@ function initDb(dbPath = './database.sqlite') { db.run(`CREATE TABLE IF NOT EXISTS users ( id TEXT PRIMARY KEY, username TEXT, - discord_id TEXT, + discord_id TEXT DEFAULT NULL, + google_id TEXT DEFAULT NULL, discriminator TEXT, avatar TEXT )`, (err) => { diff --git a/modules/auth/google.js b/modules/auth/google.js new file mode 100644 index 0000000..f0bb22b --- /dev/null +++ b/modules/auth/google.js @@ -0,0 +1,55 @@ +const axios = require("axios"); + +const { getUserByDId } = require('../users/getUsers'); +const { postUser } = require('../users/postUsers'); + +const CLIEN_ID = "71229835507-9413gbpdamv2qbcb2ov8oda2oqgcsk8q.apps.googleusercontent.com"; +const GOOGLE_SECRET = "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"; +const REDIRECT_URI = "http://localhost:3000/auth/google/callback"; + +exports.handleGoogleAuth = async (code, res) => { + if (!code) return res.status(400).json({ error: "Code de validation manquant" }); + try { + const params = new URLSearchParams(); + params.append("client_id", CLIEN_ID); + params.append("client_secret", GOOGLE_SECRET); + params.append("grant_type", "authorization_code"); + params.append("code", code); + params.append("redirect_uri", GOOGLE_REDIRECT_URI); + const tokenData = await axios.post( + "https://oauth2.googleapis.com/token", + params, + { + headers: { + "Content-Type": "application/x-www-form-urlencoded", + }, + } + ); + const accessToken = tokenData.data.access_token; + const userResponse = await axios.get("https://www.googleapis.com/oauth2/v2/userinfo", { + headers: { + Authorization: `Bearer ${accessToken}`, + }, + }); + const userData = userResponse.data; + if (!userData || !userData.id) { + console.error("Réponse Google inattendue:", userResponse.data); + return res.status(500).json({ error: "Impossible de récupérer les infos utilisateur depuis Google", details: userResponse.data }); + } + let savedUser = await getUserByGId(userData.id); + if (!savedUser) { + const newUser = { + username: userData.name || userData.email, + google_id: userData.id, + email: userData.email, + avatar: userData.picture || 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 à Google" }); + } +}; \ No newline at end of file diff --git a/modules/users/getUsers.js b/modules/users/getUsers.js index 903461b..0a197e2 100644 --- a/modules/users/getUsers.js +++ b/modules/users/getUsers.js @@ -11,4 +11,16 @@ module.exports.getUserByDId = async (discordId) => { resolve(row); }); }); +} + +module.exports.getUserByGId = async (discordId) => { + return new Promise((resolve, reject) => { + const query = `SELECT * FROM users WHERE google_id = ?`; + db.get(query, [discordId], (err, row) => { + if (err) { + return reject(err); + } + resolve(row); + }); + }); } \ No newline at end of file