Add legacy skin and cape routes, improve error handling

Introduces legacy routes for Minecraft skins and capes to support older endpoints. Enhances error handling in sessionsRepository for missing skins/capes, adds getActiveSkin and getActiveCape to sessionsService, and improves error logging in server.js.
This commit is contained in:
Gilles Lazures 2025-12-29 22:02:52 +01:00
parent 80fb6c6cd4
commit 9b36c85974
8 changed files with 82 additions and 3 deletions

View File

@ -69,9 +69,14 @@ async function getActiveSkin(uuid) {
`
const rows = await database.query(sql, [uuid])
const skin = rows[0]
if (!skin) {
throw new DefaultError(404, "Not found", "Not found")
}
return { code: 200, data: skin || null }
} catch (error) {
if (error instanceof DefaultError) {
throw error
}
logger.log("Internal Server Error".bold + " : " + error.toString(), ["MariaDB", "yellow"])
throw new DefaultError(500, "Internal Server Error", "Please contact an administrator.")
}
@ -87,9 +92,14 @@ async function getActiveCape(uuid) {
`
const rows = await database.query(sql, [uuid])
const cape = rows[0]
if (!cape) {
throw new DefaultError(404, "Not found", "Not found")
}
return { code: 200, data: cape || null }
} catch (error) {
if (error instanceof DefaultError) {
throw error
}
logger.log("Internal Server Error".bold + " : " + error.toString(), ["MariaDB", "yellow"])
throw new DefaultError(500, "Internal Server Error", "Please contact an administrator.")
}

View File

@ -0,0 +1,10 @@
const express = require("express")
const router = express.Router({ mergeParams: true })
const sessionsService = require("../../../services/sessionsService")
router.get("", async (req, res) => {
const cape = await sessionsService.getActiveCape({ username: req.params.username.replace(".png", "") })
return res.redirect(`/textures${cape.data.url}`)
})
module.exports = router

View File

@ -0,0 +1,10 @@
const express = require("express")
const router = express.Router({ mergeParams: true })
const sessionsService = require("../../../services/sessionsService")
router.get("", async (req, res) => {
const cape = await sessionsService.getActiveSkin({ username: req.params.username.replace(".png", "") })
return res.redirect(`/textures${cape.data.url}`)
})
module.exports = router

View File

@ -0,0 +1,10 @@
const express = require("express")
const router = express.Router({ mergeParams: true })
const sessionsService = require("../../../services/sessionsService")
router.get("", async (req, res) => {
const cape = await sessionsService.getActiveCape({ username: req.params.username.replace(".png", "") })
return res.redirect(`/textures${cape.data.url}`)
})
module.exports = router

View File

@ -0,0 +1,10 @@
const express = require("express")
const router = express.Router({ mergeParams: true })
const sessionsService = require("../../../services/sessionsService")
router.get("", async (req, res) => {
const cape = await sessionsService.getActiveSkin({ username: req.params.username.replace(".png", "") })
return res.redirect(`/textures${cape.data.url}`)
})
module.exports = router

View File

@ -149,7 +149,7 @@ app.all(/.*/, (req, res, next) => {
app.use((err, req, res, next) => {
const statusCode = err.statusCode || err.code || 500
logger.log(req.originalUrl)
logger.error(`Error occured on: ${req.originalUrl.bold}`, ["API", "red"])
logger.error(err.message, ["API", "red"])
if (typeof err.serialize === "function") {

View File

@ -167,9 +167,37 @@ async function joinLegacyServer({ name, sessionId, serverId }) {
return { code: 200, message: "OK" }
}
async function getActiveSkin({ username }) {
try {
const dbUser = await authRepository.getUser(username)
const activeSkin = await sessionRepository.getActiveSkin(dbUser.user.uuid)
return activeSkin
} catch (error) {
if (!(error instanceof DefaultError)) {
throw new DefaultError(400, "Bad Request", error.toString())
}
throw error
}
}
async function getActiveCape({ username }) {
try {
const dbUser = await authRepository.getUser(username)
const activeCape = await sessionRepository.getActiveCape(dbUser.user.uuid)
return activeCape
} catch (error) {
if (!(error instanceof DefaultError)) {
throw new DefaultError(400, "Bad Request", error.toString())
}
throw error
}
}
module.exports = {
getProfile,
joinServer,
getActiveCape,
getActiveSkin,
hasJoinedServer,
joinLegacyServer,
getBlockedServers,

View File

@ -523,6 +523,7 @@ module.exports = {
getPlayerProperty,
addPlayerProperty,
updatePreferences,
uploadSkinFromUrl,
getSettingsSchema,
getPlayerBanStatus,
removeProfileAction,