First commit
This commit is contained in:
51
routes/auth/provider/discord.js
Normal file
51
routes/auth/provider/discord.js
Normal file
@@ -0,0 +1,51 @@
|
||||
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
|
||||
Reference in New Issue
Block a user