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:
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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