From e8f58e63cdf7db775fa07ee90cc04cbbf8173c9f Mon Sep 17 00:00:00 2001 From: azures04 Date: Sun, 28 Dec 2025 22:22:54 +0100 Subject: [PATCH] Refactor texture handling and update route structure Moved sessionserver routes to correct directory and removed subdirectory logic from texture file lookup. Updated texture URLs to remove leading slashes and fixed endpoint concatenation. Added default textures for Alex and Steve. --- data/textures/alex.png | Bin 0 -> 3420 bytes data/textures/steve.png | Bin 0 -> 1094 bytes .../blockedservers.js | 0 .../session/minecraft/hasJoined.js | 0 .../session/minecraft/join.js | 0 .../session/minecraft/profile/[uuid].js | 0 routes/textures/texture/[hash].js | 7 +------ services/authService.js | 4 ++-- services/sessionsService.js | 4 ++-- services/userService.js | 2 +- 10 files changed, 6 insertions(+), 11 deletions(-) create mode 100644 data/textures/alex.png create mode 100644 data/textures/steve.png rename routes/{sessionsserver => sessionserver}/blockedservers.js (100%) rename routes/{sessionsserver => sessionserver}/session/minecraft/hasJoined.js (100%) rename routes/{sessionsserver => sessionserver}/session/minecraft/join.js (100%) rename routes/{sessionsserver => sessionserver}/session/minecraft/profile/[uuid].js (100%) diff --git a/data/textures/alex.png b/data/textures/alex.png new file mode 100644 index 0000000000000000000000000000000000000000..b643fe2d083f64677a630087ba4c4004eac1ca06 GIT binary patch literal 3420 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 { 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) + const filePath = path.join(TEXTURES_DIR, hash) if (!fs.existsSync(filePath)) { throw new DefaultError(404, "Texture not found") } diff --git a/services/authService.js b/services/authService.js index 7ecfc6f..61e5966 100644 --- a/services/authService.js +++ b/services/authService.js @@ -56,7 +56,7 @@ async function authenticate({ identifier, password, clientToken, requireUser }) delete userResult.user.password - const $clientToken = uuidRegex.test(clientToken) ? clientToken : crypto.randomUUID() + const $clientToken = clientToken || crypto.randomUUID() const accessToken = jwt.sign({ uuid: userResult.user.uuid, username: userResult.user.username, @@ -120,7 +120,7 @@ async function refreshToken({ previousAccessToken, clientToken, requireUser }) { await authRepository.invalidateClientSession(previousAccessToken, clientToken) - const $clientToken = uuidRegex.test(clientToken) ? clientToken : crypto.randomUUID() + const $clientToken = clientToken || crypto.randomUUID() const newAccessToken = jwt.sign({ uuid: userResult.user.uuid, username: userResult.user.username, diff --git a/services/sessionsService.js b/services/sessionsService.js index 469a003..9a60ebd 100644 --- a/services/sessionsService.js +++ b/services/sessionsService.js @@ -73,12 +73,12 @@ async function getProfile({ uuid, unsigned = false }) { const hasValidCape = !!activeCape const skinNode = hasValidSkin ? { - url: (process.env.TEXTURES_ENDPOINTS || `http://localhost:${process.env.WEB_PORT}/textures/`) + activeSkin.url, + url: (process.env.TEXTURES_ENDPOINTS || `http://localhost:${process.env.WEB_PORT}/textures`) + activeSkin.url, metadata: activeSkin.variant === "SLIM" ? { model: "slim" } : undefined } : undefined const capeNode = hasValidCape ? { - url: (process.env.TEXTURES_ENDPOINTS || `http://localhost:${process.env.WEB_PORT}/textures/`) + activeCape.url + url: (process.env.TEXTURES_ENDPOINTS || `http://localhost:${process.env.WEB_PORT}/textures`) + activeCape.url } : undefined const texturesObject = { diff --git a/services/userService.js b/services/userService.js index bffe811..3943ead 100644 --- a/services/userService.js +++ b/services/userService.js @@ -459,7 +459,7 @@ async function uploadSkin(uuid, fileObject, variant) { await fs.writeFile(targetPath, buffer) const newTextureUuid = crypto.randomUUID() - const textureUrl = `/texture/${hash}` + const textureUrl = `texture/${hash}` await userRepository.createTexture(newTextureUuid, hash, 'SKIN', textureUrl, null) }