146 lines
6.6 KiB
JavaScript
146 lines
6.6 KiB
JavaScript
const { LogType } = require('loguix');
|
|
const dlog = new LogType("DiscordAuth");
|
|
const { getWebsiteLink, getClientSecret } = require('../../utils/Database/Configuration');
|
|
|
|
|
|
async function getDiscordUser(sessionId, auth_code) {
|
|
|
|
return new Promise((resolve, reject) => {
|
|
const discordBot = require("../../discord/Bot")
|
|
const discordBotClient = discordBot.getClient()
|
|
dlog.step.init("discord_auth_" + sessionId, "Authentification Discord de la session :" + sessionId);
|
|
|
|
dlog.log("Récupération de l'autorisation de récupération des informations de l'utilisateur Discord associé à la session : " + sessionId);
|
|
|
|
const params = new URLSearchParams();
|
|
params.append("client_id", discordBotClient.user.id);
|
|
params.append("client_secret", getClientSecret());
|
|
params.append("grant_type", "authorization_code");
|
|
params.append("code", auth_code);
|
|
params.append("redirect_uri", getWebsiteLink() + "/redirect");
|
|
params.append("scope", "identify guilds");
|
|
|
|
fetch("https://discord.com/api/oauth2/token", {
|
|
method: "POST",
|
|
headers: {
|
|
"Content-Type": "application/x-www-form-urlencoded",
|
|
},
|
|
body: params,
|
|
}).then(accessTokenResp => accessTokenResp.json()).then(accessToken => {
|
|
if (accessToken.error) {
|
|
dlog.step.error("discord_auth_" + sessionId, "Erreur lors de la récupération du token d'accès Discord associé à la session : " + sessionId + " : " + accessToken.error + " : " + accessToken.error_description);
|
|
resolve("ACCESS_TOKEN_ERROR");
|
|
return;
|
|
}
|
|
|
|
|
|
dlog.log("Récupération réussi du token d'accès Discord associé à la session : " + sessionId);
|
|
|
|
fetch("https://discord.com/api/users/@me", {
|
|
headers: {
|
|
authorization: `${accessToken.token_type} ${accessToken.access_token}`,
|
|
},
|
|
}).then(userResp => userResp.json()).then(user => {
|
|
dlog.log("Récupération réussi des informations de l'utilisateur Discord associé à la session : " + sessionId + " avec le nom d'utilisateur : " + user.username + " (" + user.id + ")");
|
|
// Get the guilds of the user
|
|
fetch("https://discord.com/api/users/@me/guilds", {
|
|
headers: {
|
|
authorization: `${accessToken.token_type} ${accessToken.access_token}`,
|
|
},
|
|
}).then(guildsResp => guildsResp.json()).then(guilds => {
|
|
dlog.log("Récupération réussi des guildes de l'utilisateur Discord associé à la session : " + sessionId + " avec le nom d'utilisateur : " + user.username + " (" + user.id + ")");
|
|
dlog.step.end("discord_auth_" + sessionId)
|
|
const userData = {
|
|
auth: accessToken,
|
|
identity: user,
|
|
guilds: guilds,
|
|
}
|
|
resolve(userData);
|
|
}).catch(err => {
|
|
dlog.step.error("discord_auth_" + sessionId, "Erreur lors de la récupération des guildes de l'utilisateur Discord" + " avec le nom d'utilisateur : " + user.username + " (" + user.id + ")" + " associé à la session : " + sessionId + " : " + err);
|
|
resolve("GUILDS_ERROR");
|
|
});
|
|
|
|
}).catch(err => {
|
|
dlog.step.error("discord_auth_" + sessionId, "Erreur lors de la récupération des informations de l'utilisateur Discord associé à la session : " + sessionId + " : " + err);
|
|
resolve( "USER_INFO_ERROR");
|
|
})
|
|
|
|
}).catch(err => {
|
|
dlog.step.error("discord_auth_" + sessionId, "Erreur lors de la récupération du token d'accès Discord associé à la session : " + sessionId + " : " + err);
|
|
resolve("ACCESS_TOKEN_ERROR");
|
|
})
|
|
})
|
|
}
|
|
|
|
function refreshToken(refresh_token) {
|
|
return new Promise((resolve, reject) => {
|
|
const discordBot = require("../../discord/Bot")
|
|
const params = new URLSearchParams();
|
|
params.append("client_id", discordBot.getClient().user.id);
|
|
params.append("client_secret", getClientSecret());
|
|
params.append("grant_type", "refresh_token");
|
|
params.append("refresh_token", refresh_token);
|
|
params.append("scope", "identify guilds");
|
|
|
|
fetch("https://discord.com/api/oauth2/token", {
|
|
method: "POST",
|
|
headers: {
|
|
"Content-Type": "application/x-www-form-urlencoded",
|
|
},
|
|
body: params,
|
|
}).then(accessTokenResp => accessTokenResp.json()).then(accessToken => {
|
|
if (accessToken.error) {
|
|
dlog.error("Erreur lors de la récupération du token d'accès Discord : " + accessToken.error + " : " + accessToken.error_description);
|
|
resolve(null);
|
|
return;
|
|
}
|
|
resolve(accessToken);
|
|
}).catch(err => {
|
|
dlog.error("Erreur lors de la récupération du token d'accès Discord : " + err);
|
|
resolve(null);
|
|
})
|
|
})
|
|
}
|
|
|
|
function getUserGuilds(accessToken) {
|
|
return new Promise((resolve, reject) => {
|
|
fetch("https://discord.com/api/users/@me/guilds", {
|
|
headers: {
|
|
authorization: `${accessToken.token_type} ${accessToken.access_token}`,
|
|
},
|
|
}).then(guildsResp => guildsResp.json()).then(guilds => {
|
|
if (guilds.error) {
|
|
dlog.error("Erreur lors de la récupération des guildes de l'utilisateur Discord : " + guilds.error + " : " + guilds.error_description);
|
|
dlog.log(accessToken.token_type + " " + accessToken.access_token )
|
|
resolve(null);
|
|
return;
|
|
}
|
|
resolve(guilds);
|
|
}).catch(err => {
|
|
dlog.error( "Erreur lors de la récupération des guildes de l'utilisateur Discord : " + err);
|
|
resolve(null);
|
|
})
|
|
})
|
|
}
|
|
|
|
function getUserIdentity(accessToken) {
|
|
return new Promise((resolve, reject) => {
|
|
fetch("https://discord.com/api/users/@me", {
|
|
headers: {
|
|
authorization: `${accessToken.token_type} ${accessToken.access_token}`,
|
|
},
|
|
}).then(userResp => userResp.json()).then(user => {
|
|
if (user.error) {
|
|
dlog.error("Erreur lors de la récupération des informations de l'utilisateur Discord : " + user.error + " : " + user.error_description);
|
|
resolve(null);
|
|
return;
|
|
}
|
|
resolve(user);
|
|
}).catch(err => {
|
|
dlog.error("Erreur lors de la récupération des informations de l'utilisateur Discord : " + err);
|
|
resolve(null);
|
|
})
|
|
})
|
|
}
|
|
module.exports = {getDiscordUser, refreshToken, getUserGuilds, getUserIdentity} |