Better error handling + general cleanup #182

Merged
punctuations merged 11 commits from master into master 2021-12-07 16:06:33 -03:00
25 changed files with 117 additions and 95 deletions
Showing only changes of commit a81485e83f - Show all commits

12
.gitignore vendored
View file

@ -1,6 +1,9 @@
# Ew # Ew
extra extra
# Package manager lockfiles
package-lock.json package-lock.json
yarn.lock
# Logs # Logs
logs logs
@ -40,9 +43,6 @@ build/Release
node_modules/ node_modules/
jspm_packages/ jspm_packages/
# TypeScript v1 declaration files
typings/
# Optional npm cache directory # Optional npm cache directory
.npm .npm
@ -60,6 +60,8 @@ typings/
# dotenv environment variables file # dotenv environment variables file
.env .env
.env.*
# next.js build output # Editors
.next .idea
.vscode

View file

@ -21,14 +21,14 @@ module.exports = async (app, req, res, level) => {
const raw_data = level.data; const raw_data = level.data;
const response_data = analyze_level(level, raw_data); const response_data = analyze_level(level, raw_data);
return res.send(response_data); return res.status(200).send(response_data);
} else { } else {
zlib.unzip(levelString, (err, buffer) => { zlib.unzip(levelString, (err, buffer) => {
if (err) { return res.send("-2"); } if (err) { return res.status(500).send("-2"); }
const raw_data = buffer.toString(); const raw_data = buffer.toString();
const response_data = analyze_level(level, raw_data); const response_data = analyze_level(level, raw_data);
return res.send(response_data); return res.status(200).send(response_data);
}); });
} }
} }

View file

@ -1,6 +1,6 @@
module.exports = async (app, req, res) => { module.exports = async (app, req, res) => {
if (req.offline) return res.send("-1") if (req.offline) return res.status(500).send("-1")
let count = +req.query.count || 10 let count = +req.query.count || 10
if (count > 1000) count = 1000 if (count > 1000) count = 1000
@ -20,14 +20,14 @@ module.exports = async (app, req, res) => {
req.gdRequest(path, req.gdParams(params), function(err, resp, body) { req.gdRequest(path, req.gdParams(params), function(err, resp, body) {
if (err) return res.send("-1") if (err) return res.status(500).send("-1")
comments = body.split('|') comments = body.split('|')
comments = comments.map(x => x.split(':')) comments = comments.map(x => x.split(':'))
comments = comments.map(x => x.map(x => app.parseResponse(x, "~"))) comments = comments.map(x => x.map(x => app.parseResponse(x, "~")))
if (req.query.type == "profile") comments.filter(x => x[0][2]) if (req.query.type == "profile") comments.filter(x => x[0][2])
else comments = comments.filter(x => x[0] && x[0][2]) else comments = comments.filter(x => x[0] && x[0][2])
if (!comments.length) return res.send("-1") if (!comments.length) return res.status(204).send("-1")
let pages = body.split('#')[1].split(":") let pages = body.split('#')[1].split(":")
let lastPage = +Math.ceil(+pages[0] / +pages[2]); let lastPage = +Math.ceil(+pages[0] / +pages[2]);
@ -79,7 +79,7 @@ module.exports = async (app, req, res) => {
}) })
return res.send(commentArray) return res.status(200).send(commentArray)
}) })
} }

View file

@ -6,7 +6,7 @@ module.exports = async (app, req, res, api, ID, analyze) => {
function rejectLevel() { function rejectLevel() {
if (!api) return res.redirect('search/' + req.params.id) if (!api) return res.redirect('search/' + req.params.id)
else return res.send("-1") else return res.status(500).send("-1")
} }
if (req.offline) { if (req.offline) {
@ -22,7 +22,7 @@ module.exports = async (app, req, res, api, ID, analyze) => {
req.gdRequest('downloadGJLevel22', { levelID }, function (err, resp, body) { req.gdRequest('downloadGJLevel22', { levelID }, function (err, resp, body) {
if (err) { if (err) {
if (analyze && api && req.server.downloadsDisabled) return res.send("-3") if (analyze && api && req.server.downloadsDisabled) return res.status(403).send("-3")
else if (!api && levelID < 0) return res.redirect(`/?daily=${levelID * -1}`) else if (!api && levelID < 0) return res.redirect(`/?daily=${levelID * -1}`)
else return rejectLevel() else return rejectLevel()
} }
@ -69,7 +69,7 @@ module.exports = async (app, req, res, api, ID, analyze) => {
if (analyze) return app.run.analyze(app, req, res, level) if (analyze) return app.run.analyze(app, req, res, level)
function sendLevel() { function sendLevel() {
if (api) return res.send(level) if (api) return res.status(200).send(level)
else return fs.readFile('./html/level.html', 'utf8', function (err, data) { else return fs.readFile('./html/level.html', 'utf8', function (err, data) {
let html = data; let html = data;
@ -78,7 +78,7 @@ module.exports = async (app, req, res, api, ID, analyze) => {
let regex = new RegExp(`\\[\\[${x.toUpperCase()}\\]\\]`, "g") let regex = new RegExp(`\\[\\[${x.toUpperCase()}\\]\\]`, "g")
html = html.replace(regex, app.clean(level[x])) html = html.replace(regex, app.clean(level[x]))
}) })
return res.send(html) return res.status(200).send(html)
}) })
} }

View file

@ -3,19 +3,19 @@ let gauntletNames = ["Fire", "Ice", "Poison", "Shadow", "Lava", "Bonus", "Chaos"
module.exports = async (app, req, res) => { module.exports = async (app, req, res) => {
if (req.offline) return res.send("-1") if (req.offline) return res.status(500).send("-1")
let cached = cache[req.id] let cached = cache[req.id]
if (app.config.cacheGauntlets && cached && cached.data && cached.indexed + 2000000 > Date.now()) return res.send(cached.data) // half hour cache if (app.config.cacheGauntlets && cached && cached.data && cached.indexed + 2000000 > Date.now()) return res.status(200).send(cached.data) // half hour cache
req.gdRequest('getGJGauntlets21', {}, function (err, resp, body) { req.gdRequest('getGJGauntlets21', {}, function (err, resp, body) {
if (err) return res.send("-1") if (err) return res.status(500).send("-1")
let gauntlets = body.split('#')[0].split('|').map(x => app.parseResponse(x)).filter(x => x[3]) let gauntlets = body.split('#')[0].split('|').map(x => app.parseResponse(x)).filter(x => x[3])
let gauntletList = gauntlets.map(x => ({ id: +x[1], name: gauntletNames[+x[1] - 1] || "Unknown", levels: x[3].split(",") })) let gauntletList = gauntlets.map(x => ({ id: +x[1], name: gauntletNames[+x[1] - 1] || "Unknown", levels: x[3].split(",") }))
if (app.config.cacheGauntlets) cache[req.id] = {data: gauntletList, indexed: Date.now()} if (app.config.cacheGauntlets) cache[req.id] = {data: gauntletList, indexed: Date.now()}
res.send(gauntletList) res.status(200).send(gauntletList)
}) })

View file

@ -9,8 +9,9 @@ let caches = [{"stars": null, "coins": null, "demons": null, "diamonds": null},
module.exports = async (app, req, res, post) => { module.exports = async (app, req, res, post) => {
if (req.isGDPS) return res.send("-2") // Accurate leaderboard returns 418 because private servers do not use.
if (!app.sheetsKey) return res.send([]) if (req.isGDPS) return res.status(418).send("-2")
if (!app.sheetsKey) return res.status(500).send([])
let gdMode = post || req.query.hasOwnProperty("gd") let gdMode = post || req.query.hasOwnProperty("gd")
let modMode = !gdMode && req.query.hasOwnProperty("mod") let modMode = !gdMode && req.query.hasOwnProperty("mod")
let cache = caches[gdMode ? 2 : modMode ? 1 : 0] let cache = caches[gdMode ? 2 : modMode ? 1 : 0]
@ -18,7 +19,7 @@ module.exports = async (app, req, res, post) => {
let type = req.query.type ? req.query.type.toLowerCase() : 'stars' let type = req.query.type ? req.query.type.toLowerCase() : 'stars'
if (type == "usercoins") type = "coins" if (type == "usercoins") type = "coins"
if (!indexes.includes(type)) type = "stars" if (!indexes.includes(type)) type = "stars"
if (lastIndex[modMode ? 1 : 0][type] + 600000 > Date.now() && cache[type]) return res.send(gdMode ? cache[type] : JSON.parse(cache[type])) // 10 min cache if (lastIndex[modMode ? 1 : 0][type] + 600000 > Date.now() && cache[type]) return res.status(200).send(gdMode ? cache[type] : JSON.parse(cache[type])) // 10 min cache
sheet.useApiKey(app.sheetsKey) sheet.useApiKey(app.sheetsKey)
sheet.loadInfo().then(async () => { sheet.loadInfo().then(async () => {
@ -29,7 +30,7 @@ module.exports = async (app, req, res, post) => {
if (modMode) cellIndex += indexes.length if (modMode) cellIndex += indexes.length
let cell = tab.getCell(1, cellIndex).value let cell = tab.getCell(1, cellIndex).value
if (!cell || typeof cell != "string" || cell.startsWith("GoogleSpreadsheetFormulaError")) { console.log("Spreadsheet Error:"); console.log(cell); return res.send("-1") } if (!cell || typeof cell != "string" || cell.startsWith("GoogleSpreadsheetFormulaError")) { console.log("Spreadsheet Error:"); console.log(cell); return res.status(500).send("-1") }
let leaderboard = JSON.parse(cell.replace(/~( |$)/g, "")) let leaderboard = JSON.parse(cell.replace(/~( |$)/g, ""))
let gdFormatting = "" let gdFormatting = ""
@ -40,7 +41,7 @@ module.exports = async (app, req, res, post) => {
caches[modMode ? 1 : 0][type] = JSON.stringify(leaderboard) caches[modMode ? 1 : 0][type] = JSON.stringify(leaderboard)
caches[2][type] = gdFormatting caches[2][type] = gdFormatting
lastIndex[modMode ? 1 : 0][type] = Date.now() lastIndex[modMode ? 1 : 0][type] = Date.now()
return res.send(gdMode ? gdFormatting : leaderboard) return res.status(200).send(gdMode ? gdFormatting : leaderboard)
}) })
} }

View file

@ -2,12 +2,13 @@ const request = require('request')
module.exports = async (app, req, res) => { module.exports = async (app, req, res) => {
if (req.isGDPS) return res.send("0") // Accurate leaderboard returns 418 because Private servers do not use.
if (req.isGDPS) return res.status(418).send("0")
request.post('http://robtopgames.com/Boomlings/get_scores.php', { request.post('http://robtopgames.com/Boomlings/get_scores.php', {
form : { secret: app.config.params.secret || "Wmfd2893gb7", name: "Player" } }, function(err, resp, body) { form : { secret: app.config.params.secret || "Wmfd2893gb7", name: "Player" } }, function(err, resp, body) {
if (err || !body || body == 0) return res.send("0") if (err || !body || body == 0) return res.status(500).send("0")
let info = body.split(" ").filter(x => x.includes(";")) let info = body.split(" ").filter(x => x.includes(";"))
let users = [] let users = []
@ -36,7 +37,7 @@ module.exports = async (app, req, res) => {
users.push(user) users.push(user)
}) })
return res.send(users) return res.status(200).send(users)
}) })
} }

View file

@ -1,6 +1,6 @@
module.exports = async (app, req, res) => { module.exports = async (app, req, res) => {
if (req.offline) return res.send("-1") if (req.offline) return res.status(500).send("-1")
let amount = 100; let amount = 100;
let count = req.query.count ? parseInt(req.query.count) : null let count = req.query.count ? parseInt(req.query.count) : null
@ -18,9 +18,9 @@ module.exports = async (app, req, res) => {
req.gdRequest('getGJLevelScores211', params, function(err, resp, body) { req.gdRequest('getGJLevelScores211', params, function(err, resp, body) {
if (err) return res.send({error: true, lastWorked: app.timeSince(req.id)}) if (err) return res.status(500).send({error: true, lastWorked: app.timeSince(req.id)})
scores = body.split('|').map(x => app.parseResponse(x)).filter(x => x[1]) scores = body.split('|').map(x => app.parseResponse(x)).filter(x => x[1])
if (!scores.length) return res.send([]) if (!scores.length) return res.status(500).send([])
else app.trackSuccess(req.id) else app.trackSuccess(req.id)
scores.forEach(x => { scores.forEach(x => {
@ -43,7 +43,7 @@ module.exports = async (app, req, res) => {
app.userCache(req.id, x.accountID, x.playerID, x.username) app.userCache(req.id, x.accountID, x.playerID, x.username)
}) })
return res.send(scores.slice(0, amount)) return res.status(200).send(scores.slice(0, amount))
}) })
} }

View file

@ -1,6 +1,6 @@
module.exports = async (app, req, res) => { module.exports = async (app, req, res) => {
if (req.offline) return res.send("-1") if (req.offline) return res.status(500).send("-1")
let amount = 100; let amount = 100;
let count = req.query.count ? parseInt(req.query.count) : null let count = req.query.count ? parseInt(req.query.count) : null
@ -16,9 +16,9 @@ module.exports = async (app, req, res) => {
req.gdRequest('getGJScores20', params, function(err, resp, body) { req.gdRequest('getGJScores20', params, function(err, resp, body) {
if (err) return res.send("-1") if (err) return res.status(500).send("-1")
scores = body.split('|').map(x => app.parseResponse(x)).filter(x => x[1]) scores = body.split('|').map(x => app.parseResponse(x)).filter(x => x[1])
if (!scores.length) return res.send("-1") if (!scores.length) return res.status(500).send("-1")
scores.forEach(x => { scores.forEach(x => {
let keys = Object.keys(x) let keys = Object.keys(x)
@ -42,6 +42,6 @@ module.exports = async (app, req, res) => {
keys.forEach(k => delete x[k]) keys.forEach(k => delete x[k])
app.userCache(req.id, x.accountID, x.playerID, x.username) app.userCache(req.id, x.accountID, x.playerID, x.username)
}) })
return res.send(scores) return res.status(200).send(scores)
}) })
} }

View file

@ -6,7 +6,7 @@ module.exports = async (app, req, res, api, analyze) => {
function rejectLevel() { function rejectLevel() {
if (!api) return res.redirect('search/' + req.params.id) if (!api) return res.redirect('search/' + req.params.id)
else return res.send("-1") else return res.status(500).send("-1")
} }
if (req.offline) return rejectLevel() if (req.offline) return rejectLevel()
@ -37,7 +37,7 @@ module.exports = async (app, req, res, api, analyze) => {
function sendLevel() { function sendLevel() {
if (api) return res.send(level) if (api) return res.status(200).send(level)
else return fs.readFile('./html/level.html', 'utf8', function (err, data) { else return fs.readFile('./html/level.html', 'utf8', function (err, data) {
let html = data; let html = data;
@ -50,7 +50,7 @@ module.exports = async (app, req, res, api, analyze) => {
}) })
if (req.server.downloadsDisabled) html = html.replace('id="additional" class="', 'id="additional" class="downloadDisabled ') if (req.server.downloadsDisabled) html = html.replace('id="additional" class="', 'id="additional" class="downloadDisabled ')
.replace('analyzeBtn"', 'analyzeBtn" style="filter: opacity(30%)"') .replace('analyzeBtn"', 'analyzeBtn" style="filter: opacity(30%)"')
return res.send(html) return res.status(200).send(html)
}) })
} }

View file

@ -3,17 +3,17 @@ let cache = {}
module.exports = async (app, req, res) => { module.exports = async (app, req, res) => {
if (req.offline) return res.send("-1") if (req.offline) return res.status(500).send("-1")
let cached = cache[req.id] let cached = cache[req.id]
if (app.config.cacheMapPacks && cached && cached.data && cached.indexed + 5000000 > Date.now()) return res.send(cached.data) // 1.5 hour cache if (app.config.cacheMapPacks && cached && cached.data && cached.indexed + 5000000 > Date.now()) return res.status(200).send(cached.data) // 1.5 hour cache
let params = { count: 250, page: 0 } let params = { count: 250, page: 0 }
let packs = [] let packs = []
function mapPackLoop() { function mapPackLoop() {
req.gdRequest('getGJMapPacks21', params, function (err, resp, body) { req.gdRequest('getGJMapPacks21', params, function (err, resp, body) {
if (err) return res.send("-1") if (err) return res.status(500).send("-1")
let newPacks = body.split('#')[0].split('|').map(x => app.parseResponse(x)).filter(x => x[2]) let newPacks = body.split('#')[0].split('|').map(x => app.parseResponse(x)).filter(x => x[2])
packs = packs.concat(newPacks) packs = packs.concat(newPacks)
@ -36,7 +36,7 @@ module.exports = async (app, req, res) => {
})) }))
if (app.config.cacheMapPacks) cache[req.id] = {data: mappacks, indexed: Date.now()} if (app.config.cacheMapPacks) cache[req.id] = {data: mappacks, indexed: Date.now()}
return res.send(mappacks) return res.status(200).send(mappacks)
}) })
} }
mapPackLoop() mapPackLoop()

View file

@ -1,5 +1,7 @@
module.exports = async (app, req, res) => { module.exports = async (app, req, res) => {
if (req.method !== 'POST') return res.status(405).send("Method not allowed.")
if (!req.body.accountID) return res.status(400).send("No account ID provided!") if (!req.body.accountID) return res.status(400).send("No account ID provided!")
if (!req.body.password) return res.status(400).send("No password provided!") if (!req.body.password) return res.status(400).send("No password provided!")

View file

@ -1,4 +1,6 @@
module.exports = async (app, req, res, api) => { module.exports = async (app, req, res) => {
if (req.method !== 'POST') return res.status(405).send("Method not allowed.")
if (!req.body.accountID) return res.status(400).send("No account ID provided!") if (!req.body.accountID) return res.status(400).send("No account ID provided!")
if (!req.body.password) return res.status(400).send("No password provided!") if (!req.body.password) return res.status(400).send("No password provided!")

View file

@ -1,4 +1,6 @@
module.exports = async (app, req, res, api) => { module.exports = async (app, req, res) => {
if (req.method !== 'POST') return res.status(405).send("Method not allowed.")
if (!req.body.accountID) return res.status(400).send("No account ID provided!") if (!req.body.accountID) return res.status(400).send("No account ID provided!")
if (!req.body.password) return res.status(400).send("No password provided!") if (!req.body.password) return res.status(400).send("No password provided!")

View file

@ -1,4 +1,6 @@
module.exports = async (app, req, res, api) => { module.exports = async (app, req, res) => {
if (req.method !== 'POST') return res.status(405).send("Method not allowed.")
if (req.body.count) return app.run.countMessages(app, req, res) if (req.body.count) return app.run.countMessages(app, req, res)
if (!req.body.accountID) return res.status(400).send("No account ID provided!") if (!req.body.accountID) return res.status(400).send("No account ID provided!")

View file

@ -1,4 +1,6 @@
module.exports = async (app, req, res, api) => { module.exports = async (app, req, res) => {
if (req.method !== 'POST') return res.status(405).send("Method not allowed.")
if (!req.body.targetID) return res.status(400).send("No target ID provided!") if (!req.body.targetID) return res.status(400).send("No target ID provided!")
if (!req.body.message) return res.status(400).send("No message provided!") if (!req.body.message) return res.status(400).send("No message provided!")

View file

@ -3,6 +3,8 @@ function sha1(data) { return crypto.createHash("sha1").update(data, "binary").di
module.exports = async (app, req, res) => { module.exports = async (app, req, res) => {
if (req.method !== 'POST') return res.status(405).send("Method not allowed.")
if (!req.body.ID) return res.status(400).send("No ID provided!") if (!req.body.ID) return res.status(400).send("No ID provided!")
if (!req.body.accountID) return res.status(400).send("No account ID provided!") if (!req.body.accountID) return res.status(400).send("No account ID provided!")
if (!req.body.password) return res.status(400).send("No password provided!") if (!req.body.password) return res.status(400).send("No password provided!")

View file

@ -11,6 +11,8 @@ function getTime(time) {
module.exports = async (app, req, res) => { module.exports = async (app, req, res) => {
if (req.method !== 'POST') return res.status(405).send("Method not allowed.")
if (!req.body.comment) return res.status(400).send("No comment provided!") if (!req.body.comment) return res.status(400).send("No comment provided!")
if (!req.body.username) return res.status(400).send("No username provided!") if (!req.body.username) return res.status(400).send("No username provided!")
if (!req.body.levelID) return res.status(400).send("No level ID provided!") if (!req.body.levelID) return res.status(400).send("No level ID provided!")

View file

@ -3,6 +3,8 @@ function sha1(data) { return crypto.createHash("sha1").update(data, "binary").di
module.exports = async (app, req, res) => { module.exports = async (app, req, res) => {
if (req.method !== 'POST') return res.status(405).send("Method not allowed.")
if (!req.body.comment) return res.status(400).send("No comment provided!") if (!req.body.comment) return res.status(400).send("No comment provided!")
if (!req.body.username) return res.status(400).send("No username provided!") if (!req.body.username) return res.status(400).send("No username provided!")
if (!req.body.accountID) return res.status(400).send("No account ID provided!") if (!req.body.accountID) return res.status(400).send("No account ID provided!")

View file

@ -4,7 +4,7 @@ module.exports = async (app, req, res, api, getLevels) => {
if (req.offline) { if (req.offline) {
if (!api) return res.redirect('/search/' + req.params.id) if (!api) return res.redirect('/search/' + req.params.id)
else return res.send("-1") else return res.status(500).send("-1")
} }
let username = getLevels || req.params.id let username = getLevels || req.params.id
@ -42,7 +42,7 @@ module.exports = async (app, req, res, api, getLevels) => {
if (err2 || dumbGDPSError) { if (err2 || dumbGDPSError) {
if (!api) return res.redirect('/search/' + req.params.id) if (!api) return res.redirect('/search/' + req.params.id)
else return res.send("-1") else return res.status(500).send("-1")
} }
if (!foundID) app.userCache(req.id, account[16], account[2], account[1]) if (!foundID) app.userCache(req.id, account[16], account[2], account[1])
@ -78,7 +78,7 @@ module.exports = async (app, req, res, api, getLevels) => {
glow: account[28] == "1", glow: account[28] == "1",
} }
if (api) return res.send(userData) if (api) return res.status(200).send(userData)
else fs.readFile('./html/profile.html', 'utf8', function(err, data) { else fs.readFile('./html/profile.html', 'utf8', function(err, data) {
let html = data; let html = data;
@ -87,7 +87,7 @@ module.exports = async (app, req, res, api, getLevels) => {
let regex = new RegExp(`\\[\\[${x.toUpperCase()}\\]\\]`, "g") let regex = new RegExp(`\\[\\[${x.toUpperCase()}\\]\\]`, "g")
html = html.replace(regex, app.clean(userData[x])) html = html.replace(regex, app.clean(userData[x]))
}) })
return res.send(html) return res.status(200).send(html)
}) })
}) })

View file

@ -5,17 +5,17 @@ let demonList = {}
module.exports = async (app, req, res) => { module.exports = async (app, req, res) => {
if (req.offline) return res.send(req.query.hasOwnProperty("err") ? "err" : "-1") if (req.offline) return res.status(500).send(req.query.hasOwnProperty("err") ? "err" : "-1")
let demonMode = req.query.hasOwnProperty("demonlist") || req.query.hasOwnProperty("demonList") || req.query.type == "demonlist" || req.query.type == "demonList" let demonMode = req.query.hasOwnProperty("demonlist") || req.query.hasOwnProperty("demonList") || req.query.type == "demonlist" || req.query.type == "demonList"
if (demonMode) { if (demonMode) {
if (!req.server.demonList) return res.send('-1') if (!req.server.demonList) return res.status(400).send('-1')
let dList = demonList[req.id] let dList = demonList[req.id]
if (!dList || !dList.list.length || dList.lastUpdated + 600000 < Date.now()) { // 10 minute cache if (!dList || !dList.list.length || dList.lastUpdated + 600000 < Date.now()) { // 10 minute cache
return request.get(req.server.demonList + 'api/v2/demons/listed/?limit=100', function (err1, resp1, list1) { return request.get(req.server.demonList + 'api/v2/demons/listed/?limit=100', function (err1, resp1, list1) {
if (err1) return res.send("-1") if (err1) return res.status(500).send("-1")
else return request.get(req.server.demonList + 'api/v2/demons/listed/?limit=100&after=100', function (err2, resp2, list2) { else return request.get(req.server.demonList + 'api/v2/demons/listed/?limit=100&after=100', function (err2, resp2, list2) {
if (err2) return res.send("-1") if (err2) return res.status(500).send("-1")
demonList[req.id] = {list: JSON.parse(list1).concat(JSON.parse(list2)).map(x => String(x.level_id)), lastUpdated: Date.now()} demonList[req.id] = {list: JSON.parse(list1).concat(JSON.parse(list2)).map(x => String(x.level_id)), lastUpdated: Date.now()}
return app.run.search(app, req, res) return app.run.search(app, req, res)
}) })
@ -85,7 +85,7 @@ module.exports = async (app, req, res) => {
filters.str = demonMode ? demonList[req.id].list : filters.str.split(",") filters.str = demonMode ? demonList[req.id].list : filters.str.split(",")
listSize = filters.str.length listSize = filters.str.length
filters.str = filters.str.slice(filters.page*amount, filters.page*amount + amount) filters.str = filters.str.slice(filters.page*amount, filters.page*amount + amount)
if (!filters.str.length) return res.send("-1") if (!filters.str.length) return res.status(400).send("-1")
filters.str = filters.str.map(x => String(Number(x) + (+req.query.l || 0))).join() filters.str = filters.str.map(x => String(Number(x) + (+req.query.l || 0))).join()
filters.page = 0 filters.page = 0
} }
@ -95,7 +95,7 @@ module.exports = async (app, req, res) => {
req.gdRequest('getGJLevels21', req.gdParams(filters), function(err, resp, body) { req.gdRequest('getGJLevels21', req.gdParams(filters), function(err, resp, body) {
if (err) return res.send("-1") if (err) return res.status(500).send("-1")
let splitBody = body.split('#') let splitBody = body.split('#')
let preRes = splitBody[0].split('|') let preRes = splitBody[0].split('|')
let authorList = {} let authorList = {}
@ -154,7 +154,7 @@ module.exports = async (app, req, res) => {
}) })
if (filters.type == 10) parsedLevels = parsedLevels.slice((+filters.page) * amount, (+filters.page + 1) * amount) if (filters.type == 10) parsedLevels = parsedLevels.slice((+filters.page) * amount, (+filters.page + 1) * amount)
return res.send(parsedLevels) return res.status(200).send(parsedLevels)
}) })
} }

View file

@ -4,14 +4,15 @@ module.exports = async (app, req, res) => {
// temporary solution until song api is re-enabled // temporary solution until song api is re-enabled
if (req.offline) return res.send('-1') if (req.offline) return res.status(500).send('-1')
let songID = req.params.song let songID = req.params.song
req.gdRequest('getGJSongInfo', {songID: songID}, function(err, resp, body) { req.gdRequest('getGJSongInfo', {songID: songID}, function(err, resp, body) {
if (err) return res.send('-1') if (err) return res.status(400).send('-1')
else if (body < 0) return res.send(false) else if (body < 0) return res.send(false)
request.get('https://www.newgrounds.com/audio/listen/' + songID, function(err2, resp2, song) { request.get('https://www.newgrounds.com/audio/listen/' + songID, function(err2, resp2, song) {
return res.send(resp2.statusCode == 200) console.log(resp2.statusCode)
return res.status(200).send(resp2.statusCode == 200)
}) })
}) })
} }

View file

@ -184,8 +184,8 @@ app.clean = function(text) {if (!text || typeof text != "string") return text; e
app.use('/assets', express.static(__dirname + '/assets', {maxAge: "7d"})); app.use('/assets', express.static(__dirname + '/assets', {maxAge: "7d"}));
app.use('/assets/css', express.static(__dirname + '/assets/css')); // override maxAge app.use('/assets/css', express.static(__dirname + '/assets/css')); // override maxAge
app.get("/sizecheck.js", function(req, res) { res.sendFile(__dirname + "/misc/sizecheck.js") }) app.get("/sizecheck.js", function(req, res) { res.status(200).sendFile(__dirname + "/misc/sizecheck.js") })
app.get("/dragscroll.js", function(req, res) { res.sendFile(__dirname + "/misc/dragscroll.js") }) app.get("/dragscroll.js", function(req, res) { res.status(200).sendFile(__dirname + "/misc/dragscroll.js") })
app.get("/assets/:dir*?", function(req, res) { app.get("/assets/:dir*?", function(req, res) {
let main = (req.params.dir || "").toLowerCase() let main = (req.params.dir || "").toLowerCase()
@ -193,10 +193,10 @@ app.get("/assets/:dir*?", function(req, res) {
if (dir.includes('.') || !req.path.endsWith("/")) { if (dir.includes('.') || !req.path.endsWith("/")) {
if (!req.params[0]) main = "" if (!req.params[0]) main = ""
if (req.params.dir == "deatheffects" || req.params.dir == "trails") return res.sendFile(__dirname + "/assets/deatheffects/0.png") if (req.params.dir == "deatheffects" || req.params.dir == "trails") return res.status(200).sendFile(__dirname + "/assets/deatheffects/0.png")
else if (req.params.dir == "gdps" && req.params[0].endsWith("_icon.png")) return res.sendFile(__dirname + "/assets/gdps/unknown_icon.png") else if (req.params.dir == "gdps" && req.params[0].endsWith("_icon.png")) return res.status(200).sendFile(__dirname + "/assets/gdps/unknown_icon.png")
else if (req.params.dir == "gdps" && req.params[0].endsWith("_logo.png")) return res.sendFile(__dirname + "/assets/gdps/unknown_logo.png") else if (req.params.dir == "gdps" && req.params[0].endsWith("_logo.png")) return res.status(200).sendFile(__dirname + "/assets/gdps/unknown_logo.png")
return res.send(`<p style="font-size: 20px; font-family: aller, helvetica, arial">Looks like this file doesn't exist ¯\\_(ツ)_/¯<br><a href='/assets/${main}'>View directory listing for <b>/assets/${main}</b></a></p>`) return res.status(404).send(`<p style="font-size: 20px; font-family: aller, helvetica, arial">Looks like this file doesn't exist ¯\\_(ツ)_/¯<br><a href='/assets/${main}'>View directory listing for <b>/assets/${main}</b></a></p>`)
} }
let path = `./assets/${dir}` let path = `./assets/${dir}`
@ -205,7 +205,7 @@ app.get("/assets/:dir*?", function(req, res) {
assetPage = fs.readFileSync('./html/assets.html', 'utf8') assetPage = fs.readFileSync('./html/assets.html', 'utf8')
let assetData = JSON.stringify({files: files.filter(x => x.includes('.')), directories: files.filter(x => !x.includes('.'))}) let assetData = JSON.stringify({files: files.filter(x => x.includes('.')), directories: files.filter(x => !x.includes('.'))})
res.send(assetPage.replace('{NAME}', dir || "assets").replace('{DATA}', assetData)) res.status(200).send(assetPage.replace('{NAME}', dir || "assets").replace('{DATA}', assetData))
}) })
@ -230,7 +230,7 @@ let downloadDisabled = ['daily', 'weekly']
let gdpsHide = ['achievements', 'messages'] let gdpsHide = ['achievements', 'messages']
app.get("/", function(req, res) { app.get("/", function(req, res) {
if (req.query.hasOwnProperty("offline") || (req.offline && !req.query.hasOwnProperty("home"))) res.sendFile(__dirname + "/html/offline.html") if (req.query.hasOwnProperty("offline") || (req.offline && !req.query.hasOwnProperty("home"))) res.status(200).sendFile(__dirname + "/html/offline.html")
else { else {
fs.readFile('./html/home.html', 'utf8', function (err, data) { fs.readFile('./html/home.html', 'utf8', function (err, data) {
let html = data; let html = data;
@ -249,26 +249,26 @@ app.get("/", function(req, res) {
html = html.replace('id="dl" style="display: none', 'style="display: block') html = html.replace('id="dl" style="display: none', 'style="display: block')
.replace('No active <span id="noLevel">daily</span> level!', '[Blocked by RobTop]') .replace('No active <span id="noLevel">daily</span> level!', '[Blocked by RobTop]')
} }
return res.send(html) return res.status(200).send(html)
}) })
} }
}) })
app.get("/achievements", function(req, res) { res.sendFile(__dirname + "/html/achievements.html") }) app.get("/achievements", function(req, res) { res.status(200).sendFile(__dirname + "/html/achievements.html") })
app.get("/analyze/:id", function(req, res) { res.sendFile(__dirname + "/html/analyze.html") }) app.get("/analyze/:id", function(req, res) { res.status(200).sendFile(__dirname + "/html/analyze.html") })
app.get("/api", function(req, res) { res.sendFile(__dirname + "/html/api.html") }) app.get("/api", function(req, res) { res.status(200).sendFile(__dirname + "/html/api.html") })
app.get("/boomlings", function(req, res) { res.sendFile(__dirname + "/html/boomlings.html") }) app.get("/boomlings", function(req, res) { res.status(200).sendFile(__dirname + "/html/boomlings.html") })
app.get("/comments/:id", function(req, res) { res.sendFile(__dirname + "/html/comments.html") }) app.get("/comments/:id", function(req, res) { res.status(200).sendFile(__dirname + "/html/comments.html") })
app.get("/demon/:id", function(req, res) { res.sendFile(__dirname + "/html/demon.html") }) app.get("/demon/:id", function(req, res) { res.status(200).sendFile(__dirname + "/html/demon.html") })
app.get("/gauntlets", function(req, res) { res.sendFile(__dirname + "/html/gauntlets.html") }) app.get("/gauntlets", function(req, res) { res.status(200).sendFile(__dirname + "/html/gauntlets.html") })
app.get("/gdps", function(req, res) { res.sendFile(__dirname + "/html/gdps.html") }) app.get("/gdps", function(req, res) { res.status(200).sendFile(__dirname + "/html/gdps.html") })
app.get("/iconkit", function(req, res) { res.sendFile(__dirname + "/html/iconkit.html") }) app.get("/iconkit", function(req, res) { res.status(200).sendFile(__dirname + "/html/iconkit.html") })
app.get("/leaderboard", function(req, res) { res.sendFile(__dirname + "/html/leaderboard.html") }) app.get("/leaderboard", function(req, res) { res.status(200).sendFile(__dirname + "/html/leaderboard.html") })
app.get("/leaderboard/:text", function(req, res) { res.sendFile(__dirname + "/html/levelboard.html") }) app.get("/leaderboard/:text", function(req, res) { res.status(200).sendFile(__dirname + "/html/levelboard.html") })
app.get("/mappacks", function(req, res) { res.sendFile(__dirname + "/html/mappacks.html") }) app.get("/mappacks", function(req, res) { res.status(200).sendFile(__dirname + "/html/mappacks.html") })
app.get("/messages", function(req, res) { res.sendFile(__dirname + "/html/messages.html") }) app.get("/messages", function(req, res) { res.status(200).sendFile(__dirname + "/html/messages.html") })
app.get("/search", function(req, res) { res.sendFile(__dirname + "/html/filters.html") }) app.get("/search", function(req, res) { res.status(200).sendFile(__dirname + "/html/filters.html") })
app.get("/search/:text", function(req, res) { res.sendFile(__dirname + "/html/search.html") }) app.get("/search/:text", function(req, res) { res.status(200).sendFile(__dirname + "/html/search.html") })
// API // API
@ -276,7 +276,7 @@ app.get("/search/:text", function(req, res) { res.sendFile(__dirname + "/html/se
app.get("/api/analyze/:id", RL, function(req, res) { app.run.level(app, req, res, true, true) }) app.get("/api/analyze/:id", RL, function(req, res) { app.run.level(app, req, res, true, true) })
app.get("/api/boomlings", function(req, res) { app.run.boomlings(app, req, res) }) app.get("/api/boomlings", function(req, res) { app.run.boomlings(app, req, res) })
app.get("/api/comments/:id", RL2, function(req, res) { app.run.comments(app, req, res) }) app.get("/api/comments/:id", RL2, function(req, res) { app.run.comments(app, req, res) })
app.get("/api/credits", function(req, res) { res.send(require('./misc/credits.json')) }) app.get("/api/credits", function(req, res) { res.status(200).send(require('./misc/credits.json')) })
app.get("/api/gauntlets", function(req, res) { app.run.gauntlets(app, req, res) }) app.get("/api/gauntlets", function(req, res) { app.run.gauntlets(app, req, res) })
app.get("/api/leaderboard", function(req, res) { app.run[req.query.hasOwnProperty("accurate") ? "accurate" : "scores"](app, req, res) }) app.get("/api/leaderboard", function(req, res) { app.run[req.query.hasOwnProperty("accurate") ? "accurate" : "scores"](app, req, res) })
app.get("/api/leaderboardLevel/:id", RL2, function(req, res) { app.run.leaderboardLevel(app, req, res) }) app.get("/api/leaderboardLevel/:id", RL2, function(req, res) { app.run.leaderboardLevel(app, req, res) })
@ -310,24 +310,23 @@ app.get("/:id", function(req, res) { app.run.level(app, req, res) })
// MISC // MISC
app.get("/icon/:text", function(req, res) { app.run.icon(app, req, res) }) app.get("/icon/:text", function(req, res) { app.run.icon(app, req, res) })
app.get("/api/userCache", function(req, res) { res.send(app.accountCache) }) app.get("/api/userCache", function(req, res) { res.status(200).send(app.accountCache) })
app.get("/api/achievements", function(req, res) { res.send({achievements, types: achievementTypes, shopIcons, colors: colorList }) }) app.get("/api/achievements", function(req, res) { res.status(200).send({achievements, types: achievementTypes, shopIcons, colors: colorList }) })
app.get("/api/music", function(req, res) { res.send(music) }) app.get("/api/music", function(req, res) { res.status(200).send(music) })
app.get("/api/gdps", function(req, res) {res.send(req.query.hasOwnProperty("current") ? app.safeServers.find(x => req.server.id == x.id) : app.safeServers) }) app.get("/api/gdps", function(req, res) {res.status(200).send(req.query.hasOwnProperty("current") ? app.safeServers.find(x => req.server.id == x.id) : app.safeServers) })
app.get('/api/icons', function(req, res) { app.get('/api/icons', function(req, res) {
let sample = [JSON.stringify(sampleIcons[Math.floor(Math.random() * sampleIcons.length)].slice(1))] let sample = [JSON.stringify(sampleIcons[Math.floor(Math.random() * sampleIcons.length)].slice(1))]
let iconserver = req.isGDPS ? req.server.name : undefined let iconserver = req.isGDPS ? req.server.name : undefined
res.send({icons: gdIcons, colors: colorList, colorOrder, whiteIcons, server: iconserver, noCopy: req.onePointNine || req.offline, sample}); res.status(200).send({icons: gdIcons, colors: colorList, colorOrder, whiteIcons, server: iconserver, noCopy: req.onePointNine || req.offline, sample});
}); });
app.get('*', function(req, res) { app.get('*', function(req, res) {
if (req.path.startsWith('/api')) res.send('-1') if (req.path.startsWith('/api')) res.status(404).send('-1')
else res.redirect('/search/404%20') else res.redirect('/search/404%20')
}); });
app.use(function (err, req, res, next) { app.use(function (err, req, res, next) {
if (err && err.message == "Response timeout") res.status(500).send('Internal server error! (Timed out)') if (err && err.message == "Response timeout") res.status(504).send('Internal server error! (Timed out)')
else if (err) console.log(err)
}) })
process.on('uncaughtException', (e) => { console.log(e) }); process.on('uncaughtException', (e) => { console.log(e) });

View file

@ -4,6 +4,9 @@
"main": "index.js", "main": "index.js",
"license": "MIT", "license": "MIT",
"private": true, "private": true,
"scripts": {
"dev": "node ./index.js"
},
"dependencies": { "dependencies": {
"ag-psd": "^14.3.2", "ag-psd": "^14.3.2",
"canvas": "^2.8.0", "canvas": "^2.8.0",

View file

@ -26,7 +26,6 @@
"targetAccountID": "targetBddpvouKE" "targetAccountID": "targetBddpvouKE"
} }
}, },
{ {
"name": "1.9 GDPS", "name": "1.9 GDPS",
"link": "https://absolllute.com/gdps/", "link": "https://absolllute.com/gdps/",