Initial project structure and core files
Add base project files including environment example, license, README, .gitignore, error classes, ESLint config, database modules, texture assets, repositories, routes, schemas, services, and server entry point. This establishes the foundational structure for a Yggdrasil-compatible REST API with modular error handling, database setup, and route organization.
This commit is contained in:
10
routes/legacy/MinecraftCloaks/[username].js
Normal file
10
routes/legacy/MinecraftCloaks/[username].js
Normal 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
|
||||
10
routes/legacy/MinecraftSkins/[username].js
Normal file
10
routes/legacy/MinecraftSkins/[username].js
Normal 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
|
||||
24
routes/legacy/checkserver.js
Normal file
24
routes/legacy/checkserver.js
Normal file
@@ -0,0 +1,24 @@
|
||||
const express = require("express")
|
||||
const router = express.Router()
|
||||
const sessionsService = require("../../services/sessionsService")
|
||||
|
||||
router.get("/", async (req, res) => {
|
||||
const { user, serverId } = req.query
|
||||
try {
|
||||
const result = await sessionsService.hasJoinedServer({
|
||||
username: user,
|
||||
serverId,
|
||||
ip: null
|
||||
})
|
||||
|
||||
if (result.code === 200) {
|
||||
return res.send("YES")
|
||||
} else {
|
||||
return res.send("NO")
|
||||
}
|
||||
} catch (err) {
|
||||
return res.send("NO")
|
||||
}
|
||||
})
|
||||
|
||||
module.exports = router
|
||||
10
routes/legacy/cloaks/[username].js
Normal file
10
routes/legacy/cloaks/[username].js
Normal 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
|
||||
26
routes/legacy/joinserver.js
Normal file
26
routes/legacy/joinserver.js
Normal file
@@ -0,0 +1,26 @@
|
||||
const express = require("express")
|
||||
const router = express.Router()
|
||||
const sessionsService = require("../../services/sessionsService")
|
||||
const logger = require("../../modules/logger")
|
||||
|
||||
router.get("/", async (req, res) => {
|
||||
const { user, sessionId, serverId } = req.query
|
||||
const clientIp = req.ip || req.connection.remoteAddress
|
||||
|
||||
try {
|
||||
await sessionsService.joinLegacyServer({
|
||||
name: user,
|
||||
sessionId,
|
||||
serverId,
|
||||
ip: clientIp
|
||||
})
|
||||
|
||||
logger.log(`Legacy Join: ${user} -> ${serverId}`, ["AUTH", "green"])
|
||||
return res.send("OK")
|
||||
|
||||
} catch (err) {
|
||||
return res.send("Bad login")
|
||||
}
|
||||
})
|
||||
|
||||
module.exports = router
|
||||
36
routes/legacy/login.js
Normal file
36
routes/legacy/login.js
Normal file
@@ -0,0 +1,36 @@
|
||||
const express = require("express")
|
||||
const router = express.Router()
|
||||
const crypto = require("crypto")
|
||||
const authService = require("../../services/authService")
|
||||
const sessionsService = require("../../services/sessionsService")
|
||||
const logger = require("../../modules/logger")
|
||||
|
||||
router.all("/", async (req, res) => {
|
||||
const { user, password } = { ...req.query, ...req.body }
|
||||
|
||||
try {
|
||||
const result = await authService.authenticate({
|
||||
identifier: user,
|
||||
password,
|
||||
clientToken: "",
|
||||
requireUser: false
|
||||
})
|
||||
|
||||
const profile = result.response.selectedProfile
|
||||
const sessionId = crypto.randomBytes(16).toString("hex")
|
||||
|
||||
await sessionsService.registerLegacySession({
|
||||
uuid: profile.id,
|
||||
sessionId
|
||||
})
|
||||
|
||||
logger.log(`Legacy Login: ${user}`, ["AUTH", "green"])
|
||||
|
||||
const timestamp = Date.now()
|
||||
return res.send(`${timestamp}:deprecated:${profile.name}:${sessionId}:${profile.id}`)
|
||||
} catch (err) {
|
||||
return res.send("Bad login")
|
||||
}
|
||||
})
|
||||
|
||||
module.exports = router
|
||||
10
routes/legacy/skins/[username].js
Normal file
10
routes/legacy/skins/[username].js
Normal 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
|
||||
Reference in New Issue
Block a user