Skip to content

Commit

Permalink
Add new endpoint
Browse files Browse the repository at this point in the history
  • Loading branch information
sevans045 committed Oct 29, 2022
1 parent b1b125c commit 64d406f
Show file tree
Hide file tree
Showing 2 changed files with 147 additions and 92 deletions.
86 changes: 54 additions & 32 deletions index.js
Original file line number Diff line number Diff line change
@@ -1,50 +1,72 @@
const { requestURL, requestUserAgent, isBehindProxy, rateLimitWindowDurationMinutes, rateLimitWindowMax, serverlistQueryIntervalSeconds, listenPort, uniqueUUID } = require("../config/config.json")
const {
requestURL,
requestUserAgent,
isBehindProxy,
rateLimitWindowDurationMinutes,
rateLimitWindowMax,
serverlistQueryIntervalSeconds,
listenPort,
uniqueUUID,
} = require("../config/config.json");

const fs = require("fs")
const app = require("express")()
const rateLimit = require("express-rate-limit")
const fs = require("fs");
const app = require("express")();
const rateLimit = require("express-rate-limit");
const limiter = rateLimit({
windowMs: rateLimitWindowDurationMinutes * 60 * 1000,
max: rateLimitWindowMax
max: rateLimitWindowMax,
});
const axios = require("axios").default
const port = process.env.PORT || listenPort
const axios = require("axios").default;
const port = process.env.PORT || listenPort;

if (uniqueUUID.match("[0-9a-fA-F]{8}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{12}") == null) {
console.error("Something is wrong with the UUID:( https://www.regextester.com/99148")
process.exit(0)
if (
uniqueUUID.match(
"[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}"
) == null
) {
console.error(
"Something is wrong with the UUID:( https://www.regextester.com/99148"
);
process.exit(0);
}

const routes = require("./routes/")
const routes = require("./routes/");

app.use("/api", routes)
app.use(limiter)
app.use("/api", routes);
app.use(limiter);

if (isBehindProxy) {
app.set("trust proxy", 1)
console.log("Trust proxy enabled (this means you are using a proxy)")
app.set("trust proxy", 1);
console.log("Trust proxy enabled (this means you are using a proxy)");
}

app.listen(port, () => {
getInfo()
setInterval(getInfo, serverlistQueryIntervalSeconds * 1000)
console.log(`Listening on port ${port}`)
})
getInfo();
setInterval(getInfo, serverlistQueryIntervalSeconds * 1000);
console.log(`Listening on port ${port}`);
});

function getInfo() {
axios.get(requestURL,
{ headers: { 'User-Agent': requestUserAgent } } )
.then(resp => {
fs.writeFileSync("./storage/raw.json", JSON.stringify(resp.data, null, 2))
axios
.get(requestURL, { headers: { "User-Agent": requestUserAgent } })
.then((resp) => {
fs.writeFileSync(
"./storage/raw.json",
JSON.stringify(resp.data, null, 2)
);
})
.catch((err) => {
console.error(err);
});
axios
.get("https://static.ren-x.com/launcher_data/version/release.json")
.then((resp) => {
fs.writeFileSync(
"./storage/version.json",
JSON.stringify(resp.data, null, 2)
);
})
.catch(err => {
console.error(err)
.catch((err) => {
console.error(err);
});
axios.get("https://static.ren-x.com/launcher_data/version/release.json")
.then(resp => {
fs.writeFileSync("./storage/version.json", JSON.stringify(resp.data, null, 2))
})
.catch(err => {
console.error(err)
})
}
153 changes: 93 additions & 60 deletions routes/index.js
Original file line number Diff line number Diff line change
@@ -1,60 +1,87 @@
const renx_data = require("../storage/raw.json")
const { uniqueUUID } = require(("../../config/config.json"))
const routes = require("express").Router()
const fs = require("fs")
const getUuid = require("uuid-by-string")

if (uniqueUUID.match("[0-9a-fA-F]{8}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{12}") == null) {
console.error("Something is wrong with the UUID:( https://www.regextester.com/99148")
process.exit(0)
const renx_data = require("../storage/raw.json");
const { uniqueUUID } = require("../../config/config.json");
const routes = require("express").Router();
const fs = require("fs");
const getUuid = require("uuid-by-string");
const { response } = require("express");

if (
uniqueUUID.match(
"[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}"
) == null
) {
console.error(
"Something is wrong with the UUID:( https://www.regextester.com/99148"
);
process.exit(0);
}

routes.get("/", (req, res) => {
if (renx_data)
res.status(200).send()
else
res.status(503).send()
})
if (renx_data) res.status(200).send();
else res.status(503).send();
});

// Information about servers
routes.get("/server", (req, res) => {
let responseJSON = HandleServerInfo(req);
res.status(200).json(responseJSON)
})
res.status(200).json(responseJSON);
});

function HandleServerInfo(req) {
let renx = filterByRequest(req)
let renx = filterByRequest(req);

return renx;
}

// Information about servers
routes.get("/servercount", (req, res) => {
let responseJSON = HandleServerCountInfo(req);
res.status(200).json(responseJSON);
});

function HandleServerCountInfo(req) {
let renx = filterByRequest(req);
let responseJSON = [];

renx.forEach((server) => {
responseJSON.push({
Name: server.Name,
UUID: server.UUID,
Players: server.Players,
"Game Version": server["Game Version"],
});
});

return responseJSON;
}

// Information about players
routes.get("/player", (req, res) => {
let responseJSON = HandlePlayerList(req);
res.status(200).json(responseJSON)
})
res.status(200).json(responseJSON);
});

function HandlePlayerList(req) {
let renx = filterByRequest(req)
let response = []
let renx = filterByRequest(req);
let response = [];

for (const server in renx) {
if (renx[server]["PlayerList"] != undefined) {
let serverL = new Object()
serverL.Name = renx[server]["Name"]
serverL.UUID = renx[server]["UUID"]
serverL.playerList = []
let serverL = new Object();
serverL.Name = renx[server]["Name"];
serverL.UUID = renx[server]["UUID"];
serverL.playerList = [];

for (const player in renx[server]["PlayerList"]) {
let playerO = new Object()
let playerO = new Object();

playerO.Name = renx[server]["PlayerList"][player].Name
response.playerCount++
playerO.Name = renx[server]["PlayerList"][player].Name;
response.playerCount++;

serverL.playerList.push(playerO)
serverL.playerList.push(playerO);
}

response.push(serverL)
response.push(serverL);
}
}

Expand All @@ -64,22 +91,20 @@ function HandlePlayerList(req) {
// Player count
routes.get("/playercount", (req, res) => {
let responseJSON = HandlePlayerCount(req);
res.status(200).json(responseJSON)
})
res.status(200).json(responseJSON);
});

function HandlePlayerCount(req) {
let renx = filterByRequest(req)
let response = new Object()
let renx = filterByRequest(req);
let response = new Object();

response.playerCount = 0
response.activeServers = 0
response.playerCount = 0;
response.activeServers = 0;

for (const server in renx) {
if (renx[server]["PlayerList"])
response.activeServers++
if (renx[server]["PlayerList"]) response.activeServers++;

for (const player in renx[server]["PlayerList"])
response.playerCount++
for (const player in renx[server]["PlayerList"]) response.playerCount++;
}

return response;
Expand All @@ -88,30 +113,30 @@ function HandlePlayerCount(req) {
// Information about mutators
routes.get("/mutator", (req, res) => {
let responseJSON = HandleMutatorList(req);
res.status(200).json(responseJSON)
})
res.status(200).json(responseJSON);
});

function HandleMutatorList(req) {
let renx = filterByRequest(req)
let response = []
let renx = filterByRequest(req);
let response = [];

for (const server in renx) {
if (renx[server]["Mutators"] != undefined) {
let serverL = new Object()
serverL.Name = renx[server]["Name"]
serverL.UUID = renx[server]["UUID"]
serverL.mutatorList = []
let serverL = new Object();
serverL.Name = renx[server]["Name"];
serverL.UUID = renx[server]["UUID"];
serverL.mutatorList = [];

for (const mut in renx[server]["Mutators"]) {
let mutator = new Object()
let mutator = new Object();

mutator.Name = renx[server]["Mutators"][mut].Name
response.playerCount++
mutator.Name = renx[server]["Mutators"][mut].Name;
response.playerCount++;

serverL.mutatorList.push(mutator)
serverL.mutatorList.push(mutator);
}

response.push(serverL)
response.push(serverL);
}
}

Expand All @@ -122,25 +147,33 @@ function HandleMutatorList(req) {

// Every request must pass through here
function filterByRequest(req) {
var renx = JSON.parse(fs.readFileSync("./storage/raw.json"))
var version = JSON.parse(fs.readFileSync("./storage/version.json"))
var renx = JSON.parse(fs.readFileSync("./storage/raw.json"));
var version = JSON.parse(fs.readFileSync("./storage/version.json"));

for (const property in req.query) {
if (property == "Game Version" && req.query[property] == "latest")
renx = renx.filter(server => server["Game Version"] == version["game"]["version_name"])
renx = renx.filter(
(server) => server["Game Version"] == version["game"]["version_name"]
);
else {

renx = renx.filter(server => server[property] == req.query[property] || server["Variables"][property] == req.query[property])
renx = renx.filter(
(server) =>
server[property] == req.query[property] ||
server["Variables"][property] == req.query[property]
);
}
}

for (const server in renx) {
renx[server].UUID = getUuid(renx[server].Port + renx[server].IP + uniqueUUID, 5);
renx[server].UUID = getUuid(
renx[server].Port + renx[server].IP + uniqueUUID,
5
);
delete renx[server].IP;
delete renx[server].Port;
}

return renx;
}

module.exports = routes
module.exports = routes;

0 comments on commit 64d406f

Please sign in to comment.