Introduces zod-based validation schemas for Minecraft and Mojang API endpoints. Refactors texture route to support hash-based file serving and removes the old static texture route. Updates database schema for player properties and adds an event to clean expired certificates. Improves ValidationError formatting, adjusts skin/cape URL construction, and adds SSRF protection for skin uploads.
27 lines
814 B
JavaScript
27 lines
814 B
JavaScript
const express = require("express")
|
|
const router = express.Router({ mergeParams: true })
|
|
const path = require("node:path")
|
|
const fs = require("node:fs")
|
|
const { DefaultError } = require("../../../errors/errors")
|
|
|
|
const TEXTURES_DIR = path.join(process.cwd(), "data", "textures")
|
|
|
|
router.get("/", async (req, res, next) => {
|
|
try {
|
|
const hash = req.params.hash
|
|
if (!/^[a-f0-9]{64}$/i.test(hash)) {
|
|
throw new DefaultError(404, "Texture not found")
|
|
}
|
|
|
|
const subDir = hash.substring(0, 2)
|
|
const filePath = path.join(TEXTURES_DIR, subDir, hash)
|
|
if (!fs.existsSync(filePath)) {
|
|
throw new DefaultError(404, "Texture not found")
|
|
}
|
|
res.sendFile(filePath)
|
|
} catch (err) {
|
|
return next(err)
|
|
}
|
|
})
|
|
|
|
module.exports = router |