First commit

This commit is contained in:
2025-05-14 11:33:24 +02:00
parent cf99f21b9a
commit b4c388b551
15 changed files with 2323 additions and 2 deletions

View 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
View 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
View 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
View 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
View 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