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
|
||||
9
routes/index.js
Normal file
9
routes/index.js
Normal file
@@ -0,0 +1,9 @@
|
||||
const express = require("express")
|
||||
const router = express.Router()
|
||||
const config = require("../config.json")
|
||||
|
||||
router.get("", (req, res) => {
|
||||
res.redirect(`/auth/provider/${config.auth.defaultProvider}`)
|
||||
})
|
||||
|
||||
module.exports = router
|
||||
20
routes/jwt.js
Normal file
20
routes/jwt.js
Normal file
@@ -0,0 +1,20 @@
|
||||
const fs = require("node:fs")
|
||||
const jwt = require("jsonwebtoken")
|
||||
const path = require("node:path")
|
||||
const express = require("express")
|
||||
const router = express.Router()
|
||||
const controller = require("../controllers/db")
|
||||
|
||||
const privateKey = fs.readFileSync(path.join(__dirname, "..", "keys", "private.pem"))
|
||||
|
||||
router.get("/external/key.pem", (req, res) => {
|
||||
res.sendFile(path.join(__dirname, "..", "keys", "public.pem"))
|
||||
})
|
||||
|
||||
router.post("/internal", controller.login, (req, res) => {
|
||||
delete req.user.token
|
||||
const token = jwt.sign(req.user, privateKey, { algorithm: "RS256", expiresIn: "168h" })
|
||||
res.status(200).send(token)
|
||||
})
|
||||
|
||||
module.exports = router
|
||||
85
routes/lobby.js
Normal file
85
routes/lobby.js
Normal file
@@ -0,0 +1,85 @@
|
||||
const express = require("express")
|
||||
const controller = require("../controllers/db")
|
||||
const router = express.Router()
|
||||
|
||||
router.get("/", (req, res) => {
|
||||
const roomsRequest = controller.listRooms()
|
||||
if (!roomsRequest.success) {
|
||||
res.status(roomsRequest.code).json({
|
||||
error: roomsRequest.error,
|
||||
code: roomsRequest.code
|
||||
})
|
||||
}
|
||||
const rooms = []
|
||||
for (const room of roomsRequest.rooms) {
|
||||
const playersRequest = controller.getPlayersFromRoom(room.id)
|
||||
if (!playersRequest.success) {
|
||||
res.status(playersRequest.code).json({
|
||||
error: playersRequest.error,
|
||||
code: playersRequest.code
|
||||
})
|
||||
break
|
||||
}
|
||||
delete room.password
|
||||
room.players = playersRequest.players
|
||||
rooms.push(room)
|
||||
}
|
||||
res.json(rooms)
|
||||
})
|
||||
|
||||
//TO-DO : Finish it
|
||||
router.post("/:roomId", controller.login, (req, res) => {
|
||||
const { roomId } = req.params
|
||||
const roomGetRequest = controller.getRoom(roomId)
|
||||
if (roomGetRequest.success) {
|
||||
if (roomGetRequest.room.owner == req.user.username) {
|
||||
|
||||
} else {
|
||||
res.status(401).json({ success: false, error: "You must be the owner of this room to update it.", code: 401 })
|
||||
}
|
||||
} else {
|
||||
res.status(roomGetRequest.code).json(roomGetRequest)
|
||||
}
|
||||
})
|
||||
|
||||
router.post("/:roomId/room", controller.login, (req, res) => {
|
||||
const { roomId } = req.params
|
||||
const { password } = req.body
|
||||
const roomGetRequest = controller.getRoom(roomId)
|
||||
if (roomGetRequest.success) {
|
||||
if (!roomGetRequest.room.hasPassword) {
|
||||
res.status(200).send()
|
||||
} else {
|
||||
if (!password) {
|
||||
res.status(422).json({
|
||||
code: 422,
|
||||
message: "Missing parameter in body (password)"
|
||||
})
|
||||
}
|
||||
if (password == roomGetRequest.room.password) {
|
||||
res.status(200).send()
|
||||
} else {
|
||||
res.status(401).json({ code: 401, error: "Invalid credential." })
|
||||
}
|
||||
}
|
||||
} else {
|
||||
res.status(roomGetRequest.code).json(roomGetRequest)
|
||||
}
|
||||
})
|
||||
|
||||
router.delete("/:roomId", controller.login, (req, res) => {
|
||||
const { roomId } = req.params
|
||||
const roomGetRequest = controller.getRoom(roomId)
|
||||
if (roomGetRequest.success) {
|
||||
if (roomGetRequest.room.owner == req.user.username) {
|
||||
const roomDeleteRequest = controller.deleteRoom()
|
||||
res.json(roomDeleteRequest)
|
||||
} else {
|
||||
res.status(401).json({ success: false, error: "You must be the owner of this room to delete it.", code: 401 })
|
||||
}
|
||||
} else {
|
||||
res.status(roomGetRequest.code).json(roomGetRequest)
|
||||
}
|
||||
})
|
||||
|
||||
module.exports = router
|
||||
10
routes/profile.js
Normal file
10
routes/profile.js
Normal file
@@ -0,0 +1,10 @@
|
||||
const express = require("express")
|
||||
const controller = require("../controllers/db")
|
||||
const router = express.Router()
|
||||
|
||||
router.use("", controller.login, (req, res) => {
|
||||
delete req.user.token
|
||||
res.json(req.user)
|
||||
})
|
||||
|
||||
module.exports = router
|
||||
Reference in New Issue
Block a user