2025-05-14 11:33:24 +02:00

51 lines
2.1 KiB
JavaScript

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