diff --git a/src/downloadGJLevel22.ts b/src/downloadGJLevel.ts similarity index 63% rename from src/downloadGJLevel22.ts rename to src/downloadGJLevel.ts index ab74da9..582c61b 100644 --- a/src/downloadGJLevel22.ts +++ b/src/downloadGJLevel.ts @@ -1,12 +1,14 @@ import * as xor from './xor'; import * as hashes from './hash'; +const handleRequestsAt = ['downloadGJLevel22', 'downloadGJLevel21', 'downloadGJLevel20', 'downloadGJLevel19', 'downloadGJLevel']; + module.exports = (app) : void => { - app.post('/' + app.get('config').addtopath + 'database/downloadGJLevel22.php', async (req, res) => { + let downloadLevel = async (req, res) => { let level = await app.get('db').collection('levels').findOneAndUpdate({ id: Number(req.body.levelID) }, { - $inc: {downloads: 1} + $inc: { downloads: 1 } }); if (level.value == null) return res.status(200).send('-1'); @@ -25,7 +27,7 @@ module.exports = (app) : void => { description = Buffer.from(description, 'base64').toString('utf8'); } - let response = `1:${level.id}:2:${level.name}:3:${description}:4:${level.levelData}:5:${1 /* level version, placeholder*/}:6:${level.userID}:8:10:9:${level.difficulty}:10:${level.downloads}:11:1:12:${level.audioTrack}:13:${level.gameVersion}:14:${level.likes}:17:${Number(level.difficulty >= 60)}:43:${Math.max((level.difficulty-60)/10, 0)}:25:${Number(level.auto)}:18:${level.stars}:19:${Number(level.featured)}:42:${Number(level.epic)}:45:${level.objects}:15:${level.length}:30:${level.original}:31:1:28:${0 /* upload date */}:29:${0 /* update date*/}:35:${level.songID}:36:${level.extraData}:37:${level.coins}:38:${Number(level.ratedCoins)}:39:${level.requestedStars}:46:1:47:2:48:1:40:${Number(level.hasLDM)}:27:${xorPassword}`; + let response = `1:${level.id}:2:${level.name}:3:${description}:4:${level.levelData}:5:${1 /* level version, placeholder*/}:6:${level.userID}:8:10:9:${level.difficulty}:10:${level.downloads}:11:1:12:${level.audioTrack}:13:${level.gameVersion}:14:${level.likes}:17:${Number(level.difficulty >= 60)}:43:${Math.max((level.difficulty - 60) / 10, 0)}:25:${Number(level.auto)}:18:${level.stars}:19:${Number(level.featured)}:42:${Number(level.epic)}:45:${level.objects}:15:${level.length}:30:${level.original}:31:1:28:${0 /* upload date */}:29:${0 /* update date*/}:35:${level.songID}:36:${level.extraData}:37:${level.coins}:38:${Number(level.ratedCoins)}:39:${level.requestedStars}:46:1:47:2:48:1:40:${Number(level.hasLDM)}:27:${xorPassword}`; response += `#${hashes.hashLevel(level.levelData)}#`; level.demon = level.difficulty >= 60; @@ -34,5 +36,8 @@ module.exports = (app) : void => { response += `${hashes.hashSolo2(extraData)}#${extraData}`; res.status(200).send(response); - }); + }; + + for (let i in handleRequestsAt) + app.post('/' + app.get('config').addtopath + 'database/' + handleRequestsAt[i] + '.php', downloadLevel); }; \ No newline at end of file diff --git a/src/getGJComments21.ts b/src/getGJComments.ts similarity index 77% rename from src/getGJComments21.ts rename to src/getGJComments.ts index 9a486a5..783ba39 100644 --- a/src/getGJComments21.ts +++ b/src/getGJComments.ts @@ -1,5 +1,9 @@ +export{}; // fuck you ts, i have to do this to prevent "cannot redeclare block scoped variable" + +const handleRequestsAt = ['getGJComments21', 'getGJComments20', 'getGJComments19', 'getDJCommentHistory']; + module.exports = (app) : void => { - app.post('/' + app.get('config').addtopath + 'database/getGJComments21.php', async (req, res) => { + let getComments = async (req, res) => { let comments = await app.get('db').collection('comments').find({ levelID: Number(req.body.levelID) }).toArray(); @@ -14,7 +18,7 @@ module.exports = (app) : void => { if (req.body.count) mode = Number(req.body.mode); - switch(mode) { + switch (mode) { case 0: comments.sort((a, b) => b.id - a.id); break; @@ -27,7 +31,7 @@ module.exports = (app) : void => { if (foundComments.count <= 0) return res.status(200).send('#0:0:0'); - + let commentString = foundComments.map(c => { let result = ''; let uploadDate = new Date(c.uploadDate).toISOString(); @@ -46,5 +50,8 @@ module.exports = (app) : void => { .join('|'); res.status(200).send(`${commentString}#${count}:${offset}:10`); - }); + }; + + for (let i in handleRequestsAt) + app.post('/' + app.get('config').addtopath + 'database/' + handleRequestsAt[i] + '.php', getComments); }; \ No newline at end of file diff --git a/src/getGJLevels21.ts b/src/getGJLevels.ts similarity index 85% rename from src/getGJLevels21.ts rename to src/getGJLevels.ts index 3aca8b9..00b2edd 100644 --- a/src/getGJLevels21.ts +++ b/src/getGJLevels.ts @@ -1,9 +1,10 @@ import * as hash from './hash'; const levelsPerPage = 10; // should be kept at 10, increasing/decreasing may lead to unforseeable consequences +const handleRequestsAt = ['getGJLevels21', 'getGJLevels20', 'getGJLevels19', 'getGJLevels']; module.exports = (app) : void => { - app.post('/' + app.get('config').addtopath + 'database/getGJLevels21.php', async (req, res) => { + let getLevels = async (req, res) => { let levelsString = ''; let searchQuery: any = {}; // fuck you typescript, i have to use any or else it screams @@ -16,7 +17,7 @@ module.exports = (app) : void => { if (req.body.epic != '0') searchQuery.epic = true; if (req.body.coins != '0') searchQuery.coins = true; if (req.body.twoPlayer != '0') searchQuery.twoPlayer = true; - if (req.body.star) searchQuery.stars = {$gt: 0}; + if (req.body.star) searchQuery.stars = { $gt: 0 }; if (req.body.original != '0') searchQuery.original = 0; if (req.body.noStar) searchQuery.stars = 0; @@ -33,19 +34,19 @@ module.exports = (app) : void => { searchQuery.auto = false; if (req.body.diff == '-1') { // NA levels searchQuery.difficulty = 0; - } else if(req.body.diff == '-2') { // demons + } else if (req.body.diff == '-2') { // demons if (req.body.demonFilter) { searchQuery.difficulty = 60 + req.body.demonFilter * 10; } else { searchQuery.difficulty = { $gte: 60 }; } - } else if(req.body.diff == '-3') { // auto + } else if (req.body.diff == '-3') { // auto searchQuery.auto = true; } else { searchQuery.$or = req.body.diff .split(',') // multiple diffs .map(d => { - return {difficulty: Number(d) * 10}; + return { difficulty: Number(d) * 10 }; }); } } @@ -55,8 +56,8 @@ module.exports = (app) : void => { $and: [ { $or: [ - {id: Number(req.body.str)}, - {name: {$regex: `${req.body.str}`}} + { id: Number(req.body.str) }, + { name: { $regex: `${req.body.str}` } } ] }, searchQuery @@ -111,21 +112,24 @@ module.exports = (app) : void => { .slice(offset, (Number(req.body.page) + 1) * levelsPerPage - 1); let results = foundLevels - .map(l => + .map(l => `1:${l.id}:2:${l.name}:5:${l.version}:6:${l.userID}:8:10:9:${l.difficulty}:10:${l.downloads}:12:${l.audioTrack}:13:${l.gameVersion}:14:${l.likes}:17:${Number(l.difficulty >= 60)}:43:${Math.max(l.difficulty - 60, 0)}:25:${Number(l.auto)}:18:${l.stars}:19:${Number(l.featured)}:42:${Number(l.epic)}:45:${l.objects}:3:${l.description}:15:${l.length}:30:${l.original}:31:0:37:${l.coins}:38:${Number(l.ratedCoins)}:39:${l.requestedStars}:46:1:47:2:40:${Number(l.hasLDM)}:35:${l.songID}` ) .join('|'); - + let users = new Array(10) // placeholder .fill('16:mat:0') .join('|'); let songs = ''; // placeholder - levelsString = [results, users, songs, levels.length].join('#') + - `:${offset}:${levelsPerPage}#` + - hash.hashLevels(foundLevels); + levelsString = [results, users, songs, levels.length].join('#') + + `:${offset}:${levelsPerPage}#` + + hash.hashLevels(foundLevels); res.status(200).send(levelsString); - }); + }; + + for (let i in handleRequestsAt) + app.post('/' + app.get('config').addtopath + 'database/' + handleRequestsAt[i] + '.php', getLevels); }; \ No newline at end of file diff --git a/src/index.ts b/src/index.ts index 154a02f..102368d 100644 --- a/src/index.ts +++ b/src/index.ts @@ -25,11 +25,11 @@ dbClient.connect((err) => { res.send(`${config.name} homepage - unfinished`); }); - require('./getGJLevels21')(app); - require('./uploadGJLevel21')(app); - require('./downloadGJLevel22')(app); - require('./getGJComments21')(app); - require('./updateGJUserScore22')(app); + require('./getGJLevels')(app); + require('./uploadGJLevel')(app); + require('./downloadGJLevel')(app); + require('./getGJComments')(app); + require('./updateGJUserScore')(app); app.get('*', (req, res) => { console.log('got 404 for ' + req.url); diff --git a/src/updateGJUserScore.ts b/src/updateGJUserScore.ts new file mode 100644 index 0000000..35992dd --- /dev/null +++ b/src/updateGJUserScore.ts @@ -0,0 +1,12 @@ +export{}; // fuck you ts, i have to do this to prevent "cannot redeclare block scoped variable" + +const handleRequestsAt = ['updateGJUserScore22', 'updateGJUserScore21', 'updateGJUserScore20', 'updateGJUserScore19', 'updateGJUserScore']; + +module.exports = (app): void => { + let updateUserScore = async (req, res) => { + res.status(200).send('0'); // temporary + }; + + for (let i in handleRequestsAt) + app.post('/' + app.get('config').addtopath + 'database/' + handleRequestsAt[i] + '.php', updateUserScore); +}; \ No newline at end of file diff --git a/src/updateGJUserScore22.ts b/src/updateGJUserScore22.ts deleted file mode 100644 index 2de9ece..0000000 --- a/src/updateGJUserScore22.ts +++ /dev/null @@ -1,5 +0,0 @@ -module.exports = (app): void => { - app.post('/' + app.get('config').addtopath + 'database/updateGJUserScore22.php', async (req, res) => { - res.status(200).send('0'); // temporary - }); -}; \ No newline at end of file diff --git a/src/uploadGJLevel21.ts b/src/uploadGJLevel.ts similarity index 83% rename from src/uploadGJLevel21.ts rename to src/uploadGJLevel.ts index ff493da..1bf13dc 100644 --- a/src/uploadGJLevel21.ts +++ b/src/uploadGJLevel.ts @@ -1,5 +1,9 @@ +export{}; // fuck you ts, i have to do this to prevent "cannot redeclare block scoped variable" + +const handleRequestsAt = ['uploadGJLevel21', 'uploadGJLevel20', 'uploadGJLevel19', 'uploadGJLevel']; + module.exports = (app): void => { - app.post('/' + app.get('config').addtopath + 'database/uploadGJLevel21.php', async (req, res) => { + let uploadLevel = async (req, res) => { let levels = await app.get('db').collection('levels') .find({}) .toArray(); @@ -61,5 +65,8 @@ module.exports = (app): void => { }); res.status(200).send(String(levelID)); - }); + }; + + for (let i in handleRequestsAt) + app.post('/' + app.get('config').addtopath + 'database/' + handleRequestsAt[i] + '.php', uploadLevel); }; \ No newline at end of file