const express = require("express") const router = express() const config = require("../../../config.json") const controller = require("../../../controllers/db") const DiscordOauth2 = require("discord-oauth2") const oauth2 = new DiscordOauth2({ clientId: config.auth.providers.discord.clientId, clientSecret: config.auth.providers.discord.clientSecret, redirectUri: config.auth.providers.discord.redirectUri, }) router.get("", async (req, res) => { const { code } = req.query if (code) { try { const token = await oauth2.tokenRequest({ code, grantType: "authorization_code", scope: "identify" }) const user = await oauth2.getUser(token.access_token) if (user) { const isUserAlreadyRegisteredRequest = controller.getUser(user.id) if (isUserAlreadyRegisteredRequest.success) { const $user = isUserAlreadyRegisteredRequest.user if (user.username != $user.username) { controller.updateUserUsername(user.id, user.username) } if (user.global_name != $user.nickname) { controller.updateUserNickname(user.id, user.global_name) } if (buildAvatarURL(user.id, user.avatar) != $user.avatarUrl) { controller.updateUserAvatar(user.id, buildAvatarURL(user.id, user.avatar)) } res.json(controller.getUser(user.id)) } else { const registerUserRequest = controller.addUser(user.id, user.username, user.global_name, `https://cdn.discordapp.com/avatars/${user.id}/${user.avatar}.png`) res.json(registerUserRequest) } } } catch (error) { res.status(500).json({ error: new String(error) }) console.error(error) } } else { res.redirect(config.auth.providers.discord.oauth2Route) } }) function buildAvatarURL(discordId, avatarId) { return `https://cdn.discordapp.com/avatars/${discordId}/${avatarId}.png?size=2048` } module.exports = router