Move scripts/ to src/ folder #137
22
.Build/test/ci.js
Normal file
22
.Build/test/ci.js
Normal file
@ -0,0 +1,22 @@
|
||||
(async ()=>{
|
||||
try {
|
||||
const bds = require("../../index");
|
||||
await bds.download("latest", true)
|
||||
console.log("Date:", await bds.BdsDate());
|
||||
console.log("Api:", await bds.api());
|
||||
console.log("Backup:", await bds.backup());
|
||||
console.log("Detect Server:", await bds.detect());
|
||||
console.log("Kill Server:", await bds.kill());
|
||||
console.log("Get Config:", await bds.get_config());
|
||||
console.log("Start:", await bds.start());
|
||||
setTimeout(() => {
|
||||
console.log("Kill Server:", bds.kill());
|
||||
}, 1 * 30 * 1000);
|
||||
setTimeout(() => {
|
||||
process.exit(0);
|
||||
}, 1 * 60 * 1000);
|
||||
} catch (err) {
|
||||
console.log("Detect Error:", err);
|
||||
process.exit(1)
|
||||
}
|
||||
})()
|
@ -1,7 +1,7 @@
|
||||
{
|
||||
"docs_base": "https://docs.bdsmaneger.com/docs/Bds Maneger core",
|
||||
"docs": {
|
||||
"url": "https://docs.the-bds-maneger.org",
|
||||
"url": "https://docs.bdsmaneger.com",
|
||||
"main": "Bds Maneger core",
|
||||
"rest_api": "docs/Bds Maneger core/REST API/"
|
||||
},
|
||||
|
@ -5,14 +5,22 @@ const bds = require("../index");
|
||||
const { valid_platform } = require("../lib/BdsSystemInfo");
|
||||
const { bds_dir, GetServerVersion, GetPlatform, UpdatePlatform, GetServerPaths, GetPaths } = require("../lib/BdsSettings");
|
||||
const commandExits = require("../lib/commandExist");
|
||||
const download = require("../scripts/download");
|
||||
const download = require("../src/Scripts/download");
|
||||
process.env.IS_BDS_CLI = process.env.IS_BIN_BDS = true;
|
||||
// Bds Maneger ArgV
|
||||
const argv = require("minimist")(process.argv.slice(2));
|
||||
if (Object.getOwnPropertyNames(argv).length <= 1) argv.help = true
|
||||
|
||||
// Options
|
||||
const server = (argv.p || argv.platform), version = (argv.v || argv.version), SystemCheck = (argv.S || argv.system_info), bds_version = (argv.d || argv.server_download), start = (argv.s || argv.server_version), help = (argv.h || argv.help), kill = (argv.k || argv.kill), docker_runner = (argv.DOCKER_IMAGE)
|
||||
const
|
||||
server = (argv.p || argv.platform),
|
||||
version = (argv.v || argv.version),
|
||||
SystemCheck = (argv.S || argv.system_info),
|
||||
bds_version = (argv.d || argv.server_download),
|
||||
start = (argv.s || argv.server_version),
|
||||
help = (argv.h || argv.help),
|
||||
kill = (argv.k || argv.kill),
|
||||
docker_runner = (argv.DOCKER_IMAGE);
|
||||
|
||||
// --------------------------
|
||||
const Versions = GetServerVersion();
|
||||
@ -24,7 +32,7 @@ if (kill) bds.kill();
|
||||
if (server) UpdatePlatform(server);
|
||||
|
||||
function StartServer(){
|
||||
const { Servers } = require("../lib/ServerURL");
|
||||
const { Servers } = require("../../lib/ServerURL");
|
||||
// Check Server Update
|
||||
if (Versions[GetPlatform()] !== null) {
|
||||
if (Versions[GetPlatform()] !== Servers.latest[GetPlatform()]) {
|
||||
@ -161,7 +169,7 @@ if (bds_version){
|
||||
try {
|
||||
if (argv.interactive) {
|
||||
console.log(`Geting versions to ${GetPlatform()}`);
|
||||
const LoadVersion = require("../lib/ServerURL").Servers[GetPlatform()]
|
||||
const LoadVersion = require("../../lib/ServerURL").Servers[GetPlatform()]
|
||||
const Version = Object.getOwnPropertyNames(LoadVersion)
|
||||
// List Version
|
||||
for (let version in Version) console.log(`${version}: ${GetPlatform()} version ${Version[version]}`); // deepscan-disable-line FORIN_ARRAY
|
||||
|
@ -4,7 +4,7 @@ const path = require("path");
|
||||
const bds = require("../index");
|
||||
const { GetPlatform, GetPaths } = require("../lib/BdsSettings");
|
||||
const { GetKernel, arch, system } = require("../lib/BdsSystemInfo");
|
||||
const { Detect } = require("../scripts/CheckKill");
|
||||
const { Detect } = require("../src/Scripts/CheckKill");
|
||||
const TelegramOptions = require("minimist")(process.argv.slice(2));
|
||||
|
||||
if (TelegramOptions.h || TelegramOptions.help) {
|
||||
|
16
index.js
16
index.js
@ -32,14 +32,14 @@ const { GetPaths, GetJsonConfig, UpdatePlatform, UpdateTelegramToken, GetTelegra
|
||||
module.exports.arch = arch
|
||||
if (typeof fetch === "undefined") global.fetch = require("node-fetch");
|
||||
|
||||
const maneger_ips = require("./scripts/external_ip")
|
||||
const maneger_ips = require("./src/Scripts/external_ip")
|
||||
module.exports.internal_ip = maneger_ips.internal_ip
|
||||
module.exports.external_ip = maneger_ips.external_ip
|
||||
module.exports.save_google_id = require("./lib/BdsSettings").CloudConfig.Driver
|
||||
module.exports.getBdsConfig = GetJsonConfig
|
||||
module.exports.change_platform = module.exports.platform_update = UpdatePlatform
|
||||
module.exports.telegram_token_save = UpdateTelegramToken
|
||||
module.exports.api = require("./rest/api");
|
||||
module.exports.api = require("./src/rest/api");
|
||||
|
||||
// ------------
|
||||
const user_file_connected = GetPaths("player");
|
||||
@ -89,10 +89,10 @@ function token_register() {
|
||||
module.exports.BdsSettigs = require("./lib/BdsSettings");
|
||||
|
||||
// Requires
|
||||
const { World_BAckup } = require("./scripts/backups");
|
||||
const { config, get_config, config_example } = require("./scripts/ServerSettings");
|
||||
const download = require("./scripts/download");
|
||||
const { start, stop, BdsCommand } = require("./scripts/basic_server")
|
||||
const { World_BAckup } = require("./src/Scripts/backups");
|
||||
const { config, get_config, config_example } = require("./src/Scripts/ServerSettings");
|
||||
const download = require("./src/Scripts/download");
|
||||
const { start, stop, BdsCommand } = require("./src/Scripts/basic_server")
|
||||
|
||||
/**
|
||||
* Register tokens to use in Bds Maneger REST and other supported applications
|
||||
@ -130,7 +130,7 @@ module.exports.stop = stop
|
||||
*/
|
||||
module.exports.backup = World_BAckup
|
||||
|
||||
const { Kill, Detect } = require("./scripts/CheckKill")
|
||||
const { Kill, Detect } = require("./src/Scripts/CheckKill")
|
||||
|
||||
/**
|
||||
* identify if there are any servers running in the background
|
||||
@ -196,4 +196,4 @@ module.exports.tmphost = require("./lib/tempHost")
|
||||
/**
|
||||
* Load Crontab Backup
|
||||
*/
|
||||
module.exports.Cron_Loaded = require("./scripts/LoadCronBackup")
|
||||
module.exports.Cron_Loaded = require("./src/Scripts/LoadCronBackup")
|
@ -6,7 +6,7 @@ const yaml = {
|
||||
stringify: require("js-yaml").dump
|
||||
}
|
||||
const FetchSync = require("@the-bds-maneger/fetchsync");
|
||||
const { external_ip } = require("../scripts/external_ip");
|
||||
const { external_ip } = require("../src/Scripts/external_ip");
|
||||
const { valid_platform } = require("./BdsSystemInfo");
|
||||
|
||||
// PATHs
|
||||
@ -154,7 +154,8 @@ module.exports = {
|
||||
GetJsonConfig: function(){return Config},
|
||||
GetPaths: function(path = null){
|
||||
if (!(path)) throw new Error("Set path to get");
|
||||
if (!(Config.paths[path])) throw new Error("Put a valid path: " + Object.getOwnPropertyNames(Config.paths).join(", "));
|
||||
if (!(path === "all" || Config.paths[path])) throw new Error("Put a valid path: " + Object.getOwnPropertyNames(Config.paths).join(", "));
|
||||
if (path === "all") return Config.paths
|
||||
return Config.paths[path]
|
||||
},
|
||||
GetServerPaths: function(path = null){
|
||||
|
@ -1,5 +1,5 @@
|
||||
const { execSync, execFileSync } = require("child_process")
|
||||
const commandExists = require("../lib/commandExist").sync
|
||||
const commandExists = require("./commandExist").sync
|
||||
const { existsSync } = require("fs");
|
||||
const { resolve, join } = require("path")
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
const fetchSync = require("@the-bds-maneger/fetchsync");
|
||||
const { external_ip, Interfaces } = require("../scripts/external_ip");
|
||||
const { external_ip, Interfaces } = require("../src/Scripts/external_ip");
|
||||
const { GetTempHost } = require("./BdsSettings")
|
||||
|
||||
if (GetTempHost()){
|
||||
|
@ -10,7 +10,8 @@
|
||||
"scripts": {
|
||||
"start": "node bin/bds_maneger.js -s",
|
||||
"stop": "node -p 'console.log(require(\"./\").kill());'",
|
||||
"test": "exit 0",
|
||||
"test": "node .Build/test/ci.js",
|
||||
"ci": "node .Build/test/ci.js",
|
||||
"eslint": "eslint --debug .",
|
||||
"eslint:debug": "eslint --debug .",
|
||||
"eslint:fix": "eslint --fix .",
|
||||
|
210
rest/api.js
210
rest/api.js
@ -1,210 +0,0 @@
|
||||
const { readFileSync, existsSync } = require("fs");
|
||||
const { resolve } = require("path");
|
||||
const express = require("express");
|
||||
const bds = require("../index");
|
||||
const cors = require("cors");
|
||||
const rateLimit = require("express-rate-limit");
|
||||
const bodyParser = require("body-parser");
|
||||
const fileUpload = require("express-fileupload");
|
||||
const { GetKernel } = require("../lib/BdsSystemInfo");
|
||||
const commandExist = require("../lib/commandExist");
|
||||
const { GetPlatform, GetServerVersion, GetPaths, UpdatePlatform, bds_dir } = require("../lib/BdsSettings")
|
||||
const admzip = require("adm-zip");
|
||||
const pretty = require("express-prettify");
|
||||
const latest_log = resolve(GetPaths("log"), "latest.log")
|
||||
const docs = require("../BdsManegerInfo.json").docs;
|
||||
const { CheckPlayer, token_verify } = require("../scripts/check");
|
||||
|
||||
function api(port_api = 1932){
|
||||
const app = express();
|
||||
// Enable if you"re behind a reverse proxy (Heroku, Bluemix, AWS ELB, Nginx, etc)
|
||||
// see https://expressjs.com/en/guide/behind-proxies.html
|
||||
// app.set("trust proxy", 1);
|
||||
|
||||
app.use(cors());
|
||||
app.use(bodyParser.json()); /* https://github.com/github/fetch/issues/323#issuecomment-331477498 */
|
||||
app.use(bodyParser.urlencoded({ extended: true }));
|
||||
app.use(rateLimit({windowMs: 15 * 60 * 1000, /* 15 minutes */ max: 100 /* limit each IP to 100 requests per windowMs*/ }));
|
||||
app.use(pretty({always: true, spaces: 2}));
|
||||
app.use(fileUpload({limits: { fileSize: 512 * 1024 }}));
|
||||
app.use(require("request-ip").mw());
|
||||
|
||||
// Main
|
||||
app.get("/", (req, res) => {
|
||||
return res.send(`<html>
|
||||
<body>
|
||||
<h1>Hello From Bds Maneger Core</h1>
|
||||
<a>If this page has loaded it means that the API is working as planned, More information access the API documentation at: <a href="${docs.url}/${docs.main}">Bds Maneger Core</a>. </a>
|
||||
<p><span>Bds Maneger core Version: ${bds.package_json.version}</span></p>
|
||||
<p><h3>GET</h3></p>
|
||||
<p><a href="./info">Basic Info server and System</a></p>
|
||||
<p><a href="./players">Players who logged on to the server</a></p>
|
||||
<p><h3>POST</h3></p>
|
||||
<p><a href="./service">basic Services: Stop, start and restart</a></p>
|
||||
</body>
|
||||
<p>by <a href="https://github.com/Sirherobrine23">Sirherobrine23</a></p>
|
||||
</html>`);
|
||||
});
|
||||
|
||||
app.post("/bds_command", (req, res) => {
|
||||
const body = req.body;
|
||||
var comand = body.command
|
||||
const status = {
|
||||
code: 401,
|
||||
status: false
|
||||
}
|
||||
if (token_verify(body.token)) {
|
||||
bds.command(comand)
|
||||
status.code = 201
|
||||
status.status = true
|
||||
}
|
||||
res.status(status.code).send(status)
|
||||
});
|
||||
|
||||
// Players info and maneger
|
||||
app.get("/players", (req, res) => {
|
||||
var { player, status, platform} = req.query;
|
||||
const players_json = JSON.parse(readFileSync(bds.players_files, "utf8"))[(platform || GetPlatform())];
|
||||
var response = {};
|
||||
|
||||
if (player) {
|
||||
if (players_json[player]) response = players_json[player];
|
||||
else response = {
|
||||
date: null,
|
||||
connected: null,
|
||||
xboxID: null,
|
||||
update: [{date: null, connected: null}]
|
||||
}
|
||||
return res.json(response);
|
||||
} else if (status) {
|
||||
status = (() => {if (status === "online" || status === "true") return true; else return false})()
|
||||
for (let index of Object.getOwnPropertyNames(players_json)) if (players_json[index].connected === status) response[index] = players_json[index]
|
||||
return res.json(response);
|
||||
}
|
||||
response = players_json
|
||||
return res.json(response);
|
||||
});
|
||||
|
||||
app.get("/players/actions/:TYPE/:TOKEN/:PLAYER*", (req, res) => {
|
||||
const { TYPE, TOKEN, PLAYER } = req.params;
|
||||
const { text } = req.query;
|
||||
// Pre Check
|
||||
if (!(token_verify(TOKEN) || CheckPlayer(PLAYER))) return res.status(401).send("Check your parameters");
|
||||
|
||||
// Post Check
|
||||
if (TYPE === "ban") res.json({ok: bds.command(`ban ${PLAYER}`)});
|
||||
else if (TYPE === "kick") res.json({ok: bds.command(`kick ${PLAYER} ${text}`)});
|
||||
else if (TYPE === "op") res.json({ok: bds.command(`op ${PLAYER}`)});
|
||||
else if (TYPE === "deop") res.json({ok: bds.command(`deop ${PLAYER}`)});
|
||||
else res.sendStatus(422)
|
||||
});
|
||||
|
||||
// Actions Redirect
|
||||
app.all("/players/actions/*", ({ res }) => res.redirect(`${docs.url}/${docs.rest_api}#players-actions`))
|
||||
app.all("/players/actions", ({ res }) => res.redirect(`${docs.url}/${docs.rest_api}#players-actions`))
|
||||
|
||||
// Backup
|
||||
app.get("/backup", (req, res) => {
|
||||
const { token } = req.query;
|
||||
// Check Token
|
||||
if (!(token_verify(token))) return res.status(401).send("Check your token");
|
||||
|
||||
// Return File
|
||||
const backup = bds.backup()
|
||||
return res.sendFile(backup.file_path)
|
||||
});
|
||||
|
||||
// Server Sevices
|
||||
app.all("/service", ({res}) => res.redirect(`${docs.url}/${docs.rest_api}#disable-basic-services`));
|
||||
|
||||
// bds maneger
|
||||
app.post("/bds/download", (req, res) => {
|
||||
const { token, version, platform } = req.body
|
||||
if (!(token_verify(token))) return res.status(401).send("Check your token");
|
||||
|
||||
// Server Download
|
||||
if (platform) UpdatePlatform(platform);
|
||||
try {
|
||||
bds.download(version, true, function(){
|
||||
return res.json({
|
||||
version: version,
|
||||
platform: GetPlatform()
|
||||
})
|
||||
})
|
||||
} catch (error) {
|
||||
res.status(501).send("Unable to download server for current platform, more details will be in terminal log!")
|
||||
}
|
||||
});
|
||||
|
||||
app.post("/bds/upload", (req, res) => {
|
||||
const { token } = req.headers;
|
||||
if (!(token_verify(token))) return res.status(401).send("Check your token");
|
||||
if (!req.files || Object.keys(req.files).length === 0) return res.status(400).send("No files were uploaded.");
|
||||
|
||||
// Extract
|
||||
for (let index of Object.getOwnPropertyNames(req.files)){
|
||||
const fileWorld = req.files[index];
|
||||
const unzip = new admzip(Buffer.from(fileWorld.data));
|
||||
unzip.extractAllTo(bds_dir)
|
||||
}
|
||||
return res.send("Ok")
|
||||
});
|
||||
|
||||
// System and Server info
|
||||
app.get("/info", ({ res }) => res.redirect("bds/info"))
|
||||
app.get("/bds/info", ({ res }) => {
|
||||
const config = bds.get_config();
|
||||
var info = {
|
||||
server: {
|
||||
platform: GetPlatform(),
|
||||
world_name: config.world,
|
||||
running: bds.detect(),
|
||||
port: config.portv4,
|
||||
port6: config.portv6,
|
||||
max_players: config.players,
|
||||
whitelist: config.whitelist,
|
||||
},
|
||||
sys: {
|
||||
arch: bds.arch,
|
||||
system: process.platform,
|
||||
Kernel: GetKernel(),
|
||||
IS_CLI: JSON.parse(process.env.IS_BDS_CLI || false),
|
||||
IS_DOCKER: JSON.parse(process.env.BDS_DOCKER_IMAGE || false),
|
||||
IS_NPX: (process.env.npm_lifecycle_event === "npx"),
|
||||
QEMU_STATIC: commandExist("qemu-x86_64-static")
|
||||
},
|
||||
bds_maneger_core: {
|
||||
version: bds.package_json.version,
|
||||
server_versions: GetServerVersion(),
|
||||
}
|
||||
};
|
||||
return res.send(info);
|
||||
});
|
||||
|
||||
app.get("/log", (req, res) => {
|
||||
if (!(existsSync(latest_log))) return res.sendStatus(400);
|
||||
|
||||
let RequestConfig = {format: req.query.format, text: readFileSync(latest_log, "utf8").toString().split("\n").filter(d=>{if (d) return true;return false}).join("\n")}
|
||||
if (RequestConfig.format === "html") {
|
||||
var text = ""
|
||||
for (let log of RequestConfig.text.split("\n")) text += `<div class="BdsCoreLog"><p>${log}</p></div>`;
|
||||
res.send(text);
|
||||
} else res.json(RequestConfig.text.split("\n"));
|
||||
});
|
||||
|
||||
app.all("*", (req, res)=>{
|
||||
res.status(400)
|
||||
res.send(`<html><div class="">This request does not exist, <a href="${docs.url}/${docs.rest_api}">more information</a></div></html>`)
|
||||
});
|
||||
const port = (port_api||1932)
|
||||
app.listen(port, function (){console.log(`Bds Maneger Core REST API, http port: ${port}`);});
|
||||
return true
|
||||
}
|
||||
|
||||
// module exports
|
||||
module.exports = function (json_config = {api_port: 1932}){
|
||||
var port_rest;
|
||||
if (json_config.api_port === undefined) port_rest = 1932; else port_rest = json_config.rest_port;
|
||||
return api(port_rest)
|
||||
}
|
||||
module.exports.api = api
|
@ -1,78 +0,0 @@
|
||||
const bds = require("../index")
|
||||
const { join } = require("path");
|
||||
const { readdirSync, existsSync, readFileSync } = require("fs")
|
||||
const AdmZip = require("adm-zip");
|
||||
const { GetServerPaths, GetPaths, bds_dir } = require("../lib/BdsSettings")
|
||||
|
||||
function Backup() {
|
||||
const zip = new AdmZip();
|
||||
console.info("Please wait");
|
||||
// Names And Path"s
|
||||
const Paths = {
|
||||
bedrock: GetServerPaths("bedrock"),
|
||||
java: GetServerPaths("java"),
|
||||
pocketmine: GetServerPaths("pocketmine"),
|
||||
jsprismarine: GetServerPaths("jsprismarine")
|
||||
}
|
||||
const name = `Bds_Maneger-Backups_${bds.date()}.zip`
|
||||
const PathBackup = join(GetPaths("backups"), name);
|
||||
|
||||
// Bedrock
|
||||
if (existsSync(join(Paths.bedrock, (() => {if (process.platform === "win32") return "bedrock_server.exe";else if (process.platform === "linux") return "bedrock_server";})()))) {
|
||||
zip.addLocalFolder(join(Paths.bedrock, "worlds"), join("Servers", "bedrock", "worlds"));
|
||||
for (let index of [
|
||||
"server.properties",
|
||||
"permissions.json",
|
||||
"whitelist.json"
|
||||
]) if (existsSync(join(Paths.bedrock, index))) zip.addLocalFile(join(Paths.bedrock, index), join("Servers", "bedrock"));
|
||||
} else console.info("Skipping the bedrock as it was not installed");
|
||||
|
||||
// Java
|
||||
if (existsSync(join(Paths.java, "MinecraftServerJava.jar"))) {
|
||||
let javaDir = readdirSync(Paths.java).filter(function(value) {if (value === "banned-ips.json" || value === "banned-players.json" || value === "eula.txt" || value === "logs" || value === "ops.json" || value === "server.jar" || value === "MinecraftServerJava.jar" || value === "server.properties" || value === "usercache.json" || value === "whitelist.json") return false;return true});
|
||||
for (let index of javaDir) zip.addLocalFolder(join(Paths.java, index), join("Servers", "java", index))
|
||||
for (let index of [
|
||||
"banned-ips.json",
|
||||
"banned-players.json",
|
||||
"ops.json",
|
||||
"server.properties",
|
||||
"whitelist.json"
|
||||
]) if (existsSync(join(Paths.java, index))) zip.addLocalFile(join(Paths.java, index), join("Servers", "java"));
|
||||
} else console.info("Skipping the java as it was not installed");
|
||||
|
||||
// PocketMine
|
||||
if (existsSync(join(Paths.pocketmine, "PocketMine-MP.phar"))) {
|
||||
if (existsSync(join(Paths.pocketmine, "worlds"))) zip.addLocalFolder(join(Paths.pocketmine, "worlds"), join("Servers", "pocketmine", "worlds"));
|
||||
for (let index of [
|
||||
"pocketmine.yml",
|
||||
"server.properties",
|
||||
"white-list.txt",
|
||||
"ops.txt",
|
||||
"banned-players.txt",
|
||||
"banned-ips.txt"
|
||||
]) if (existsSync(join(Paths.pocketmine, index))) zip.addLocalFile(join(Paths.pocketmine, index), "pocketmine");
|
||||
} else console.info("Skipping the pocketmine as it was not installed");
|
||||
|
||||
|
||||
// JSPrismarine
|
||||
|
||||
// The Bds Maneger Core Backup
|
||||
for (let index of [
|
||||
"BdsConfig.yaml",
|
||||
"bds_tokens.json"
|
||||
]) if (existsSync(join(bds_dir, index))) zip.addLocalFile(join(bds_dir, index));
|
||||
|
||||
zip.addZipComment("Settings and World Backups, by The Bds Maneger Project©");
|
||||
zip.writeZip(PathBackup);
|
||||
return {
|
||||
file_path: PathBackup,
|
||||
file_name: name,
|
||||
Buffer: readFileSync(PathBackup)
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
World_BAckup: Backup,
|
||||
Backup: Backup,
|
||||
Cloud_backup: Backup
|
||||
}
|
@ -1,5 +1,5 @@
|
||||
const { CronJob } = require("cron");
|
||||
const { GetCronBackup } = require("../lib/BdsSettings");
|
||||
const { GetCronBackup } = require("../../lib/BdsSettings");
|
||||
const { Backup } = require("./backups")
|
||||
const Cloud = {
|
||||
Azure: require("../clouds/Azure").Uploadbackups,
|
@ -1,6 +1,6 @@
|
||||
const bds = require("../index")
|
||||
const bds = require("../../index")
|
||||
const { CheckBan } = require("./check");
|
||||
const { GetPlatform, GetPaths } = require("../lib/BdsSettings");
|
||||
const { GetPlatform, GetPaths } = require("../../lib/BdsSettings");
|
||||
const fs = require("fs");
|
||||
|
||||
function MytypeKill(player) {
|
@ -2,7 +2,7 @@ var fs = require("fs");
|
||||
const path = require("path");
|
||||
const propertiesToJSON = require("properties-to-json");
|
||||
const { join } = require("path");
|
||||
const { GetServerPaths, GetPlatform } = require("../lib/BdsSettings");
|
||||
const { GetServerPaths, GetPlatform } = require("../../lib/BdsSettings");
|
||||
const bds_dir_bedrock = GetServerPaths("bedrock"), bds_dir_java = GetServerPaths("java"), bds_dir_pocketmine = GetServerPaths("pocketmine");
|
||||
const bedrockCPUThread = require("os").cpus().length;
|
||||
|
64
src/Scripts/backups.js
Normal file
64
src/Scripts/backups.js
Normal file
@ -0,0 +1,64 @@
|
||||
const bds = require("../../index")
|
||||
const { join, resolve } = require("path");
|
||||
const { readdirSync, existsSync, readFileSync, statSync } = require("fs")
|
||||
const AdmZip = require("adm-zip");
|
||||
const { GetServerPaths, GetPaths, bds_dir } = require("../../lib/BdsSettings")
|
||||
|
||||
function Backup() {
|
||||
const zip = new AdmZip();
|
||||
console.info("Please wait");
|
||||
// Names And Path"s
|
||||
const Paths = {
|
||||
bedrock: GetServerPaths("bedrock"),
|
||||
java: GetServerPaths("java"),
|
||||
pocketmine: GetServerPaths("pocketmine"),
|
||||
jsprismarine: GetServerPaths("jsprismarine")
|
||||
}
|
||||
const name = `Bds_Maneger-Backups_${bds.date()}.zip`
|
||||
const PathBackup = join(GetPaths("backups"), name);
|
||||
|
||||
// Bedrock
|
||||
if (readdirSync(Paths.bedrock).filter(a=>/worlds/.test(a)).length >= 1) {
|
||||
zip.addLocalFolder(join(Paths.bedrock, "worlds"), join("Servers", "Bedrock", "worlds"));
|
||||
for (let index of ["server.properties", "permissions.json", "whitelist.json"]) {if (existsSync(join(Paths.bedrock, index))) zip.addLocalFile(join(Paths.bedrock, index), join("Servers", "Bedrock"));}
|
||||
} else console.info("Skipping the bedrock as it was not installed");
|
||||
|
||||
// Java
|
||||
if (existsSync(join(Paths.java, "MinecraftServerJava.jar"))) {
|
||||
for (let index of readdirSync(Paths.java).filter(value => !/banned-ips.json|banned-players.json|eula.txt|logs|ops.json|server.jar|MinecraftServerJava.jar|server.properties|usercache.json|whitelist.json/.test(value))) zip.addLocalFolder(join(Paths.java, index), join("Servers", "Java", index));
|
||||
for (let index of ["banned-ips.json", "banned-players.json", "ops.json", "server.properties", "whitelist.json"]) {if (existsSync(join(Paths.java, index))) zip.addLocalFile(join(Paths.java, index), join("Servers", "Java"))}
|
||||
} else console.info("Skipping the java as it was not installed");
|
||||
|
||||
// PocketMine
|
||||
if (existsSync(join(Paths.pocketmine, "PocketMine-MP.phar"))) {
|
||||
if (existsSync(join(Paths.pocketmine, "worlds"))) zip.addLocalFolder(join(Paths.pocketmine, "worlds"), join("Servers", "pocketmine", "worlds"));
|
||||
for (let index of ["pocketmine.yml", "server.properties", "white-list.txt", "ops.txt", "banned-players.txt", "banned-ips.txt"]) if (existsSync(join(Paths.pocketmine, index))) zip.addLocalFile(join(Paths.pocketmine, index), "pocketmine");
|
||||
} else console.info("Skipping the pocketmine as it was not installed");
|
||||
|
||||
|
||||
// JSPrismarine
|
||||
|
||||
// The Bds Maneger Core Backup
|
||||
for (let index of ["BdsConfig.yaml", "bds_tokens.json"]) if (existsSync(join(bds_dir, index))) zip.addLocalFile(join(bds_dir, index));
|
||||
|
||||
for (let index of Object.getOwnPropertyNames(GetPaths("all")).filter(path => !/servers|backups/.test(path)).map(name => GetPaths(name))) {
|
||||
if (existsSync(index)) {
|
||||
const _S = statSync(resolve(index));
|
||||
if (_S.isFile() || _S.isSymbolicLink()) zip.addLocalFile(index); else zip.addLocalFolder(index)
|
||||
}
|
||||
}
|
||||
|
||||
zip.addZipComment("Settings and World Backups, by The Bds Maneger Project©");
|
||||
zip.writeZip(PathBackup);
|
||||
return {
|
||||
file_path: PathBackup,
|
||||
file_name: name,
|
||||
Buffer: readFileSync(PathBackup)
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
World_BAckup: Backup,
|
||||
Backup: Backup,
|
||||
Cloud_backup: Backup
|
||||
}
|
@ -2,10 +2,10 @@ const { exec, execFile } = require("child_process");
|
||||
const fs = require("fs");
|
||||
const path = require("path");
|
||||
const { resolve, join } = require("path");
|
||||
const commandExists = require("../lib/commandExist");
|
||||
const commandExists = require("../../lib/commandExist");
|
||||
const saveUser = require("./PlayersSave");
|
||||
const bds = require("../index");
|
||||
const { GetServerPaths, GetPaths, GetServerSettings, GetPlatform } = require("../lib/BdsSettings");
|
||||
const bds = require("../../index");
|
||||
const { GetServerPaths, GetPaths, GetServerSettings, GetPlatform } = require("../../lib/BdsSettings");
|
||||
const BdsDetect = require("./CheckKill").Detect;
|
||||
const { randomUUID } = require("crypto");
|
||||
const { warn } = console;
|
@ -1,4 +1,4 @@
|
||||
const { bds_dir, GetServerBan, GetTelegramAdmins, GetPlatform, GetPaths } = require("../lib/BdsSettings");
|
||||
const { bds_dir, GetServerBan, GetTelegramAdmins, GetPlatform, GetPaths } = require("../../lib/BdsSettings");
|
||||
const { existsSync, readFileSync } = require("fs")
|
||||
const { join } = require("path")
|
||||
|
@ -1,12 +1,12 @@
|
||||
var AdmZip = require("adm-zip");
|
||||
const { writeFileSync, existsSync, readFileSync, readdirSync } = require("fs");
|
||||
const { join, resolve } = require("path");
|
||||
const bds = require("../index")
|
||||
const { valid_platform } = require("../lib/BdsSystemInfo");
|
||||
const { GetServerPaths, GetServerVersion, UpdateServerVersion, GetPlatform } = require("../lib/BdsSettings");
|
||||
const { GitClone } = require("../lib/git_simples");
|
||||
const bds = require("../../index")
|
||||
const { valid_platform } = require("../../lib/BdsSystemInfo");
|
||||
const { GetServerPaths, GetServerVersion, UpdateServerVersion, GetPlatform } = require("../../lib/BdsSettings");
|
||||
const { GitClone } = require("../../lib/git_simples");
|
||||
const { execSync } = require("child_process");
|
||||
const Extra = require("../BdsManegerInfo.json");
|
||||
const Extra = require("../../BdsManegerInfo.json");
|
||||
|
||||
const
|
||||
bds_dir_bedrock = GetServerPaths("bedrock"),
|
@ -1,14 +1,14 @@
|
||||
const fs = require("fs");
|
||||
const { join } = require("path")
|
||||
const { google } = require("googleapis");
|
||||
const { bds_dir } = require("../../lib/BdsSettings")
|
||||
const { bds_dir } = require("../../../lib/BdsSettings")
|
||||
const express = require("express");
|
||||
const app = express();
|
||||
var cors = require("cors");
|
||||
const rateLimit = require("express-rate-limit");
|
||||
const bodyParser = require("body-parser");
|
||||
const fetchSync = require("@the-bds-maneger/fetchsync");
|
||||
const Ips = require("../../scripts/external_ip")
|
||||
const Ips = require("../../Scripts/external_ip");
|
||||
const DefaultLoginDrive = {
|
||||
access_type: "offline",
|
||||
scope: [
|
@ -1,6 +1,6 @@
|
||||
const { resolve } = require("path");
|
||||
const { BlobServiceClient, StorageSharedKeyCredential } = require("@azure/storage-blob");
|
||||
const NewBdsSettings = require("../lib/BdsSettings");
|
||||
const NewBdsSettings = require("../../lib/BdsSettings");
|
||||
const Uploadbackups = async function (object = "Backup.zip", fileLocation = "Backup.zip", callback = function (){}) {
|
||||
const { Account, AccountKey, Container } = NewBdsSettings.GetCloudConfig("Azure");
|
||||
const sharedKeyCredential = new StorageSharedKeyCredential(Account, AccountKey);
|
@ -1,7 +1,7 @@
|
||||
const fs = require("fs");
|
||||
const { google } = require("googleapis");
|
||||
const { authorize } = require("./Auth/Google");
|
||||
const { GetCloudConfig } = require("../lib/BdsSettings");
|
||||
const { GetCloudConfig } = require("../../lib/BdsSettings");
|
||||
|
||||
module.exports.Uploadbackups = function (file_name = "Backup.zip", fileLocation = "Backup.zip", BackupCallback){
|
||||
const parent_id = GetCloudConfig("Driver").RootID
|
@ -2,7 +2,7 @@ const oci_storage = require("oci-objectstorage");
|
||||
const oci_common = require("oci-common");
|
||||
const fs = require("fs");
|
||||
const { resolve } = require("path");
|
||||
const { CloudConfig } = require("../lib/BdsSettings")
|
||||
const { CloudConfig } = require("../../lib/BdsSettings");
|
||||
|
||||
const Uploadbackups = async function (
|
||||
object = "Backup.zip",
|
69
src/rest/api.js
Normal file
69
src/rest/api.js
Normal file
@ -0,0 +1,69 @@
|
||||
const { readFileSync, existsSync } = require("fs");
|
||||
const { resolve } = require("path");
|
||||
const express = require("express");
|
||||
const cors = require("cors");
|
||||
const rateLimit = require("express-rate-limit");
|
||||
const bodyParser = require("body-parser");
|
||||
const fileUpload = require("express-fileupload");
|
||||
const { GetPaths } = require("../../lib/BdsSettings")
|
||||
const pretty = require("express-prettify");
|
||||
const latest_log = resolve(GetPaths("log"), "latest.log")
|
||||
const docs = require("../../BdsManegerInfo.json").docs;
|
||||
|
||||
const app = express();
|
||||
// Enable if you"re behind a reverse proxy (Heroku, Bluemix, AWS ELB, Nginx, etc)
|
||||
// see https://expressjs.com/en/guide/behind-proxies.html
|
||||
// app.set("trust proxy", 1);
|
||||
|
||||
app.use(cors());
|
||||
app.use(bodyParser.json()); /* https://github.com/github/fetch/issues/323#issuecomment-331477498 */
|
||||
app.use(bodyParser.urlencoded({ extended: true }));
|
||||
app.use(rateLimit({windowMs: 15 * 60 * 1000, /* 15 minutes */ max: 100 /* limit each IP to 100 requests per windowMs*/ }));
|
||||
app.use(pretty({always: true, spaces: 2}));
|
||||
app.use(fileUpload({limits: { fileSize: 512 * 1024 }}));
|
||||
app.use(require("request-ip").mw());
|
||||
|
||||
// Main
|
||||
let Home = readFileSync(resolve(__dirname, "./html/Home.html"), "utf8").replace(/\{\{([^{^}]+)\}\}/g, (..._b) => eval(_b[1]));
|
||||
app.get("/", (req, res) => res.send(Home));
|
||||
|
||||
// Bds route
|
||||
app.use("/bds", require("./routes/bds"))
|
||||
app.use("/players", require("./routes/players"))
|
||||
app.post("/bds_command", ({res}) => res.redirect("/bds/command"))
|
||||
app.get("/info", ({ res }) => res.redirect("bds/info"))
|
||||
|
||||
// Server Sevices
|
||||
app.all("/service", ({res}) => res.redirect(`${docs.url}/${docs.rest_api}#disable-basic-services`));
|
||||
|
||||
app.get("/log", (req, res) => {
|
||||
if (!(existsSync(latest_log))) return res.sendStatus(400);
|
||||
|
||||
let RequestConfig = {format: req.query.format, text: readFileSync(latest_log, "utf8").toString().split("\n").filter(d=>{if (d) return true;return false}).join("\n")}
|
||||
if (RequestConfig.format === "html") {
|
||||
var text = ""
|
||||
for (let log of RequestConfig.text.split("\n")) text += `<div class="BdsCoreLog"><p>${log}</p></div>`;
|
||||
res.send(text);
|
||||
} else res.json(RequestConfig.text.split("\n"));
|
||||
});
|
||||
|
||||
app.all("*", (req, res)=>{
|
||||
res.status(404)
|
||||
return res.send(`<html><div class="">This request does not exist, <a href="${docs.url}/${docs.rest_api}">more information</a></div></html>`)
|
||||
});
|
||||
|
||||
|
||||
// module exports
|
||||
function api(port_api = 1932, callback = function (port){console.log("Bds Maneger Core REST API, http port", port)}){
|
||||
const port = (port_api || 1932)
|
||||
app.listen(port)
|
||||
if (typeof callback === "function") callback(port);
|
||||
return port;
|
||||
}
|
||||
module.exports = function (apiConfig = {api_port: 1932}, callback = function (port){console.log("Bds Maneger Core REST API, http port", port)}){
|
||||
var port_rest = 1932;
|
||||
if (typeof apiConfig == "object" && apiConfig.api_port !== undefined) port_rest = apiConfig.api_port;
|
||||
else if (typeof apiConfig === "number") port_rest = apiConfig;
|
||||
return api(port_rest, callback);
|
||||
}
|
||||
module.exports.api = api;
|
11
src/rest/html/Home.html
Normal file
11
src/rest/html/Home.html
Normal file
@ -0,0 +1,11 @@
|
||||
<html>
|
||||
<body>
|
||||
<h1>Hello From Bds Maneger Core</h1>
|
||||
<a>If this page has loaded it means that the API is working as planned, More information access the API documentation at: <a href='{{require("../../BdsManegerInfo.json").docs.url}}/{{require("../../BdsManegerInfo.json").docs.main}}'>Bds Maneger Core</a>. </a>
|
||||
<p><span>Bds Maneger core Version: {{require("../../index").package_json.version}}</span></p>
|
||||
<p><h3>GET</h3></p>
|
||||
<p><a href="/bds/info">Basic Info server and System</a></p>
|
||||
<p><a href="/players">Players who logged on to the server</a></p>
|
||||
</body>
|
||||
<p>by <a href="https://github.com/Sirherobrine23">Sirherobrine23</a></p>
|
||||
</html>
|
101
src/rest/routes/bds.js
Normal file
101
src/rest/routes/bds.js
Normal file
@ -0,0 +1,101 @@
|
||||
const express = require("express");
|
||||
const app = express.Router();
|
||||
const { GetKernel } = require("../../../lib/BdsSystemInfo");
|
||||
const commandExist = require("../../../lib/commandExist");
|
||||
const { GetPlatform, GetServerVersion, UpdatePlatform, bds_dir } = require("../../../lib/BdsSettings")
|
||||
const admzip = require("adm-zip");
|
||||
const bds = require("../../../index");
|
||||
const { token_verify } = require("../../Scripts/check");
|
||||
|
||||
// Backup
|
||||
app.get("/backup", (req, res) => {
|
||||
const { token } = req.query;
|
||||
// Check Token
|
||||
if (!(token_verify(token))) return res.status(401).send("Check your token");
|
||||
|
||||
// Return File
|
||||
const backup = bds.backup()
|
||||
return res.sendFile(backup.file_path)
|
||||
});
|
||||
|
||||
|
||||
// bds maneger
|
||||
app.post("/download", (req, res) => {
|
||||
const { token, version, platform } = req.body
|
||||
if (!(token_verify(token))) return res.status(401).send("Check your token");
|
||||
|
||||
// Server Download
|
||||
if (platform) UpdatePlatform(platform);
|
||||
try {
|
||||
bds.download(version, true, function(){
|
||||
return res.json({
|
||||
version: version,
|
||||
platform: GetPlatform()
|
||||
})
|
||||
})
|
||||
} catch (error) {
|
||||
res.status(501).send("Unable to download server for current platform, more details will be in terminal log!")
|
||||
}
|
||||
});
|
||||
|
||||
app.post("/upload", (req, res) => {
|
||||
const { token } = req.headers;
|
||||
if (!(token_verify(token))) return res.status(401).send("Check your token");
|
||||
if (!req.files || Object.keys(req.files).length === 0) return res.status(400).send("No files were uploaded.");
|
||||
|
||||
// Extract
|
||||
for (let index of Object.getOwnPropertyNames(req.files)){
|
||||
const fileWorld = req.files[index];
|
||||
const unzip = new admzip(Buffer.from(fileWorld.data));
|
||||
unzip.extractAllTo(bds_dir)
|
||||
}
|
||||
return res.send("Ok")
|
||||
});
|
||||
|
||||
// Command
|
||||
app.post("/command", (req, res) => {
|
||||
const body = req.body;
|
||||
var comand = body.command
|
||||
const status = {
|
||||
code: 401,
|
||||
status: false
|
||||
}
|
||||
if (token_verify(body.token)) {
|
||||
bds.command(comand)
|
||||
status.code = 201
|
||||
status.status = true
|
||||
}
|
||||
res.status(status.code).send(status)
|
||||
});
|
||||
|
||||
// System and Server info
|
||||
app.get("/info", ({ res }) => {
|
||||
const config = bds.get_config();
|
||||
var info = {
|
||||
server: {
|
||||
platform: GetPlatform(),
|
||||
world_name: config.world,
|
||||
running: bds.detect(),
|
||||
port: config.portv4,
|
||||
port6: config.portv6,
|
||||
max_players: config.players,
|
||||
whitelist: config.whitelist,
|
||||
},
|
||||
sys: {
|
||||
arch: bds.arch,
|
||||
system: process.platform,
|
||||
Kernel: GetKernel(),
|
||||
IS_CLI: JSON.parse(process.env.IS_BDS_CLI || false),
|
||||
IS_DOCKER: JSON.parse(process.env.BDS_DOCKER_IMAGE || false),
|
||||
IS_NPX: (process.env.npm_lifecycle_event === "npx"),
|
||||
QEMU_STATIC: commandExist("qemu-x86_64-static")
|
||||
},
|
||||
bds_maneger_core: {
|
||||
version: bds.package_json.version,
|
||||
server_versions: GetServerVersion(),
|
||||
}
|
||||
};
|
||||
return res.send(info);
|
||||
});
|
||||
|
||||
module.exports = app;
|
51
src/rest/routes/players.js
Normal file
51
src/rest/routes/players.js
Normal file
@ -0,0 +1,51 @@
|
||||
const express = require("express");
|
||||
const app = express.Router();
|
||||
const { GetPlatform } = require("../../../lib/BdsSettings")
|
||||
const bds = require("../../../index");
|
||||
const { token_verify, CheckPlayer } = require("../../Scripts/check");
|
||||
const { readFileSync } = require("fs");
|
||||
const docs = require("../../../BdsManegerInfo.json").docs;
|
||||
|
||||
// Players info and maneger
|
||||
app.get("/", (req, res) => {
|
||||
var { player, status, platform} = req.query;
|
||||
const players_json = JSON.parse(readFileSync(bds.players_files, "utf8"))[(platform || GetPlatform())];
|
||||
var response = {};
|
||||
|
||||
if (player) {
|
||||
if (players_json[player]) response = players_json[player];
|
||||
else response = {
|
||||
date: null,
|
||||
connected: null,
|
||||
xboxID: null,
|
||||
update: [{date: null, connected: null}]
|
||||
}
|
||||
return res.json(response);
|
||||
} else if (status) {
|
||||
status = (() => {if (status === "online" || status === "true") return true; else return false})()
|
||||
for (let index of Object.getOwnPropertyNames(players_json)) if (players_json[index].connected === status) response[index] = players_json[index]
|
||||
return res.json(response);
|
||||
}
|
||||
response = players_json
|
||||
return res.json(response);
|
||||
});
|
||||
|
||||
app.get("/actions/:TYPE/:TOKEN/:PLAYER*", (req, res) => {
|
||||
const { TYPE, TOKEN, PLAYER } = req.params;
|
||||
const { text } = req.query;
|
||||
// Pre Check
|
||||
if (!(token_verify(TOKEN) || CheckPlayer(PLAYER))) return res.status(401).send("Check your parameters");
|
||||
|
||||
// Post Check
|
||||
if (TYPE === "ban") res.json({ok: bds.command(`ban ${PLAYER}`)});
|
||||
else if (TYPE === "kick") res.json({ok: bds.command(`kick ${PLAYER} ${text}`)});
|
||||
else if (TYPE === "op") res.json({ok: bds.command(`op ${PLAYER}`)});
|
||||
else if (TYPE === "deop") res.json({ok: bds.command(`deop ${PLAYER}`)});
|
||||
else res.sendStatus(422)
|
||||
});
|
||||
|
||||
// Actions Redirect
|
||||
app.all("/actions/*", ({ res }) => res.send(`${docs.url}/${docs.rest_api}#players-actions`))
|
||||
app.all("/*", ({ res }) => res.send(`${docs.url}/${docs.rest_api}#players-actions`))
|
||||
|
||||
module.exports = app;
|
Reference in New Issue
Block a user