51 lines
2.1 KiB
JavaScript
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 |