Skip to content

Commit ec4ab82

Browse files
committed
Better server error handling
RobTop finally got https lets goo
1 parent 9d9853d commit ec4ab82

20 files changed

+31
-27
lines changed

api/comments.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ module.exports = async (app, req, res) => {
2020

2121
req.gdRequest(path, req.gdParams(params), function(err, resp, body) {
2222

23-
if (err || body == '-1' || !body) return res.send("-1")
23+
if (err) return res.send("-1")
2424

2525
comments = body.split('|')
2626
comments = comments.map(x => x.split(':'))

api/download.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ module.exports = async (app, req, res, api, ID, analyze) => {
2121

2222
req.gdRequest('downloadGJLevel22', { levelID }, function (err, resp, body) {
2323

24-
if (err || !body || body == '-1' || body.startsWith("<")) {
24+
if (err) {
2525
if (analyze && api && req.server.downloadsDisabled) return res.send("-3")
2626
else if (!api && levelID < 0) return res.redirect(`/?daily=${levelID * -1}`)
2727
else return rejectLevel()

api/gauntlets.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ module.exports = async (app, req, res) => {
1010

1111
req.gdRequest('getGJGauntlets21', {}, function (err, resp, body) {
1212

13-
if (err || !body || body == '-1' || body.startsWith("<")) return res.send("-1")
13+
if (err) return res.send("-1")
1414
let gauntlets = body.split('#')[0].split('|').map(x => app.parseResponse(x)).filter(x => x[3])
1515
let gauntletList = gauntlets.map(x => ({ id: +x[1], name: gauntletNames[+x[1] - 1] || "Unknown", levels: x[3].split(",") }))
1616

api/icon.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -374,11 +374,11 @@ module.exports = async (app, req, res) => {
374374
// skip request by causing fake error lmao
375375
req.gdRequest(skipRequest ? "" : 'getGJUsers20', skipRequest ? {} : req.gdParams({ str: username, forceGD }, !forceGD), function (err1, res1, body1) {
376376

377-
let result = foundID ? foundID[0] : (accountMode || err1 || !body1 || body1 == "-1" || body1.startsWith("<")) ? username : app.parseResponse(body1)[16];
377+
let result = foundID ? foundID[0] : (accountMode || err1) ? username : app.parseResponse(body1)[16];
378378

379379
req.gdRequest('getGJUserInfo20', req.gdParams({ targetAccountID: result, forceGD }, !forceGD), function (err2, res2, body2) {
380380

381-
if (err2 || !body2 || body2 == '-1' || body2.startsWith("<")) return buildIcon();
381+
if (err2) return buildIcon();
382382
let iconData = app.parseResponse(body2)
383383
if (!foundID && !forceGD) app.userCache(req.id, iconData[16], iconData[2], iconData[1])
384384
return buildIcon(iconData, userCode);

api/leaderboards/leaderboardLevel.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ module.exports = async (app, req, res) => {
1818

1919
req.gdRequest('getGJLevelScores211', params, function(err, resp, body) {
2020

21-
if (err || body == -1 || !body) return res.send({error: true, lastWorked: app.timeSince(req.id)})
21+
if (err) return res.send({error: true, lastWorked: app.timeSince(req.id)})
2222
scores = body.split('|').map(x => app.parseResponse(x)).filter(x => x[1])
2323
if (!scores.length) return res.send([])
2424
else app.trackSuccess(req.id)

api/leaderboards/scores.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ module.exports = async (app, req, res) => {
1616

1717
req.gdRequest('getGJScores20', params, function(err, resp, body) {
1818

19-
if (err || body == '-1' || !body) return res.send("-1")
19+
if (err) return res.send("-1")
2020
scores = body.split('|').map(x => app.parseResponse(x)).filter(x => x[1])
2121
if (!scores.length) return res.send("-1")
2222

api/level.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ module.exports = async (app, req, res, api, analyze) => {
2121

2222
req.gdRequest('getGJLevels21', { str: levelID, type: 0 }, function (err, resp, body) {
2323

24-
if (err || !body || body == '-1' || body.startsWith("<") || body.startsWith("##")) return rejectLevel()
24+
if (err || body.startsWith("##")) return rejectLevel()
2525

2626
let preRes = body.split('#')[0].split('|', 10)
2727
let author = body.split('#')[1].split('|')[0].split(':')

api/mappacks.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ module.exports = async (app, req, res) => {
1313
function mapPackLoop() {
1414
req.gdRequest('getGJMapPacks21', params, function (err, resp, body) {
1515

16-
if (err || !body || body == '-1' || body.startsWith("<")) return res.send("-1")
16+
if (err) return res.send("-1")
1717

1818
let newPacks = body.split('#')[0].split('|').map(x => app.parseResponse(x)).filter(x => x[2])
1919
packs = packs.concat(newPacks)

api/messages/countMessages.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ module.exports = async (app, req, res) => {
1111

1212
req.gdRequest('getGJUserInfo20', params, function (err, resp, body) {
1313

14-
if (err || body == -1 || body == -2 || !body) return res.status(400).send(`Error counting messages! Messages get blocked a lot so try again later, or make sure your username and password are entered correctly. Last worked: ${app.timeSince(req.id)} ago.`)
14+
if (err) return res.status(400).send(`Error counting messages! Messages get blocked a lot so try again later, or make sure your username and password are entered correctly. Last worked: ${app.timeSince(req.id)} ago.`)
1515
else app.trackSuccess(req.id)
1616
let count = app.parseResponse(body)[38]
1717
if (!count) return res.status(400).send("Error fetching unread messages!")

api/messages/fetchMessage.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ module.exports = async (app, req, res, api) => {
1111

1212
req.gdRequest('downloadGJMessage20', params, function (err, resp, body) {
1313

14-
if (err || body == -1 || !body) return res.status(400).send(`Error fetching message! Try again later, or make sure your username and password are entered correctly. Last worked: ${app.timeSince(req.id)} ago.`)
14+
if (err) return res.status(400).send(`Error fetching message! Try again later, or make sure your username and password are entered correctly. Last worked: ${app.timeSince(req.id)} ago.`)
1515
else app.trackSuccess(req.id)
1616

1717
let x = app.parseResponse(body)

api/messages/getMessages.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ module.exports = async (app, req, res, api) => {
1313

1414
req.gdRequest('getGJMessages20', params, function (err, resp, body) {
1515

16-
if (err || body == -1 || body == -2 || !body) return res.status(400).send(`Error fetching messages! Messages get blocked a lot so try again later, or make sure your username and password are entered correctly. Last worked: ${app.timeSince(req.id)} ago.`)
16+
if (err) return res.status(400).send(`Error fetching messages! Messages get blocked a lot so try again later, or make sure your username and password are entered correctly. Last worked: ${app.timeSince(req.id)} ago.`)
1717
else app.trackSuccess(req.id)
1818

1919
let messages = body.split("|").map(msg => app.parseResponse(msg))

api/post/like.js

+1-2
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,7 @@ module.exports = async (app, req, res) => {
3030
params.chk = chk
3131

3232
req.gdRequest('likeGJItem211', params, function (err, resp, body) {
33-
if (err) return res.status(400).send("The Geometry Dash servers returned an error! Perhaps they're down for maintenance")
34-
if (!body || body == -1) return res.status(400).send(`The Geometry Dash servers rejected your vote! Try again later, or make sure your username and password are entered correctly. Last worked: ${app.timeSince(req.id)} ago.`)
33+
if (err) return res.status(400).send(`The Geometry Dash servers rejected your vote! Try again later, or make sure your username and password are entered correctly. Last worked: ${app.timeSince(req.id)} ago.`)
3534
else app.trackSuccess(req.id)
3635
res.status(200).send((params.like == 1 ? 'Successfully liked!' : 'Successfully disliked!') + " (this will only take effect if this is your first time doing so)")
3736
})

api/post/postComment.js

+1-2
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,7 @@ module.exports = async (app, req, res) => {
3838
params.chk = chk
3939

4040
req.gdRequest('uploadGJComment21', params, function (err, resp, body) {
41-
if (err) return res.status(400).send("The Geometry Dash servers returned an error! Perhaps they're down for maintenance")
42-
if (!body || body == -1) return res.status(400).send(`The Geometry Dash servers rejected your comment! Try again later, or make sure your username and password are entered correctly. Last worked: ${app.timeSince(req.id)} ago.`)
41+
if (err) return res.status(400).send(`The Geometry Dash servers rejected your comment! Try again later, or make sure your username and password are entered correctly. Last worked: ${app.timeSince(req.id)} ago.`)
4342
if (body.startsWith("temp")) {
4443
let banStuff = body.split("_")
4544
return res.status(400).send(`You have been banned from commenting for ${(parseInt(banStuff[1]) / 86400).toFixed(0)} days. Reason: ${banStuff[2] || "None"}`)

api/post/postProfileComment.js

+2-3
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,8 @@ module.exports = async (app, req, res) => {
2323
params.chk = chk
2424

2525
req.gdRequest('uploadGJAccComment20', params, function (err, resp, body) {
26-
if (err) return res.status(400).send("The Geometry Dash servers returned an error! Perhaps they're down for maintenance")
27-
else if (!body || body == -1) return res.status(400).send(`The Geometry Dash servers rejected your profile post! Try again later, or make sure your username and password are entered correctly. Try again later, or make sure your username and password are entered correctly. Last worked: ${app.timeSince(req.id)} ago.`)
28-
if (body.startsWith("temp")) {
26+
if (err) return res.status(400).send(`The Geometry Dash servers rejected your profile post! Try again later, or make sure your username and password are entered correctly. Try again later, or make sure your username and password are entered correctly. Last worked: ${app.timeSince(req.id)} ago.`)
27+
else if (body.startsWith("temp")) {
2928
let banStuff = body.split("_")
3029
return res.status(400).send(`You have been banned from commenting for ${(parseInt(banStuff[1]) / 86400).toFixed(0)} days. Reason: ${banStuff[2] || "None"}`)
3130
}

api/profile.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ module.exports = async (app, req, res, api, getLevels) => {
4040
let account = app.parseResponse(body || "")
4141
let dumbGDPSError = req.isGDPS && (!account[16] || account[1].toLowerCase() == "undefined")
4242

43-
if (err2 || body == '-1' || !body || dumbGDPSError) {
43+
if (err2 || dumbGDPSError) {
4444
if (!api) return res.redirect('/search/' + req.params.id)
4545
else return res.send("-1")
4646
}

api/search.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ module.exports = async (app, req, res) => {
9595

9696
req.gdRequest('getGJLevels21', req.gdParams(filters), function(err, resp, body) {
9797

98-
if (err || !body || body == '-1' || body.startsWith("<")) return res.send("-1")
98+
if (err) return res.send("-1")
9999
let splitBody = body.split('#')
100100
let preRes = splitBody[0].split('|')
101101
let authorList = {}

api/song.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ module.exports = async (app, req, res) => {
88

99
let songID = req.params.song
1010
req.gdRequest('getGJSongInfo', {songID: songID}, function(err, resp, body) {
11-
if (err || !body || body.startsWith("<")) return res.send('-1')
11+
if (err) return res.send('-1')
1212
else if (body < 0) return res.send(false)
1313
request.get('https://www.newgrounds.com/audio/listen/' + songID, function(err2, resp2, song) {
1414
console.log(resp2.statusCode)

assets/gauntlets/unknown.png

26.9 KB
Loading

index.js

+11-4
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,11 @@ app.use(async function(req, res, next) {
105105
let endpoint = req.endpoint
106106
if (params.forceGD || (params.form && params.form.forceGD)) endpoint = "http://boomlings.com/database/"
107107
request.post(endpoint + target + '.php', parameters, function(err, res, body) {
108-
return cb(err, res, body)
108+
let error = err
109+
if (!error && (err || !body || body.match(/^-\d$/) || body.startsWith("error") || body.startsWith("<"))) {
110+
error = {serverError: true, response: body}
111+
}
112+
return cb(error, res, body)
109113
})
110114
}
111115

@@ -150,7 +154,7 @@ try {
150154
app.id = secrets.id
151155
app.gjp = secrets.gjp || app.xor.encrypt(secrets.password)
152156
app.sheetsKey = secrets.sheetsKey
153-
if (!Number(app.id) || !secrets.password || !secrets.gjp || (secrets.password || secrets.gjp).includes("delete this line")) console.warn("Warning: No account ID and/or password has been provided in secretStuff.json! These are required for level leaderboards to work.")
157+
if (!Number(app.id) || (!secrets.password && !secrets.gjp) || (secrets.password || secrets.gjp).includes("delete this line")) console.warn("Warning: No account ID and/or password has been provided in secretStuff.json! These are required for level leaderboards to work.")
154158
if (app.sheetsKey.includes("google sheets api key")) app.sheetsKey = undefined
155159
}
156160

@@ -161,11 +165,11 @@ catch(e) {
161165
else { console.warn("There was an error parsing your secretStuff.json file!"); console.error(e) }
162166
}
163167

164-
app.parseResponse = function (responseBody, splitter) {
168+
app.parseResponse = function (responseBody, splitter=":") {
165169
if (!responseBody || responseBody == "-1") return {};
166170
if (responseBody.startsWith("\nWarning:")) responseBody = responseBody.split("\n").slice(2).join("\n").trim() // GDPS'es are wild
167171
if (responseBody.startsWith("<br />")) responseBody = responseBody.split("<br />").slice(2).join("<br />").trim() // Seriously screw this
168-
let response = responseBody.split('#')[0].split(splitter || ':');
172+
let response = responseBody.split('#')[0].split(splitter);
169173
let res = {};
170174
for (let i = 0; i < response.length; i += 2) {
171175
res[response[i]] = response[i + 1]}
@@ -324,4 +328,7 @@ app.use(function (err, req, res, next) {
324328
if (err && err.message == "Response timeout") res.status(500).send('Internal server error! (Timed out)')
325329
})
326330

331+
process.on('uncaughtException', (e) => { console.log(e) });
332+
process.on('unhandledRejection', (e, p) => { console.log(e) });
333+
327334
app.listen(app.config.port, () => console.log(`Site online! (port ${app.config.port})`))

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
"license": "MIT",
66
"private": true,
77
"dependencies": {
8-
"canvas": "^2.6.1",
8+
"canvas": "^2.8.0",
99
"compression": "^1.7.4",
1010
"connect-timeout": "^1.9.0",
1111
"express": "^4.17.1",

0 commit comments

Comments
 (0)