From 841ae196442dcb1cea1cd4ddde1f59c4ca30eabd Mon Sep 17 00:00:00 2001 From: Suwings Date: Thu, 8 Oct 2020 12:13:27 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=20=E8=AE=BE=E7=BD=AE?= =?UTF-8?q?=E5=AE=BD=E5=BA=A6=E9=99=90=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .prettierrc.json | 5 +- app.js | 84 +++------ core/Process/BaseMcserver.js | 105 +++-------- core/Process/Mcserver.js | 3 +- core/Process/ServerCenter.js | 14 +- core/User/UserCenter.js | 20 +- core/counter.js | 8 +- core/log.js | 13 +- core/tools.js | 17 +- ftpd/ftpserver.js | 20 +- ftpd/index.js | 18 +- helper/ApiResponse.js | 12 +- helper/LogHistory.js | 22 +-- helper/LoginedContainer.js | 3 +- helper/MCPingProtocol.js | 5 +- helper/Permission.js | 24 +-- helper/RecordCommand.js | 6 +- helper/Schedule.js | 39 +--- model/ServerModel.js | 15 +- model/UserModel.js | 18 +- onlinefs/controller/auth.js | 27 +-- onlinefs/controller/function.js | 36 +--- onlinefs/model/fsoperate_session.js | 4 +- onlinefs/module/base_fsoperate.js | 3 +- onlinefs/module/extend_worker.js | 10 +- onlinefs/module/fsoperate.js | 13 +- public/common/css/common.css | 7 +- public/common/js/login.js | 9 +- public/common/js/properties.js | 21 +-- public/common/js/response.js | 9 +- public/common/js/tools.js | 141 +++----------- public/common/js/viewmodel.js | 19 +- public/common/md5.js | 15 +- public/index.html | 111 ++--------- public/login/index.html | 36 +--- public/login2/index.html | 71 ++----- public/login3/index.html | 52 +----- public/template/center.html | 7 +- public/template/component/console.html | 120 +++--------- public/template/component/gen_repassword.html | 39 +--- .../template/component/new_docker_image.html | 79 ++------ public/template/component/new_schedule.html | 72 ++----- public/template/component/newserver.html | 120 +++--------- public/template/component/newserverx.html | 175 ++++-------------- public/template/component/properties.html | 69 ++----- public/template/component/schedule.html | 29 +-- public/template/component/server.html | 107 ++--------- public/template/component/terminal.html | 74 ++------ public/template/component/user.html | 35 +--- public/template/dialog/apikey.html | 33 +--- public/template/dialog/docker_config.html | 42 +---- public/template/dialog/pingmc_config.html | 40 +--- public/template/dialog/time_bulider.html | 37 +--- public/template/dialog/usercommand.html | 15 +- public/template/feelback.html | 24 +-- public/template/filemanager.html | 9 +- public/template/gen_home.html | 41 +--- public/template/other/sponsor.html | 14 +- public/template/server.html | 117 ++---------- public/template/userset.html | 88 ++------- route/api.js | 18 +- route/fileupload.js | 7 +- route/token.js | 12 +- route/user.js | 19 +- route/websocket.js | 45 +---- route/websocket/apikey.js | 12 +- route/websocket/center.js | 6 +- route/websocket/console.js | 18 +- route/websocket/console/console-info.js | 5 +- route/websocket/console/history.js | 37 +--- route/websocket/console/open.js | 12 +- route/websocket/console/properties.js | 13 +- route/websocket/console/server-mask.js | 5 +- route/websocket/docker.js | 22 +-- route/websocket/genuser.js | 15 +- route/websocket/schedule.js | 8 +- route/websocket/server.js | 10 +- route/websocket/user.js | 15 +- 78 files changed, 511 insertions(+), 2189 deletions(-) diff --git a/.prettierrc.json b/.prettierrc.json index 0967ef42..1fb3f00c 100644 --- a/.prettierrc.json +++ b/.prettierrc.json @@ -1 +1,4 @@ -{} +{ + "printWidth": 200, + "trailingComma":"none" +} diff --git a/app.js b/app.js index 2b3da2f5..23b4e25b 100644 --- a/app.js +++ b/app.js @@ -40,8 +40,7 @@ const tools = require("./core/tools"); //生成第一次配置文件 const INIT_CONFIG_PATH = "./model/init_config/"; const PRO_CONFIG = "./property.js"; -if (!fs.existsSync(PRO_CONFIG)) - tools.mCopyFileSync(INIT_CONFIG_PATH + "property.js", PRO_CONFIG); +if (!fs.existsSync(PRO_CONFIG)) tools.mCopyFileSync(INIT_CONFIG_PATH + "property.js", PRO_CONFIG); //加载配置 require("./property"); @@ -158,12 +157,7 @@ app.use("/public", express.static("./public")); // console 中间件挂载 app.use((req, res, next) => { // 部分请求不必显示 - if ( - req.originalUrl.indexOf("/api/") == -1 && - req.originalUrl.indexOf("/fs/") == -1 && - req.originalUrl.indexOf("/fs_auth/") == -1 && - req.originalUrl.indexOf("/fs_auth/") == -1 - ) { + if (req.originalUrl.indexOf("/api/") == -1 && req.originalUrl.indexOf("/fs/") == -1 && req.originalUrl.indexOf("/fs_auth/") == -1 && req.originalUrl.indexOf("/fs_auth/") == -1) { // MCSERVER.log('[', req.method.cyan, ']', '[', req.ip, ']', req.originalUrl); } if (MCSERVER.localProperty.is_allow_csrf) { @@ -226,13 +220,8 @@ process.on("unhandledRejection", (reason, p) => { if (!fs.existsSync(RECORD_PARH)) fs.mkdirSync(RECORD_PARH); // 生成不 git 同步的文件 - if (!fs.existsSync(CENTEN_LOG_JSON_PATH)) - tools.mCopyFileSync( - INIT_CONFIG_PATH + "info_reset.json", - CENTEN_LOG_JSON_PATH - ); - if (!fs.existsSync(PUBLIC_URL_PATH)) - tools.mCopyFileSync(INIT_CONFIG_PATH + "INIT_URL.js", PUBLIC_URL_PATH); + if (!fs.existsSync(CENTEN_LOG_JSON_PATH)) tools.mCopyFileSync(INIT_CONFIG_PATH + "info_reset.json", CENTEN_LOG_JSON_PATH); + if (!fs.existsSync(PUBLIC_URL_PATH)) tools.mCopyFileSync(INIT_CONFIG_PATH + "INIT_URL.js", PUBLIC_URL_PATH); } catch (err) { MCSERVER.error("初始化文件环境失败,建议重启,请检查以下报错:", err); } @@ -242,20 +231,13 @@ process.on("unhandledRejection", (reason, p) => { MCSERVER.infoLog("OnlineFs", "正在初始化文件管理路由与中间件 "); //必须先进行登陆 且 fs API 请求必须为 Ajax 请求,得以保证跨域阻止 -app.use( - ["/fs/mkdir", "/fs/rm", "/fs/patse", "/fs/cp", "/fs/rename", "/fs/ls"], - function (req, res, next) { - if (req.session.fsos && req.xhr) { - next(); - return; - } - res - .status(403) - .send( - "禁止访问:权限不足!您不能直接访问文件在线管理程序 API,请通过正常流程!" - ); +app.use(["/fs/mkdir", "/fs/rm", "/fs/patse", "/fs/cp", "/fs/rename", "/fs/ls"], function (req, res, next) { + if (req.session.fsos && req.xhr) { + next(); + return; } -); + res.status(403).send("禁止访问:权限不足!您不能直接访问文件在线管理程序 API,请通过正常流程!"); +}); //载入在线文件管理路由 app.use("/fs_auth", require("./onlinefs/controller/auth")); @@ -279,41 +261,27 @@ app.use("/fs", require("./onlinefs/controller/function")); if (host == "::") host = "127.0.0.1"; //App Http listen - app.listen( - MCSERVER.localProperty.http_port, - MCSERVER.localProperty.http_ip, - () => { - MCSERVER.infoLog( - "HTTP", - "HTTP 模块监听: [ http://" + - (host || "127.0.0.1".yellow) + - ":" + - port + - " ]" - ); + app.listen(MCSERVER.localProperty.http_port, MCSERVER.localProperty.http_ip, () => { + MCSERVER.infoLog("HTTP", "HTTP 模块监听: [ http://" + (host || "127.0.0.1".yellow) + ":" + port + " ]"); - //现在执行 FTP 服务器启动过程 - ftpServerInterface.initFTPdServerOptions({ - host: MCSERVER.localProperty.ftp_ip || "127.0.0.1", - port: MCSERVER.localProperty.ftp_port, - tls: null, - }); + //现在执行 FTP 服务器启动过程 + ftpServerInterface.initFTPdServerOptions({ + host: MCSERVER.localProperty.ftp_ip || "127.0.0.1", + port: MCSERVER.localProperty.ftp_port, + tls: null, + }); - if (MCSERVER.localProperty.ftp_is_allow) require("./ftpd/index"); //执行ftp逻辑 + if (MCSERVER.localProperty.ftp_is_allow) require("./ftpd/index"); //执行ftp逻辑 - MCSERVER.infoLog("INFO", "配置文件: property.js 文件"); - MCSERVER.infoLog( - "INFO", - "文档参阅: https://github.com/suwings/mcsmanager" - ); + MCSERVER.infoLog("INFO", "配置文件: property.js 文件"); + MCSERVER.infoLog("INFO", "文档参阅: https://github.com/suwings/mcsmanager"); - if (MCSERVER.allError <= 0) { - MCSERVER.infoLog("INFO", "控制面板已经启动"); - } else { - MCSERVER.infoLog("INFO", "控制面板启动异常"); - } + if (MCSERVER.allError <= 0) { + MCSERVER.infoLog("INFO", "控制面板已经启动"); + } else { + MCSERVER.infoLog("INFO", "控制面板启动异常"); } - ); + }); })(); //用于捕捉前方所有路由都未经过的请求,则可为 404 页面 diff --git a/core/Process/BaseMcserver.js b/core/Process/BaseMcserver.js index 5f9b8f28..9b1131e2 100644 --- a/core/Process/BaseMcserver.js +++ b/core/Process/BaseMcserver.js @@ -34,11 +34,7 @@ class ServerProcess extends EventEmitter { MCSERVER.log(["根:", this.dataModel.cwd].join(" ")); MCSERVER.log("-------------------------------"); - if ( - !this.dataModel.highCommande || - this.dataModel.highCommande.trim().length <= 0 - ) - throw new Error("自定义参数非法,无法启动服务端"); + if (!this.dataModel.highCommande || this.dataModel.highCommande.trim().length <= 0) throw new Error("自定义参数非法,无法启动服务端"); let commandArray = this.dataModel.highCommande.split(" "); let javaPath = commandArray.shift(); //过滤 @@ -71,8 +67,7 @@ class ServerProcess extends EventEmitter { parList.push(tmpAddList[k]); } - let commandString = - this.dataModel.java + " " + parList.toString().replace(/,/gim, " "); + let commandString = this.dataModel.java + " " + parList.toString().replace(/,/gim, " "); //是否只获取命令字符串 if (onlyCommandString) return commandString; @@ -85,11 +80,7 @@ class ServerProcess extends EventEmitter { MCSERVER.log(["根:", this.dataModel.cwd].join(" ")); MCSERVER.log("-------------------------------"); - this.process = childProcess.spawn( - this.dataModel.java, - parList, - this.ProcessConfig - ); + this.process = childProcess.spawn(this.dataModel.java, parList, this.ProcessConfig); } //使用 Docker API 启动进程 @@ -100,18 +91,14 @@ class ServerProcess extends EventEmitter { // 采用 Docker API 进行启动与监控 // 启动命令解析 let startCommande = ""; - if (this.dataModel.highCommande.trim() != "") - startCommande = this.dataModel.highCommande; + if (this.dataModel.highCommande.trim() != "") startCommande = this.dataModel.highCommande; else startCommande = this.templateStart(true); const startCommandeArray = startCommande.split(" "); let portmap = this.dataModel.dockerConfig.dockerPorts; // 端口解析 var agreement = portmap.split("/"); var protocol = "tcp"; - if ( - agreement.length >= 2 && - (agreement[1] === "udp" || agreement[1] === "tcp") - ) { + if (agreement.length >= 2 && (agreement[1] === "udp" || agreement[1] === "tcp")) { protocol = agreement[1]; } portmap = portmap.split(":"); @@ -193,13 +180,7 @@ class ServerProcess extends EventEmitter { process.kill = () => { auxContainer.kill().then(() => { auxContainer.remove().then(() => { - MCSERVER.log( - "实例", - "[", - self.dataModel.name, - "]", - "容器已强制移除" - ); + MCSERVER.log("实例", "[", self.dataModel.name, "]", "容器已强制移除"); }); }); }; @@ -212,14 +193,7 @@ class ServerProcess extends EventEmitter { // 容器流错误事件传递 stream.on("error", (err) => { MCSERVER.error("服务器运行时异常,建议检查配置与环境", err); - self.printlnStdin([ - "Error:", - err.name, - "\n Error Message:", - err.message, - "\n 进程 PID:", - self.process.pid || "启动失败,无法获取进程。", - ]); + self.printlnStdin(["Error:", err.name, "\n Error Message:", err.message, "\n 进程 PID:", self.process.pid || "启动失败,无法获取进程。"]); self.stop(); self.emit("error", err); }); @@ -237,17 +211,13 @@ class ServerProcess extends EventEmitter { self.dataModel.lastDate = new Date().toLocaleString(); // 输出事件的传递 - process.stdout.on("data", (data) => - self.emit("console", iconv.decode(data, self.dataModel.oe)) - ); + process.stdout.on("data", (data) => self.emit("console", iconv.decode(data, self.dataModel.oe))); // 产生事件开启 self.emit("open", self); // 输出开服资料 - self.printlnCommandLine( - "服务端 " + self.dataModel.name + " 执行开启命令." - ); + self.printlnCommandLine("服务端 " + self.dataModel.name + " 执行开启命令."); } ); } @@ -258,16 +228,11 @@ class ServerProcess extends EventEmitter { // 服务端时间权限判断 let timeResult = this.isDealLineDate(); if (timeResult) { - throw new Error( - "服务端于 " + - this.dataModel.timeLimitDate + - " 时间已到期,拒绝启动,请咨询管理员。" - ); + throw new Error("服务端于 " + this.dataModel.timeLimitDate + " 时间已到期,拒绝启动,请咨询管理员。"); } // 防止重复启动 - if (this._run || this._loading) - throw new Error("服务端进程在运行或正在加载.."); + if (this._run || this._loading) throw new Error("服务端进程在运行或正在加载.."); this._loading = true; @@ -313,18 +278,14 @@ class ServerProcess extends EventEmitter { this.dockerStart().then(undefined, (error) => { // Docker 启动时异常处理 MCSERVER.error("此服务器启动时异常,具体错误信息:", error); - this.printlnCommandLine( - "进程实例启动时失败,建议检查配置文件与启动参数" - ); + this.printlnCommandLine("进程实例启动时失败,建议检查配置文件与启动参数"); this.stop(); }); // 阻止继续运行下去 return true; } else { // 确定是自定义命令启动还是模板正常方式启动。 - this.dataModel.highCommande - ? this.customCommandStart() - : this.templateStart(); + this.dataModel.highCommande ? this.customCommandStart() : this.templateStart(); } } catch (err) { this.stop(); @@ -339,36 +300,22 @@ class ServerProcess extends EventEmitter { // 进程事件监听 this.process.on("error", (err) => { MCSERVER.error("服务器运行时异常,建议检查配置与环境", err); - this.printlnStdin([ - "Error:", - err.name, - "\n Error Message:", - err.message, - "\n 进程 PID:", - this.process.pid || "启动失败,无法获取进程。", - ]); + this.printlnStdin(["Error:", err.name, "\n Error Message:", err.message, "\n 进程 PID:", this.process.pid || "启动失败,无法获取进程。"]); this.stop(); this.emit("error", err); }); // 进程启动成功确认 if (!this.process.pid) { - MCSERVER.error( - "服务端进程启动失败,建议检查启动命令与参数是否正确,pid:", - this.process.pid - ); + MCSERVER.error("服务端进程启动失败,建议检查启动命令与参数是否正确,pid:", this.process.pid); this.stop(); delete this.process; throw new Error("服务端进程启动失败,建议检查启动命令与参数是否正确"); } // 输出事件的传递 - this.process.stdout.on("data", (data) => - this.emit("console", iconv.decode(data, this.dataModel.oe)) - ); - this.process.stderr.on("data", (data) => - this.emit("console", iconv.decode(data, this.dataModel.oe)) - ); + this.process.stdout.on("data", (data) => this.emit("console", iconv.decode(data, this.dataModel.oe))); + this.process.stderr.on("data", (data) => this.emit("console", iconv.decode(data, this.dataModel.oe))); this.process.on("exit", (code) => { this.emit("exit", code); this.stop(); @@ -386,9 +333,7 @@ class ServerProcess extends EventEmitter { send(command) { if (this._run) { if (this.process.dockerContainer != null) { - this.process.stdin.write( - iconv.encode(command, this.dataModel.ie) + "\n" - ); + this.process.stdin.write(iconv.encode(command, this.dataModel.ie) + "\n"); } else { this.process.stdin.write(iconv.encode(command, this.dataModel.ie)); this.process.stdin.write("\n"); @@ -460,22 +405,14 @@ class ServerProcess extends EventEmitter { //输出一行到标准输出 printlnStdin(line) { - let str = ["[MCSMANAGER] [", tools.getFullTime(), "]:", line, "\r\n"].join( - " " - ); + let str = ["[MCSMANAGER] [", tools.getFullTime(), "]:", line, "\r\n"].join(" "); this.emit("console", str); } printlnCommandLine(line) { - this.emit( - "console", - "[MCSMANAGER] -------------------------------------------------------------- \r\n" - ); + this.emit("console", "[MCSMANAGER] -------------------------------------------------------------- \r\n"); this.printlnStdin(line); - this.emit( - "console", - "[MCSMANAGER] -------------------------------------------------------------- \r\n" - ); + this.emit("console", "[MCSMANAGER] -------------------------------------------------------------- \r\n"); } isDealLineDate() { diff --git a/core/Process/Mcserver.js b/core/Process/Mcserver.js index 946cc181..0c7e52a8 100644 --- a/core/Process/Mcserver.js +++ b/core/Process/Mcserver.js @@ -34,8 +34,7 @@ class MinecraftServer extends ServerProcess { // this.isDocker = false; //Docker 配置项目 this.dataModel.dockerConfig = { - dockerCommand: - "docker run -i ${xmx} -v ${serverpath}:/mcsd/ ${ports} ${imagename} ${commande}", + dockerCommand: "docker run -i ${xmx} -v ${serverpath}:/mcsd/ ${ports} ${imagename} ${commande}", dockerImageName: "mcsd", dockerXmx: "", dockerPorts: "", diff --git a/core/Process/ServerCenter.js b/core/Process/ServerCenter.js index ada411a3..f8462e86 100644 --- a/core/Process/ServerCenter.js +++ b/core/Process/ServerCenter.js @@ -44,9 +44,7 @@ class ServerManager extends EventEmitter { fs.unlinkSync(BASE_SERVER_DIR + name + ".json"); delete this.serverList[name]; } catch (err) { - throw new Error( - "删除服务器出现错误,删除失败并且服务器可能已经损坏:" + err - ); + throw new Error("删除服务器出现错误,删除失败并且服务器可能已经损坏:" + err); } } @@ -85,14 +83,8 @@ class ServerManager extends EventEmitter { } startMinecraftServer(name) { - if (!this.isExist(name)) - throw new Error( - "您选择的服务器 [" + - name + - "] 似乎不存在,请重新创建或检查数据是否完整。" - ); - if (this.serverList[name].isRun()) - throw new Error("服务器已经运行,无法再继续运行"); + if (!this.isExist(name)) throw new Error("您选择的服务器 [" + name + "] 似乎不存在,请重新创建或检查数据是否完整。"); + if (this.serverList[name].isRun()) throw new Error("服务器已经运行,无法再继续运行"); return this.serverList[name].start(); } diff --git a/core/User/UserCenter.js b/core/User/UserCenter.js index 6878de81..e7a54aa8 100644 --- a/core/User/UserCenter.js +++ b/core/User/UserCenter.js @@ -52,11 +52,7 @@ class UserCenter { //理应只有管理员可以操作 reUsername(username, newUsername) { let oldDataModel = this.userList[username].dataModel; - let newUser = new User( - newUsername, - oldDataModel.password, - oldDataModel.salt - ); + let newUser = new User(newUsername, oldDataModel.password, oldDataModel.salt); //移植數據 // for (let k in oldDataModel) { // if (k == '__filename__') continue; @@ -70,18 +66,8 @@ class UserCenter { this.deleteUser(username); } - loginCheck( - username, - password, - truecb, - falsecb, - md5key, - notSafeLogin = false - ) { - if ( - this.userList.hasOwnProperty(username) && - this.userList[username] != undefined - ) { + loginCheck(username, password, truecb, falsecb, md5key, notSafeLogin = false) { + if (this.userList.hasOwnProperty(username) && this.userList[username] != undefined) { let loginUser = this.userList[username]; try { loginUser.load(); diff --git a/core/counter.js b/core/counter.js index fd6bc845..b99937d3 100644 --- a/core/counter.js +++ b/core/counter.js @@ -12,10 +12,7 @@ module.exports.init = () => { module.exports.load(); //定时清楚 setInterval(function () { - if ( - new Date().getDate() == 1 && - new Date().getMonth() + 1 >= dataModel.reloadMonth - ) { + if (new Date().getDate() == 1 && new Date().getMonth() + 1 >= dataModel.reloadMonth) { dataModel.reloadMonth = new Date().getMonth() + 2; //调至下个月 MCSERVER.log(" ---- 数据期限已到 清空数据统计 ---- "); for (let i in initDataCallbackList) { @@ -29,8 +26,7 @@ module.exports.init = () => { module.exports.load = () => { dataModel.load(); counterMask = dataModel.counterData; - if (dataModel.reloadMonth == undefined) - dataModel.reloadMonth = new Date().getMonth() + 2; //下个月 + if (dataModel.reloadMonth == undefined) dataModel.reloadMonth = new Date().getMonth() + 2; //下个月 dataModel.save(); return this; }; diff --git a/core/log.js b/core/log.js index 23b68135..e14892a6 100644 --- a/core/log.js +++ b/core/log.js @@ -7,18 +7,7 @@ if (!fs.existsSync("logs/")) fs.mkdirSync("logs"); // 启动时自动储存上次日志文件 if (fs.existsSync(LOG_FILE_PATH)) { const date = new Date(); - const logFilename = - date.getFullYear() + - "-" + - (date.getMonth() + 1) + - "-" + - date.getDay() + - "_" + - date.getHours() + - "-" + - date.getMinutes() + - "-" + - date.getSeconds(); + const logFilename = date.getFullYear() + "-" + (date.getMonth() + 1) + "-" + date.getDay() + "_" + date.getHours() + "-" + date.getMinutes() + "-" + date.getSeconds(); fs.renameSync(LOG_FILE_PATH, "logs/" + logFilename + ".log"); } diff --git a/core/tools.js b/core/tools.js index fc07f9e7..7e568482 100644 --- a/core/tools.js +++ b/core/tools.js @@ -31,8 +31,7 @@ module.exports.md5 = () => { module.exports.randomString = (len) => { len = len || 64; - var $chars = - "ABCDEFGHIJKLNMOPQRSTUVWXYZabcdefghijklnmopqrstuvwxyz1234567890_"; + var $chars = "ABCDEFGHIJKLNMOPQRSTUVWXYZabcdefghijklnmopqrstuvwxyz1234567890_"; var maxPos = $chars.length; var pwd = ""; for (let i = 0; i < len; i++) { @@ -74,19 +73,7 @@ module.exports.getSystemCodeing = () => { module.exports.getFullTime = () => { var date = new Date(); - return ( - date.getFullYear() + - "/" + - date.getMonth() + - "/" + - date.getDay() + - " " + - date.getHours() + - ":" + - date.getMinutes() + - ":" + - date.getSeconds() - ); + return date.getFullYear() + "/" + date.getMonth() + "/" + date.getDay() + " " + date.getHours() + ":" + date.getMinutes() + ":" + date.getSeconds(); }; const REPALCE_STR = "__MCSMANAGER_REPLACE_STR__"; diff --git a/ftpd/ftpserver.js b/ftpd/ftpserver.js index 654f4a81..5ce29d5b 100644 --- a/ftpd/ftpserver.js +++ b/ftpd/ftpserver.js @@ -63,23 +63,7 @@ module.exports.runFTPServer = () => { FTPserver.debugging = 0; FTPserver.listen(options.port); - MCSERVER.infoLog( - "FTP".green, - [ - " FTP 被动传输端口范围: [", - MCSERVER.localProperty.ftp_start_port, - "-", - MCSERVER.localProperty.ftp_end_port, - "]", - ].join(" ") - ); + MCSERVER.infoLog("FTP".green, [" FTP 被动传输端口范围: [", MCSERVER.localProperty.ftp_start_port, "-", MCSERVER.localProperty.ftp_end_port, "]"].join(" ")); - MCSERVER.infoLog( - "FTP".green, - " FTP 模块监听: [ ftp://" + - (options.host || "127.0.0.1".yellow) + - ":" + - options.port + - " ]" - ); + MCSERVER.infoLog("FTP".green, " FTP 模块监听: [ ftp://" + (options.host || "127.0.0.1".yellow) + ":" + options.port + " ]"); }; diff --git a/ftpd/index.js b/ftpd/index.js index e34b6c0d..34877519 100644 --- a/ftpd/index.js +++ b/ftpd/index.js @@ -19,19 +19,12 @@ ftpServerInterface.createFTPServer({ let user = userModel.userCenter().get(realName); - let dataModel = - serverModel.ServerManager().getServer(serverName).dataModel || null; + let dataModel = serverModel.ServerManager().getServer(serverName).dataModel || null; if (dataModel) { - MCSERVER.infoLog( - "Ftpd", - ["用户", realName, "请求 FTP 访问 |", serverName, "| OK"].join(" ") - ); + MCSERVER.infoLog("Ftpd", ["用户", realName, "请求 FTP 访问 |", serverName, "| OK"].join(" ")); return dataModel.cwd; } - MCSERVER.warning( - "Ftpd 发现不明身份不明根目录者正在尝试访问", - ["已经阻止 | 可能的值", username, serverName].join(" ") - ); + MCSERVER.warning("Ftpd 发现不明身份不明根目录者正在尝试访问", ["已经阻止 | 可能的值", username, serverName].join(" ")); return null; }, pasvPortRangeStart: MCSERVER.localProperty.ftp_start_port, @@ -50,10 +43,7 @@ ftpServerInterface.initFTPServerListener({ let arrName = usname.split("."); let serverName = arrName[1]; let userName = arrName[0]; - if ( - serverModel.ServerManager().isExist(serverName) && - permission.isCanServer(userName, serverName) - ) { + if (serverModel.ServerManager().isExist(serverName) && permission.isCanServer(userName, serverName)) { try { return userModel.beliveLogin(userName, password); } catch (e) { diff --git a/helper/ApiResponse.js b/helper/ApiResponse.js index 58d5e8f9..43a04313 100644 --- a/helper/ApiResponse.js +++ b/helper/ApiResponse.js @@ -47,11 +47,7 @@ module.exports.error = (res, error = new NullError(), statusCode = 500) => { res.end(); }; -module.exports.forbidden = ( - res, - error = new ForbiddenError(), - statusCode = 403 -) => { +module.exports.forbidden = (res, error = new ForbiddenError(), statusCode = 403) => { res.send( JSON.stringify({ status: statusCode, @@ -61,11 +57,7 @@ module.exports.forbidden = ( res.end(); }; -module.exports.unavailable = ( - res, - error = new UnavailableError(), - statusCode = 503 -) => { +module.exports.unavailable = (res, error = new UnavailableError(), statusCode = 503) => { res.send( JSON.stringify({ status: statusCode, diff --git a/helper/LogHistory.js b/helper/LogHistory.js index 7f112a8c..02f3ab6e 100644 --- a/helper/LogHistory.js +++ b/helper/LogHistory.js @@ -37,13 +37,7 @@ class LogHistory { } } else { fs.writeFile(this.path, text, (err) => { - if (err) - MCSERVER.log( - "实例", - this.id, - "日志历史记录文件创建错误:", - err.message - ); + if (err) MCSERVER.log("实例", this.id, "日志历史记录文件创建错误:", err.message); }); } } @@ -74,12 +68,7 @@ class LogHistory { // 倒置指针,从末尾开始读字符 fs.read(fd, buffer, 0, size, endReadPoint, (err, bytesRead, buffer) => { if (err) { - MCSERVER.log( - "实例", - this.id, - "日志历史记录文件读取错误:", - err.message - ); + MCSERVER.log("实例", this.id, "日志历史记录文件读取错误:", err.message); fs.closeSync(fd); return; } @@ -118,12 +107,7 @@ class LogHistory { // 倒置指针,从末尾开始读字符 fs.read(fd, buffer, 0, size, endReadPoint, (err, bytesRead, buffer) => { if (err) { - MCSERVER.log( - "实例", - this.id, - "日志历史记录文件读取错误:", - err.message - ); + MCSERVER.log("实例", this.id, "日志历史记录文件读取错误:", err.message); return; } const logText = buffer.slice(0, bytesRead).toString(); diff --git a/helper/LoginedContainer.js b/helper/LoginedContainer.js index b389feb1..27a367b4 100644 --- a/helper/LoginedContainer.js +++ b/helper/LoginedContainer.js @@ -1,8 +1,7 @@ var Logined = {}; module.exports.addLogined = (sessionID, username, userdata) => { - if (username && userdata && sessionID) - Logined[sessionID] = [username, userdata, Date.now()]; + if (username && userdata && sessionID) Logined[sessionID] = [username, userdata, Date.now()]; else throw new Error("Username or Userdata is Null"); }; diff --git a/helper/MCPingProtocol.js b/helper/MCPingProtocol.js index 1989b388..9b82934e 100644 --- a/helper/MCPingProtocol.js +++ b/helper/MCPingProtocol.js @@ -113,10 +113,7 @@ function CreateMCPingTask(id, ip, port) { } else { // 连续查询错误次数 300 次以上,即 30 分钟,主动销毁自身 TASK_OBJECT_DATABASE[id] && TASK_OBJECT_DATABASE[id].errorCount++; - if ( - TASK_OBJECT_DATABASE[id] && - TASK_OBJECT_DATABASE[id].errorCount > 300 - ) { + if (TASK_OBJECT_DATABASE[id] && TASK_OBJECT_DATABASE[id].errorCount > 300) { DestroyMCPingTask(id); } } diff --git a/helper/Permission.js b/helper/Permission.js index 3dfcec48..3aa1c69c 100644 --- a/helper/Permission.js +++ b/helper/Permission.js @@ -2,8 +2,7 @@ const loginedContainer = require("./LoginedContainer"); function randomString(len) { len = len || 32; - var $chars = - "ABCDEFGHIJKLNMOPQRSTUVWXYZabcdefghijklnmopqrstuvwxyz1234567890_"; + var $chars = "ABCDEFGHIJKLNMOPQRSTUVWXYZabcdefghijklnmopqrstuvwxyz1234567890_"; var maxPos = $chars.length; var pwd = ""; for (let i = 0; i < len; i++) { @@ -12,13 +11,7 @@ function randomString(len) { return pwd; } -function defaultFalseCallBack( - req, - res, - ResponseKey, - ResponseValue, - notAjaxRedirect -) { +function defaultFalseCallBack(req, res, ResponseKey, ResponseValue, notAjaxRedirect) { if (req.xhr) { res.send({ ResponseKey: ResponseKey, @@ -34,18 +27,13 @@ module.exports.randomString = randomString; module.exports.needLogin = (req, res, trueCallBack, falseCallBack) => { let username = req.session["username"]; - if ( - req.session["login"] && - loginedContainer.isLogined(req.sessionID, username) - ) { + if (req.session["login"] && loginedContainer.isLogined(req.sessionID, username)) { if (req.session["login"] === true && username) { trueCallBack && trueCallBack(); return true; } } - falseCallBack - ? falseCallBack() - : defaultFalseCallBack(req, res, "user/status", "NotLogin"); + falseCallBack ? falseCallBack() : defaultFalseCallBack(req, res, "user/status", "NotLogin"); return false; }; @@ -92,9 +80,7 @@ module.exports.tokenCheck = (req, res, trueCallBack, falseCallBack) => { return; } } - falseCallBack - ? falseCallBack() - : defaultFalseCallBack(req, res, "user/status", "NotToken", "/error/token"); + falseCallBack ? falseCallBack() : defaultFalseCallBack(req, res, "user/status", "NotToken", "/error/token"); }; const serverModel = require("../model/ServerModel"); diff --git a/helper/RecordCommand.js b/helper/RecordCommand.js index 54486993..908e393d 100644 --- a/helper/RecordCommand.js +++ b/helper/RecordCommand.js @@ -28,11 +28,7 @@ class RecordCommand { fs.appendFile(this.path, data, FILE_CODE, function (err) { if (err) throw err; }); - else - fs.writeFileSync( - this.path, - new Buffer(HISTORY_SIZE_LINE * 2).toString() + data - ); + else fs.writeFileSync(this.path, new Buffer(HISTORY_SIZE_LINE * 2).toString() + data); } readRecord(pstart = 0, length = 32, callback = (logStr) => {}) { diff --git a/helper/Schedule.js b/helper/Schedule.js index 98deb2e3..92763bc5 100644 --- a/helper/Schedule.js +++ b/helper/Schedule.js @@ -45,41 +45,22 @@ module.exports.init = () => { for (const key in MCSERVER.Schedule.dataModel.list) { const element = MCSERVER.Schedule.dataModel.list[key]; if (element == null) continue; - createScheduleJobCount( - element.id, - element.time, - element.count, - element.commande, - element.servername, - null, - false - ); + createScheduleJobCount(element.id, element.time, element.count, element.commande, element.servername, null, false); } }; //计次型任务 -function createScheduleJobCount( - id, - time, - count, - commande, - servername, - callback, - _save = true -) { +function createScheduleJobCount(id, time, count, commande, servername, callback, _save = true) { let lco = 0; - let mask = (MCSERVER.Schedule.container[id] = schedule.scheduleJob( - time, - (fireDate) => { - if (lco >= count && count > 0) { - deleteScheduleJob(id); - return; - } - lco++; - serverExe(servername, commande); - callback && callback(commande); + let mask = (MCSERVER.Schedule.container[id] = schedule.scheduleJob(time, (fireDate) => { + if (lco >= count && count > 0) { + deleteScheduleJob(id); + return; } - )); + lco++; + serverExe(servername, commande); + callback && callback(commande); + })); if (mask && _save) { MCSERVER.Schedule.dataModel.list.push({ id: id, diff --git a/model/ServerModel.js b/model/ServerModel.js index b8ef42be..b4c10ab1 100644 --- a/model/ServerModel.js +++ b/model/ServerModel.js @@ -27,8 +27,7 @@ module.exports.createServerDir = (serverName, cwd) => { }; module.exports.createServer = (serverName, config) => { - if (config.cwd == "" || config.cwd == "<默认标准位置>") - config.cwd = getServerDir(serverName); + if (config.cwd == "" || config.cwd == "<默认标准位置>") config.cwd = getServerDir(serverName); if (!fs.existsSync(config.cwd)) { fsextra.mkdirsSync(config.cwd); } @@ -86,12 +85,7 @@ schedule.scheduleJob("1 0 */2 * * *", function () { if (server && server.isRun()) { let res = server.isDealLineDate(); if (res) { - MCSERVER.log( - "[时间期限] 服务端 [", - server.dataModel.name, - "]", - "于现在过期,正在执行关闭程序." - ); + MCSERVER.log("[时间期限] 服务端 [", server.dataModel.name, "]", "于现在过期,正在执行关闭程序."); //先进行标准流程关闭服务端,如果 45 秒后未关闭,则强制性结束进程 server.send("stop"); server.send("end"); @@ -103,9 +97,6 @@ schedule.scheduleJob("1 0 */2 * * *", function () { } } } catch (err) { - MCSERVER.error( - "[时间期限] 关闭服务端时出现异常,某个服务端可能未能正确关闭:", - err - ); + MCSERVER.error("[时间期限] 关闭服务端时出现异常,某个服务端可能未能正确关闭:", err); } }); diff --git a/model/UserModel.js b/model/UserModel.js index 3cd0bf5c..eacaf3a0 100644 --- a/model/UserModel.js +++ b/model/UserModel.js @@ -13,25 +13,11 @@ module.exports.registerUser = (username, password) => { }; module.exports.loginUser = (username, password, truecb, falsecb, enkey) => { - return userCenters.loginCheck( - username, - password, - truecb, - falsecb, - enkey, - false - ); + return userCenters.loginCheck(username, password, truecb, falsecb, enkey, false); }; module.exports.beliveLogin = (username, password, truecb, falsecb) => { - return userCenters.loginCheck( - username, - password, - truecb, - falsecb, - null, - true - ); + return userCenters.loginCheck(username, password, truecb, falsecb, null, true); }; module.exports.deleteUser = (username, truecb, falsecb) => { diff --git a/onlinefs/controller/auth.js b/onlinefs/controller/auth.js index fd05b8b9..1528d7dd 100644 --- a/onlinefs/controller/auth.js +++ b/onlinefs/controller/auth.js @@ -27,9 +27,7 @@ router.all("/auth_master/pwd", (req, res) => { // 判断是否为管理员 if (permission.IsSessionMaster(req, res)) { MCSERVER.log("[Online Fs]", "管理员", userName, "访问服务端存放目录"); - const absServersDir = pathm.normalize( - pathm.join(pathm.join(__dirname, "../../"), SERVERS_DIR) - ); + const absServersDir = pathm.normalize(pathm.join(pathm.join(__dirname, "../../"), SERVERS_DIR)); req.session.fsos = new FileOperateStructure(absServersDir, "./"); req.session.fsoperate = {}; req.session.fsoperate.tmp = []; @@ -56,32 +54,17 @@ router.all("/auth/:servername", (req, res) => { } let dataModel = null; - if ( - serverModel.ServerManager().isExist(serverName) && - permission.isCanServer(userName, serverName) - ) { - dataModel = - serverModel.ServerManager().getServer(serverName).dataModel || null; + if (serverModel.ServerManager().isExist(serverName) && permission.isCanServer(userName, serverName)) { + dataModel = serverModel.ServerManager().getServer(serverName).dataModel || null; } if (!dataModel || !dataModel.cwd) { res.send("[ 权限阻止 ] dataModel 空,无权限操作的服务器!"); return; } let cwd = null; - if (!pathm.isAbsolute(dataModel.cwd)) - cwd = pathm.normalize( - pathm.join(pathm.join(__dirname, "../../"), dataModel.cwd) - ); + if (!pathm.isAbsolute(dataModel.cwd)) cwd = pathm.normalize(pathm.join(pathm.join(__dirname, "../../"), dataModel.cwd)); else cwd = dataModel.cwd; - MCSERVER.log( - "[Online Fs]", - "用户", - userName, - "访问服务器", - serverName, - "根:", - cwd - ); + MCSERVER.log("[Online Fs]", "用户", userName, "访问服务器", serverName, "根:", cwd); req.session.fsos = new FileOperateStructure(cwd, "./"); req.session.fsoperate = {}; diff --git a/onlinefs/controller/function.js b/onlinefs/controller/function.js index 439cc9f6..68379870 100644 --- a/onlinefs/controller/function.js +++ b/onlinefs/controller/function.js @@ -1,15 +1,8 @@ const express = require("express"); const router = express.Router(); const pathm = require("path"); -const { - parseHandle, - sendHandle, - filesToPaths, -} = require("../module/dataHandle"); -const { - FileOperateStructure, - UseFileOperate, -} = require("../model/fsoperate_session"); +const { parseHandle, sendHandle, filesToPaths } = require("../module/dataHandle"); +const { FileOperateStructure, UseFileOperate } = require("../model/fsoperate_session"); const fsoperate = require("../module/fsoperate"); const fs = require("fs"); const os = require("os"); @@ -29,12 +22,9 @@ router.post("/mkdir", (req, res) => { router.post("/ls", (req, res) => { let name = parseHandle(req.body, "string") || "./"; // 唯一的当前目录赋值场景 - req.session.fsos.cwd = pathm.normalize( - pathm.join(req.session.fsos.cwd, name) - ); + req.session.fsos.cwd = pathm.normalize(pathm.join(req.session.fsos.cwd, name)); let fileOperate = new UseFileOperate(req.session.fsos).fileOperate; - if (req.session.fsos.cwd == "..\\" || req.session.fsos.cwd == "../") - req.session.fsos.cwd = "./"; //越级,重置 + if (req.session.fsos.cwd == "..\\" || req.session.fsos.cwd == "../") req.session.fsos.cwd = "./"; //越级,重置 let obj = fileOperate.lsType(req.session.fsos.cwd); req.session.save(); sendHandle(req, res, obj); @@ -73,14 +63,8 @@ router.post("/patse", (req, res) => { let fileOperate = new UseFileOperate(req.session.fsos).fileOperate; if (req.session.fsoperate.tmp_action == "cp") callFunc = fileOperate.cp; else callFunc = fileOperate.mv; - let oldpaths = filesToPaths( - req.session.fsoperate.tmp_files, - req.session.fsoperate.tmp_cwd - ); - let newpaths = filesToPaths( - req.session.fsoperate.tmp_files, - req.session.fsos.cwd - ); + let oldpaths = filesToPaths(req.session.fsoperate.tmp_files, req.session.fsoperate.tmp_cwd); + let newpaths = filesToPaths(req.session.fsoperate.tmp_files, req.session.fsos.cwd); let obj = fileOperate.batchExectue(callFunc, oldpaths, newpaths); sendHandle(req, res, obj); @@ -118,14 +102,10 @@ router.post("/edit_write", (req, res) => { const obj = parseHandle(req.body); if (!obj || !obj.filename || !obj.context) return; //先进行基本的越权过滤 - if (obj.filename.indexOf("../") != -1 || obj.filename.indexOf("./") != -1) - return; + if (obj.filename.indexOf("../") != -1 || obj.filename.indexOf("./") != -1) return; const cwd = req.session.fsos.cwd; const fileOperate = new UseFileOperate(req.session.fsos).fileOperate; - const result = fileOperate.writeFile( - pathm.join(cwd, obj.filename), - obj.context - ); + const result = fileOperate.writeFile(pathm.join(cwd, obj.filename), obj.context); sendHandle(req, res, result); }); diff --git a/onlinefs/model/fsoperate_session.js b/onlinefs/model/fsoperate_session.js index 4b1d852a..5408b7b8 100644 --- a/onlinefs/model/fsoperate_session.js +++ b/onlinefs/model/fsoperate_session.js @@ -10,9 +10,7 @@ class FileOperateStructure { class UseFileOperate { constructor(fileOperateStructure) { if (!fileOperateStructure || !fileOperateStructure["rootPath"]) { - throw new Error( - "[UseFileOperate Mineself Error] UseFileOperate(...) Not is FileOperateStructure" - ); + throw new Error("[UseFileOperate Mineself Error] UseFileOperate(...) Not is FileOperateStructure"); } this.fileOperate = new FileOperate(fileOperateStructure.rootPath); this.fileOperateStructure = fileOperateStructure; diff --git a/onlinefs/module/base_fsoperate.js b/onlinefs/module/base_fsoperate.js index 1644426f..e2e0bb2b 100644 --- a/onlinefs/module/base_fsoperate.js +++ b/onlinefs/module/base_fsoperate.js @@ -7,8 +7,7 @@ const DEBUG = true; //基本的操作权限 class BaseFileOperate { constructor(rootPath) { - if (path_moduel.isAbsolute(rootPath)) - this.rootPath = path_moduel.normalize(rootPath); + if (path_moduel.isAbsolute(rootPath)) this.rootPath = path_moduel.normalize(rootPath); else throw Error("RootPath 必须是一个绝对路径,否则将无法定位"); // this.rootPath = path_moduel.normalize(path_moduel.resolve(rootPath)); this.fs = fs; diff --git a/onlinefs/module/extend_worker.js b/onlinefs/module/extend_worker.js index 1fc0abf7..f4bdab55 100644 --- a/onlinefs/module/extend_worker.js +++ b/onlinefs/module/extend_worker.js @@ -28,11 +28,7 @@ if (realArgv.length >= 1) { //执行解压 const absPath = realArgv[1]; //目录名与原文件同名 - const zipExtractDir = path.normalize( - path.dirname(absPath) + - "/解压文件_" + - path.basename(absPath, path.extname(absPath)) - ); + const zipExtractDir = path.normalize(path.dirname(absPath) + "/解压文件_" + path.basename(absPath, path.extname(absPath))); // 创建目标目录 try { fs.mkdirSync(zipExtractDir); @@ -63,9 +59,7 @@ if (realArgv.length >= 1) { // 此压缩库支持异步写法,但以防不测,依然列入子进程 if (ACTION === "compress") { const absPath = realArgv[1]; - const compressZipPath = path.normalize( - path.dirname(absPath) + "/压缩文件_" + path.basename(absPath) + ".zip" - ); + const compressZipPath = path.normalize(path.dirname(absPath) + "/压缩文件_" + path.basename(absPath) + ".zip"); // 进行压缩操作 compressing.zip .compressDir(absPath, compressZipPath, { diff --git a/onlinefs/module/fsoperate.js b/onlinefs/module/fsoperate.js index 237d7f64..503d4bd7 100644 --- a/onlinefs/module/fsoperate.js +++ b/onlinefs/module/fsoperate.js @@ -7,8 +7,7 @@ const fsex = require("fs-extra"); const child_process = require("child_process"); // 最大同时解压任务 -let MAX_EXTRACT_AND_COMPRESS_TASK_LIMIT = - MCSERVER.localProperty.max_eac_task_limit || 1; +let MAX_EXTRACT_AND_COMPRESS_TASK_LIMIT = MCSERVER.localProperty.max_eac_task_limit || 1; // 当前解压任务 let nowEacTaskCounter = 0; // 解压缩任务队列 @@ -22,10 +21,7 @@ setInterval(() => { const task = EAC_QUQUE.pop(); if (task == null) return; nowEacTaskCounter += 1; - const extend_worker = child_process.fork( - "./onlinefs/module/extend_worker.js", - [task["category"], task["path"]] - ); + const extend_worker = child_process.fork("./onlinefs/module/extend_worker.js", [task["category"], task["path"]]); extend_worker.on("close", () => { nowEacTaskCounter -= 1; }); @@ -116,10 +112,7 @@ class FileOperate extends BaseFileOperate { }); } else { //若删除文件夹则分配子进程来进行解压操作 - child_process.fork("./onlinefs/module/extend_worker.js", [ - "remove", - absPath, - ]); + child_process.fork("./onlinefs/module/extend_worker.js", ["remove", absPath]); } }); } diff --git a/public/common/css/common.css b/public/common/css/common.css index 6c6e6c07..591c003e 100644 --- a/public/common/css/common.css +++ b/public/common/css/common.css @@ -1,8 +1,6 @@ html, body { - font-family: -apple-system, BlinkMacSystemFont, Helvetica Neue, PingFang SC, - Microsoft YaHei, Source Han Sans SC, Noto Sans CJK SC, WenQuanYi Micro Hei, - sans-serif; + font-family: -apple-system, BlinkMacSystemFont, Helvetica Neue, PingFang SC, Microsoft YaHei, Source Han Sans SC, Noto Sans CJK SC, WenQuanYi Micro Hei, sans-serif; font-size: 14px; color: #1a1a1a; -webkit-tap-highlight-color: rgba(26, 26, 26, 0); @@ -71,8 +69,7 @@ input { top: 0px; bottom: 0px; font-size: 18px; - box-shadow: 0 10px 30px -12px rgba(0, 0, 0, 0.42), - 0 4px 25px 0px rgba(0, 0, 0, 0.12), 0 8px 10px -5px rgba(0, 0, 0, 0.2); + box-shadow: 0 10px 30px -12px rgba(0, 0, 0, 0.42), 0 4px 25px 0px rgba(0, 0, 0, 0.12), 0 8px 10px -5px rgba(0, 0, 0, 0.2); } #Container { diff --git a/public/common/js/login.js b/public/common/js/login.js index bb363b50..9f022259 100644 --- a/public/common/js/login.js +++ b/public/common/js/login.js @@ -1,12 +1,5 @@ //通用登陆 API js -MCSERVER.login = function ( - username, - password, - rand, - loginSuccess, - loginError, - error -) { +MCSERVER.login = function (username, password, rand, loginSuccess, loginError, error) { var POST_OBJECT = null; $.get({ url: MCSERVER.URL("./user/login_key"), diff --git a/public/common/js/properties.js b/public/common/js/properties.js index c8a6de3b..ea4ca069 100644 --- a/public/common/js/properties.js +++ b/public/common/js/properties.js @@ -1,8 +1,7 @@ (function () { MCSERVER.findPropertiesShow = function (key) { var SuwingsLoveYou = { - "generator-settings": - "用于自定义超平坦世界的生成,不生成超平坦世界请留空", + "generator-settings": "用于自定义超平坦世界的生成,不生成超平坦世界请留空", "allow-nether": "是否允许下界(包括地狱)", "level-name": "世界(地图)名称 不要使用中文", "enable-query": "是否允许使用GameSpy4协议的服务器监听器", @@ -23,23 +22,19 @@ "online-mode": "在线(正版)验证", pvp: "是否允许玩家互相攻击", difficulty: "难度0=和平 1=简单 2=普通 3=困难", - "player-idle-timeout": - "允许的挂机时间,单位为分钟 超过限制后自动T出服务器", + "player-idle-timeout": "允许的挂机时间,单位为分钟 超过限制后自动T出服务器", gamemode: "游戏模式 0=生存 1=创造 2=冒险 3=旁观", "max-players": "服务器最大玩家数限制", "spawn-monsters": "生成攻击型生物(怪物)", "view-distance": "服务器发送给客户端的数据量,决定玩家能设置的视野", - "generate-structures": - "生成世界时生成结构(如村庄)禁止后地牢和地下要塞仍然生成", + "generate-structures": "生成世界时生成结构(如村庄)禁止后地牢和地下要塞仍然生成", motd: "服务器信息展示 若使用ColorMotd等插件可留空该选项", "op-permission-level": "OP权限等级 ", - "announce-player-achievements": - "玩家获得成就时,是否在服务器聊天栏显示(是否允许其装X)", + "announce-player-achievements": "玩家获得成就时,是否在服务器聊天栏显示(是否允许其装X)", "network-compression-threshold": "网络压缩阈值", "resource-pack-sha1": "资源包的SHA-1值,必须为小写十六进制,不是必填选项", "enable-command-block": "启用命令方块", - "resource-pack": - "统一资源标识符 (URI) 指向一个资源包。玩家可选择是否使用", + "resource-pack": "统一资源标识符 (URI) 指向一个资源包。玩家可选择是否使用", "max-world-size": "最大世界大小", "function-permission-level": "设定函数的默认权限等级", "max-tick-time": "设置每个tick花费的最大毫秒数", @@ -47,14 +42,12 @@ "rcon.port": "设置RCON远程访问的端口号", "rcon.password": "设置RCON远程访问的密码(参见enable-rcon)", "query.port": "设置监听服务器的端口号(参见 enable-rcon)", - "use-native-transport": - "是否使用针对Linux平台的数据包收发优化 [ 仅Linux ]", + "use-native-transport": "是否使用针对Linux平台的数据包收发优化 [ 仅Linux ]", debug: "调试模式", "broadcast-rcon-to-ops": "向OP广播RCON信息", "broadcast-console-to-ops": "向OP广播服务器控制台信息", "enforce-whitelist": "在服务器上强制使用白名单", - "spawn-protection": - "通过将该值进行 2x+1 的运算来决定出生点的保护半径,设置为0将只保护出生点下方那一个方块。", + "spawn-protection": "通过将该值进行 2x+1 的运算来决定出生点的保护半径,设置为0将只保护出生点下方那一个方块。", }; if (SuwingsLoveYou.hasOwnProperty(key)) { diff --git a/public/common/js/response.js b/public/common/js/response.js index af20c9a3..d50ab9a4 100644 --- a/public/common/js/response.js +++ b/public/common/js/response.js @@ -9,9 +9,7 @@ RES.TOKEN = null; RES.getToken = function (callback) { //同源策略可以防止其他域对这里发送一个Ajax请求. - var _url = MCSERVER.URL( - "./token?_LoveYouMaster_Time=" + Date.parse(new Date()) - ); + var _url = MCSERVER.URL("./token?_LoveYouMaster_Time=" + Date.parse(new Date())); $.get(_url, function (data, status) { data = JSON.parse(data); if (data.hasOwnProperty("ResponseValue")) { @@ -75,10 +73,7 @@ //响应事件函数 function responseCallback(response, status, xhr) { - if (status != "success") - TOOLS.pushMsgWindow( - "[ " + status + " ] 由于网络或权限问题,请求的网页无法成功!" - ); + if (status != "success") TOOLS.pushMsgWindow("[ " + status + " ] 由于网络或权限问题,请求的网页无法成功!"); callback && callback(); } diff --git a/public/common/js/tools.js b/public/common/js/tools.js index 68732082..20d25c28 100644 --- a/public/common/js/tools.js +++ b/public/common/js/tools.js @@ -50,13 +50,7 @@ // XSS 攻击防御函数 TOOLS.encode = function (html) { - var rstr = html - .replace(/&/gim, "&") - .replace(//gim, ">") - .replace(/\"/gim, """) - .replace(/\'/gim, "'") - .replace(/ /gim, " "); + var rstr = html.replace(/&/gim, "&").replace(//gim, ">").replace(/\"/gim, """).replace(/\'/gim, "'").replace(/ /gim, " "); return rstr; }; @@ -83,17 +77,11 @@ var exp = new Date(); exp.setTime(exp.getTime() - 1); var cval = TOOLS.getCookie(name); - if (cval != null) - document.cookie = name + "=" + cval + ";expires=" + exp.toGMTString(); + if (cval != null) document.cookie = name + "=" + cval + ";expires=" + exp.toGMTString(); }; TOOLS.setCookie = function (name, value) { - document.cookie = - name + - "=" + - escape(value) + - ";expires=" + - new Date(Date.now() + 10000 * 60 * 60 * 4).toGMTString(); + document.cookie = name + "=" + escape(value) + ";expires=" + new Date(Date.now() + 10000 * 60 * 60 * 4).toGMTString(); }; //判断是否是一个 标准字符串(标准的定义:仅有字母数字下划线) @@ -139,14 +127,8 @@ // 基本颜色 text = text.replace(/([A-Za-z _§&;\-\\.]{1,}:)/gim, "§6$1§r"); - text = text.replace( - /INFO/gm, - term.TERM_TEXT_GREEN + "INFO" + term.TERM_NULL - ); - text = text.replace( - /(\d{2,}:\d{2,}:\d{2,})/gm, - term.TERM_TEXT_CYAN + "$1" + term.TERM_NULL - ); + text = text.replace(/INFO/gm, term.TERM_TEXT_GREEN + "INFO" + term.TERM_NULL); + text = text.replace(/(\d{2,}:\d{2,}:\d{2,})/gm, term.TERM_TEXT_CYAN + "$1" + term.TERM_NULL); // Minecraft 原生颜色替代解析 text = text.replace(/§0/gm, term.TERM_TEXT_WHITE); @@ -199,16 +181,7 @@ // 特殊文本替换 var RegExpStringArr = [ //蓝色 - [ - "Unknown command", - "Loading libraries, please wait...", - "Loading", - "Loaded", - "\\d{1,3}%", - "true", - "false", - "plugin.yml", - ], + ["Unknown command", "Loading libraries, please wait...", "Loading", "Loaded", "\\d{1,3}%", "true", "false", "plugin.yml"], //绿色 [ "/help", @@ -229,48 +202,25 @@ "Preparing start region for level", ], //红色 - [ - "WARN", - "EULA", - "Error", - "Invalid", - "Stopping the server", - "Caused by", - "Stopping", - ], + ["WARN", "EULA", "Error", "Invalid", "Stopping the server", "Caused by", "Stopping"], //黄色 - [ - "Starting Minecraft server on", - "world_the_end", - "world_nether", - "Done", - "MCSMANAGER", - ], + ["Starting Minecraft server on", "world_the_end", "world_nether", "Done", "MCSMANAGER"], ]; for (var k in RegExpStringArr) { for (var y in RegExpStringArr[k]) { - var reg = new RegExp( - "(" + RegExpStringArr[k][y].replace(/ /gim, " ") + ")", - "igm" - ); + var reg = new RegExp("(" + RegExpStringArr[k][y].replace(/ /gim, " ") + ")", "igm"); if (k == 0) //蓝色 text = text.replace(reg, term.TERM_TEXT_BLUE + "$1" + term.TERM_NULL); if (k == 1) //绿色 - text = text.replace( - reg, - term.TERM_TEXT_GREEN + "$1" + term.TERM_NULL - ); + text = text.replace(reg, term.TERM_TEXT_GREEN + "$1" + term.TERM_NULL); if (k == 2) //红色 text = text.replace(reg, term.TERM_TEXT_RED + "$1" + term.TERM_NULL); if (k == 3) //黄色 - text = text.replace( - reg, - term.TERM_TEXT_YELLOW + "$1" + term.TERM_NULL - ); + text = text.replace(reg, term.TERM_TEXT_YELLOW + "$1" + term.TERM_NULL); } } // 行结尾符号替换 @@ -281,31 +231,16 @@ //Minecraft 服务器输出基本颜色 TOOLS.encodeConsoleColorForHtml = function (text) { text = text.replace(/\n/gim, "
"); - text = text.replace( - /([A-Za-z _&;-\\.]{1,}:)/gim, - "$1" - ); + text = text.replace(/([A-Za-z _&;-\\.]{1,}:)/gim, "$1"); text = text.replace(/\[/gim, "["); text = text.replace(/\]/gim, "]"); text = text.replace(/INFO/gm, "INFO"); - text = text.replace( - /(\d{2,}:\d{2,}:\d{2,})/gm, - "$1" - ); + text = text.replace(/(\d{2,}:\d{2,}:\d{2,})/gm, "$1"); text = text.replace(/§[0-9A-Za-z]{1}/gim, ""); RegExpStringArr = [ //蓝色 - [ - "Unknown command", - "Loading libraries, please wait...", - "Loading", - "Loaded", - "\\d{1,3}%", - "true", - "false", - "plugin.yml", - ], + ["Unknown command", "Loading libraries, please wait...", "Loading", "Loaded", "\\d{1,3}%", "true", "false", "plugin.yml"], //绿色 [ "/help", @@ -325,32 +260,13 @@ "Preparing start region for level", ], //红色 - [ - "WARN", - "EULA", - "Error", - "Invalid", - "Stopping the server", - "Caused by", - "Stopping", - ], + ["WARN", "EULA", "Error", "Invalid", "Stopping the server", "Caused by", "Stopping"], //黄色 - [ - "Starting Minecraft server on", - "world_the_end", - "world_nether", - "Usage", - "Server thread", - "Done", - "MCSMANAGER", - ], + ["Starting Minecraft server on", "world_the_end", "world_nether", "Usage", "Server thread", "Done", "MCSMANAGER"], ]; for (var k in RegExpStringArr) { for (var y in RegExpStringArr[k]) { - var reg = new RegExp( - "(" + RegExpStringArr[k][y].replace(/ /gim, " ") + ")", - "igm" - ); + var reg = new RegExp("(" + RegExpStringArr[k][y].replace(/ /gim, " ") + ")", "igm"); if (k == 0) //蓝色 text = text.replace(reg, "$1"); @@ -387,9 +303,7 @@ }); popWinContext.load(config.template, function (response, status, xhr) { if (status != "success") { - popWinContext.html( - "信息框加载失败!请保持网络通畅!单击灰色区域关闭!" - ); + popWinContext.html("信息框加载失败!请保持网络通畅!单击灰色区域关闭!"); return; } }); @@ -415,18 +329,9 @@ // 异步大文件上传方案 // $("#m-upload-file")[0].files[0] 参数 进程回调 - TOOLS.fileupload = function ( - file, - url, - args, - progressCallback, - successCallback, - failureCallback - ) { + TOOLS.fileupload = function (file, url, args, progressCallback, successCallback, failureCallback) { if (typeof FormData != "function") { - alert( - "很遗憾,您的浏览器不兼容异步文件上传。请使用现代浏览器!推荐 Chrome!" - ); + alert("很遗憾,您的浏览器不兼容异步文件上传。请使用现代浏览器!推荐 Chrome!"); return null; } console.log(file); @@ -470,11 +375,7 @@ } console.log(parameters); if (parameters["page"]) { - RES.redirectPage( - "./" + parameters["page"] + ".html", - parameters["api"], - parameters["listen"] - ); + RES.redirectPage("./" + parameters["page"] + ".html", parameters["api"], parameters["listen"]); return true; } else { return false; diff --git a/public/common/js/viewmodel.js b/public/common/js/viewmodel.js index af68e840..7557d2e2 100644 --- a/public/common/js/viewmodel.js +++ b/public/common/js/viewmodel.js @@ -143,8 +143,7 @@ "

[ 控制面板 ]: 日志显示过长,为避免网页卡顿,现已自动清空。
[ 控制面板 ]: 若想回看历史日志,请点击右上角刷新按钮,再重新进入点击 [历史] 按钮即可。

"; } eleTerminal.innerHTML = eleTerminal.innerHTML + text; - var BUFF_FONTIER_SIZE_DOWN = - eleTerminal.scrollHeight - eleTerminal.clientHeight; + var BUFF_FONTIER_SIZE_DOWN = eleTerminal.scrollHeight - eleTerminal.clientHeight; flag = eleTerminal.scrollTop + 400 >= BUFF_FONTIER_SIZE_DOWN; if (flag) eleTerminal.scrollTop = eleTerminal.scrollHeight; } @@ -207,18 +206,7 @@ // 终端提示行 term.prompt = function (command) { term.write( - "\x1B[1;1;33m" + - "[" + - term.TERM_TEXT_WHITE + - term.TERM_TEXT_GREEN + - PAGE.serverName + - "@" + - "app" + - term.TERM_TEXT_YELLOW + - "]" + - term.TERM_TEXT_WHITE + - (command || "") + - "\x1B[0m \r\n" + "\x1B[1;1;33m" + "[" + term.TERM_TEXT_WHITE + term.TERM_TEXT_GREEN + PAGE.serverName + "@" + "app" + term.TERM_TEXT_YELLOW + "]" + term.TERM_TEXT_WHITE + (command || "") + "\x1B[0m \r\n" ); }; // 初始化终端方法 @@ -250,8 +238,7 @@ WS.sendMsg("server/console/open", PAGE.serverName); }, toCommand: function (parCommand) { - if (parCommand && typeof parCommand == "string") - this.command = parCommand; + if (parCommand && typeof parCommand == "string") this.command = parCommand; MCSERVER.term.prompt(this.command); console.log("发送命令:", this.command); var data = { diff --git a/public/common/md5.js b/public/common/md5.js index 95288807..4e7ad1db 100644 --- a/public/common/md5.js +++ b/public/common/md5.js @@ -201,8 +201,7 @@ function bit_rol(num, cnt) { function str2binl(str) { var bin = Array(); var mask = (1 << chrsz) - 1; - for (var i = 0; i < str.length * chrsz; i += chrsz) - bin[i >> 5] |= (str.charCodeAt(i / chrsz) & mask) << i % 32; + for (var i = 0; i < str.length * chrsz; i += chrsz) bin[i >> 5] |= (str.charCodeAt(i / chrsz) & mask) << i % 32; return bin; } @@ -212,8 +211,7 @@ function str2binl(str) { function binl2str(bin) { var str = ""; var mask = (1 << chrsz) - 1; - for (var i = 0; i < bin.length * 32; i += chrsz) - str += String.fromCharCode((bin[i >> 5] >>> i % 32) & mask); + for (var i = 0; i < bin.length * 32; i += chrsz) str += String.fromCharCode((bin[i >> 5] >>> i % 32) & mask); return str; } @@ -224,9 +222,7 @@ function binl2hex(binarray) { var hex_tab = hexcase ? "0123456789ABCDEF" : "0123456789abcdef"; var str = ""; for (var i = 0; i < binarray.length * 4; i++) { - str += - hex_tab.charAt((binarray[i >> 2] >> ((i % 4) * 8 + 4)) & 0xf) + - hex_tab.charAt((binarray[i >> 2] >> ((i % 4) * 8)) & 0xf); + str += hex_tab.charAt((binarray[i >> 2] >> ((i % 4) * 8 + 4)) & 0xf) + hex_tab.charAt((binarray[i >> 2] >> ((i % 4) * 8)) & 0xf); } return str; } @@ -238,10 +234,7 @@ function binl2b64(binarray) { var tab = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; var str = ""; for (var i = 0; i < binarray.length * 4; i += 3) { - var triplet = - (((binarray[i >> 2] >> (8 * (i % 4))) & 0xff) << 16) | - (((binarray[(i + 1) >> 2] >> (8 * ((i + 1) % 4))) & 0xff) << 8) | - ((binarray[(i + 2) >> 2] >> (8 * ((i + 2) % 4))) & 0xff); + var triplet = (((binarray[i >> 2] >> (8 * (i % 4))) & 0xff) << 16) | (((binarray[(i + 1) >> 2] >> (8 * ((i + 1) % 4))) & 0xff) << 8) | ((binarray[(i + 2) >> 2] >> (8 * ((i + 2) % 4))) & 0xff); for (var j = 0; j < 4; j++) { if (i * 8 + j * 6 > binarray.length * 32) str += b64pad; else str += tab.charAt((triplet >> (6 * (3 - j))) & 0x3f); diff --git a/public/index.html b/public/index.html index e67d67b8..76e43cdd 100644 --- a/public/index.html +++ b/public/index.html @@ -6,10 +6,7 @@ - + MCSM 管理面板 @@ -24,22 +21,8 @@ @@ -63,25 +46,14 @@ Mcserver Manager
-
- 在线: {{ MCSERVER.username }} -
+
在线: {{ MCSERVER.username }}
offline (离线)
- - + +
@@ -113,30 +85,14 @@
-
+
-
-
+
+
@@ -160,16 +116,7 @@
- + 控制终端
-
+
/ @@ -207,31 +150,19 @@
- + 执行命令
- + 关闭
- + 开启
- + 关闭窗口
@@ -317,17 +248,9 @@ // 初始化终端 //判断是否是#权限用户,请放心,后端也会给予判断并不只是前端 if (MCSERVER.username.substr(0, 1) == "#") { - RES.redirectPage( - "./template/center.html", - "center/show", - "--- 更新页面 ---" - ); + RES.redirectPage("./template/center.html", "center/show", "--- 更新页面 ---"); } else { - RES.redirectPage( - "./template/gen_home.html", - "genuser/home", - "--- 更新页面 ---" - ); + RES.redirectPage("./template/gen_home.html", "genuser/home", "--- 更新页面 ---"); } } }); diff --git a/public/login/index.html b/public/login/index.html index bdb0fc15..fe7fd768 100644 --- a/public/login/index.html +++ b/public/login/index.html @@ -34,38 +34,12 @@

使用您的 MCSM 账户

用户名

- +

密码

- - - - 忘记密码? - - - 需要帮助? - + + + 忘记密码? + 需要帮助?
- - + +
- - + +
-
+
验证
@@ -117,9 +70,7 @@
-
- 默认信息框 -
+
默认信息框
diff --git a/public/login3/index.html b/public/login3/index.html index d339577f..7c48febf 100644 --- a/public/login3/index.html +++ b/public/login3/index.html @@ -6,10 +6,7 @@ - + Mcserver Manager | 身份验证 @@ -18,22 +15,8 @@ @@ -53,33 +36,12 @@

您必须要进行身份识别,才可以进入面板

- - - + + +

忘记密码? - 点击这里 + 点击这里