From 640a874a9619df28fae056b8729487f1b63d4c53 Mon Sep 17 00:00:00 2001 From: si458 Date: Sun, 6 Apr 2025 17:15:12 +0100 Subject: [PATCH 1/8] =?UTF-8?q?fix=20riscv64=20in=20=E2=80=98meshinstall.s?= =?UTF-8?q?h=E2=80=99.sh?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: si458 --- agents/meshinstall-linux.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/agents/meshinstall-linux.sh b/agents/meshinstall-linux.sh index 9967f334..eeb7799d 100644 --- a/agents/meshinstall-linux.sh +++ b/agents/meshinstall-linux.sh @@ -114,7 +114,7 @@ CheckInstallAgent() { # RaspberryPi 3B+ running Ubuntu 64 (aarch64) machineid=26 fi - if [ $marchinetype == 'riscv64' ] + if [ $machinetype == 'riscv64' ] then # RISC-V 64 bit machineid=45 From 08430a5fa7b0227e8c84951cd06226e86f39943a Mon Sep 17 00:00:00 2001 From: si458 Date: Mon, 7 Apr 2025 15:14:53 +0100 Subject: [PATCH 2/8] add missing login events to duo and pushlogin Signed-off-by: si458 --- webserver.js | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/webserver.js b/webserver.js index b154a608..80ae3e98 100644 --- a/webserver.js +++ b/webserver.js @@ -3514,7 +3514,13 @@ module.exports.CreateWebServer = function (parent, db, args, certificates, doneF const twoFactorCookie = obj.parent.encodeCookie({ userid: cookie.u, expire: maxCookieAge * 24 * 60 /*, ip: req.clientIp*/ }, obj.parent.loginCookieEncryptionKey); res.cookie('twofactor', twoFactorCookie, { maxAge: (maxCookieAge * 24 * 60 * 60 * 1000), httpOnly: true, sameSite: parent.config.settings.sessionsamesite, secure: true }); } - + var user = obj.users[cookie.u]; + // Notify account login + var targets = ['*', 'server-users', user._id]; + if (user.groups) { for (var i in user.groups) { targets.push('server-users:' + i); } } + const ua = obj.getUserAgentInfo(req); + const loginEvent = { etype: 'user', userid: user._id, username: user.name, account: obj.CloneSafeUser(user), action: 'login', msgid: 107, msgArgs: [req.clientIp, ua.browserStr, ua.osStr], msg: 'Account login', domain: domain.id, ip: req.clientIp, userAgent: req.headers['user-agent'], twoFactorType: 'pushlogin' }; + obj.parent.DispatchEvent(targets, obj, loginEvent); handleRootRequestEx(req, res, domain); return; } @@ -7067,6 +7073,7 @@ module.exports.CreateWebServer = function (parent, db, args, certificates, doneF // User credentials are stored in session, just check again and get userid obj.authenticate(sec.tuser, sec.tpass, domain, function (err, userid, passhint, loginOptions) { if ((userid != null) && (err == null)) { + var user = obj.users[userid]; // Get user object // Login data correct, now exchange authorization code for 2FA client.exchangeAuthorizationCodeFor2FAResult(req.query.duo_code, userid.split('/')[2]).then(function (data) { const sec = parent.decryptSessionData(req.session.e); @@ -7082,6 +7089,12 @@ module.exports.CreateWebServer = function (parent, db, args, certificates, doneF delete sec.tpass; req.session.e = parent.encryptSessionData(sec); obj.parent.authLog('https', 'Accepted Duo authentication for ' + userid + ' from ' + req.clientIp + ':' + req.connection.remotePort, { useragent: req.headers['user-agent'], sessionid: req.session.x }); + // Notify account login + var targets = ['*', 'server-users', user._id]; + if (user.groups) { for (var i in user.groups) { targets.push('server-users:' + i); } } + const ua = obj.getUserAgentInfo(req); + const loginEvent = { etype: 'user', userid: user._id, username: user.name, account: obj.CloneSafeUser(user), action: 'login', msgid: 107, msgArgs: [req.clientIp, ua.browserStr, ua.osStr], msg: 'Account login', domain: domain.id, ip: req.clientIp, userAgent: req.headers['user-agent'], twoFactorType: 'duo' }; + obj.parent.DispatchEvent(targets, obj, loginEvent); res.redirect(domain.url + getQueryPortion(req)); }).catch(function (err) { const sec = parent.decryptSessionData(req.session.e); @@ -7092,6 +7105,10 @@ module.exports.CreateWebServer = function (parent, db, args, certificates, doneF req.session.e = parent.encryptSessionData(sec); req.session.loginmode = 1; req.session.messageid = 117; // Invalid security check + // Notify account 2fa failed login + const ua = obj.getUserAgentInfo(req); + obj.parent.DispatchEvent(['*', 'server-users', user._id], obj, { action: 'authfail', username: user.name, userid: user._id, domain: domain.id, msg: 'User login attempt with incorrect 2nd factor from ' + req.clientIp, msgid: 108, msgArgs: [req.clientIp, ua.browserStr, ua.osStr] }); + obj.setbad2Fa(req); res.redirect(domain.url + getQueryPortion(req)); }); } else { From 918e889b1af9e742b072e5166b33fb46230b8aef Mon Sep 17 00:00:00 2001 From: si458 Date: Sat, 12 Apr 2025 09:27:50 +0100 Subject: [PATCH 3/8] maybe fix Backuppathtestfile can't be deleted #6965 Signed-off-by: si458 --- db.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/db.js b/db.js index 81ea222c..79387758 100644 --- a/db.js +++ b/db.js @@ -3352,8 +3352,9 @@ module.exports.CreateDB = function (parent, func) { return; } } - const testFile = path.join(backupPath, (parent.config.settings.autobackup.backupname + ".test")); - + const currentDate = new Date(); + const fileSuffix = currentDate.getFullYear() + '-' + padNumber(currentDate.getMonth() + 1, 2) + '-' + padNumber(currentDate.getDate(), 2) + '-' + padNumber(currentDate.getHours(), 2) + '-' + padNumber(currentDate.getMinutes(), 2); + const testFile = path.join(backupPath, parent.config.settings.autobackup.backupname + fileSuffix + '.zip'); try { fs.writeFileSync( testFile, "DeleteMe"); } catch (e) { //Unable to create file From e238aaecc12b9b7963dbb13445551e301c913a59 Mon Sep 17 00:00:00 2001 From: si458 Date: Sat, 12 Apr 2025 09:39:23 +0100 Subject: [PATCH 4/8] dont compress devicefile.ashx to show file sizes Signed-off-by: si458 --- webserver.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/webserver.js b/webserver.js index 80ae3e98..6143353b 100644 --- a/webserver.js +++ b/webserver.js @@ -65,7 +65,12 @@ module.exports.CreateWebServer = function (parent, db, args, certificates, doneF obj.db = db; obj.app = obj.express(); if (obj.args.agentport) { obj.agentapp = obj.express(); } - if (args.compression !== false) { obj.app.use(require('compression')()); } + if (args.compression !== false) { + obj.app.use(require('compression')({ filter: function (req, res) { + if (req.path == '/devicefile.ashx') return false; // Don't compress device file transfers to show file sizes + return require('compression').filter(req, res); + }})); + } obj.app.disable('x-powered-by'); obj.tlsServer = null; obj.tcpServer = null; From 42d02fdb84fb06cda204a84b40ddd5d2dd5d9e77 Mon Sep 17 00:00:00 2001 From: si458 Date: Sat, 12 Apr 2025 09:50:05 +0100 Subject: [PATCH 5/8] add meshgroup to relay groups for clarification #6949 Signed-off-by: si458 --- translate/translate.json | 142 +++++++++++++++++++------------------- views/default.handlebars | 6 +- views/default3.handlebars | 6 +- 3 files changed, 77 insertions(+), 77 deletions(-) diff --git a/translate/translate.json b/translate/translate.json index 9393d6c0..47175d9c 100644 --- a/translate/translate.json +++ b/translate/translate.json @@ -6740,7 +6740,7 @@ "default.handlebars->container->column_l->p12->termTable->1->1->0->1->1", "default.handlebars->container->column_l->p13->p13toolbar->1->0->1->1", "default3.handlebars->35->1016", - "default3.handlebars->container->column_l->p11->deskarea0->1->1->0->deskarea1->3", + "default3.handlebars->container->column_l->p11->deskarea0->deskarea1->3", "default3.handlebars->container->column_l->p12->termTable->1->1->0->1->3", "default3.handlebars->container->column_l->p13->p13toolbar->1->0->1->3" ] @@ -10646,7 +10646,7 @@ "default.handlebars->rfbPortContextMenu->1", "default.handlebars->sshPortContextMenu->1", "default3.handlebars->altPortContextMenu->1", - "default3.handlebars->container->column_l->p11->deskarea0->1->1->0->deskarea1->1->connectbutton1rspan->5->1->0", + "default3.handlebars->container->column_l->p11->deskarea0->deskarea1->1->connectbutton1rspan->5->1->0", "default3.handlebars->container->column_l->p12->termTable->1->1->0->1->1->connectbutton2sspan->5->1->0", "default3.handlebars->container->column_l->p13->p13toolbar->1->0->1->1->p13Connectsspan->5->1->0", "default3.handlebars->httpPortContextMenu->1", @@ -12469,7 +12469,7 @@ "xloc": [ "default.handlebars->deskConnectContextMenu->3", "default.handlebars->filesShellContextMenu->1", - "default3.handlebars->container->column_l->p11->deskarea0->1->1->0->deskarea1->1->connectbutton1span->5->3->0", + "default3.handlebars->container->column_l->p11->deskarea0->deskarea1->1->connectbutton1span->5->3->0", "default3.handlebars->container->column_l->p13->p13toolbar->1->0->1->1->p13Connectspan->5->1->0" ] }, @@ -12500,7 +12500,7 @@ "zh-cht": "詢問同意+工具欄", "xloc": [ "default.handlebars->deskConnectContextMenu->1", - "default3.handlebars->container->column_l->p11->deskarea0->1->1->0->deskarea1->1->connectbutton1span->5->1->0" + "default3.handlebars->container->column_l->p11->deskarea0->deskarea1->1->connectbutton1span->5->1->0" ] }, { @@ -13199,7 +13199,7 @@ "default.handlebars->container->column_l->p11->deskarea0->deskarea1->3", "default.handlebars->container->column_l->p12->termTable->1->1->0->1->3", "default.handlebars->container->column_l->p13->p13toolbar->1->0->1->3", - "default3.handlebars->container->column_l->p11->deskarea0->1->1->0->deskarea1->1", + "default3.handlebars->container->column_l->p11->deskarea0->deskarea1->1", "default3.handlebars->container->column_l->p12->termTable->1->1->0->1->1->autoconnectbutton2", "default3.handlebars->container->column_l->p13->p13toolbar->1->0->1->1->p13AutoConnect", "sharing-mobile.handlebars->container->page_content->column_l->p10->p10files->p13toolbar->1->0->1->3", @@ -16128,7 +16128,7 @@ "zh-cht": "更改遠程機器的電源狀態", "xloc": [ "default.handlebars->container->column_l->p11->deskarea0->deskarea1->1", - "default3.handlebars->container->column_l->p11->deskarea0->1->1->0->deskarea1->3" + "default3.handlebars->container->column_l->p11->deskarea0->deskarea1->3" ] }, { @@ -17979,7 +17979,7 @@ "zh-cht": "剪貼板", "xloc": [ "default.handlebars->container->column_l->p11->deskarea0->deskarea4->5", - "default3.handlebars->container->column_l->p11->deskarea0->1->1->4->deskarea4->1", + "default3.handlebars->container->column_l->p11->deskarea0->deskarea4->1", "sharing.handlebars->p11->deskarea0->deskarea4->3" ] }, @@ -19634,7 +19634,7 @@ "default.handlebars->container->column_l->p13->p13toolbar->1->0->1->3", "default3.handlebars->35->2206", "default3.handlebars->35->983", - "default3.handlebars->container->column_l->p11->deskarea0->1->1->0->deskarea1->1->connectbutton1span->connectbutton1", + "default3.handlebars->container->column_l->p11->deskarea0->deskarea1->1->connectbutton1span->connectbutton1", "default3.handlebars->container->column_l->p12->termTable->1->1->0->1->1->connectbutton2span->connectbutton2", "default3.handlebars->container->column_l->p13->p13toolbar->1->0->1->1->p13Connectspan->p13Connect", "mstsc.handlebars->main->1->3->1->12->1->0", @@ -19879,8 +19879,8 @@ "zh-cht": "使用 MeshAgent 遠程桌面連接", "xloc": [ "default.handlebars->container->column_l->p11->deskarea0->deskarea1->3->connectbutton1span", - "default3.handlebars->container->column_l->p11->deskarea0->1->1->0->deskarea1->1->connectbutton1span", - "default3.handlebars->container->column_l->p11->deskarea0->1->1->0->deskarea1->1->disconnectbutton1span", + "default3.handlebars->container->column_l->p11->deskarea0->deskarea1->1->connectbutton1span", + "default3.handlebars->container->column_l->p11->deskarea0->deskarea1->1->disconnectbutton1span", "default3.handlebars->container->column_l->p12->termTable->1->1->0->1->1->connectbutton2span", "default3.handlebars->container->column_l->p12->termTable->1->1->0->1->1->connectbutton2sspan", "default3.handlebars->container->column_l->p13->p13toolbar->1->0->1->1->p13Connectspan", @@ -19914,7 +19914,7 @@ "zh-cht": "使用 RDP 連接", "xloc": [ "default.handlebars->container->column_l->p11->deskarea0->deskarea1->3->connectbutton1rspan", - "default3.handlebars->container->column_l->p11->deskarea0->1->1->0->deskarea1->1->connectbutton1rspan" + "default3.handlebars->container->column_l->p11->deskarea0->deskarea1->1->connectbutton1rspan" ] }, { @@ -19943,7 +19943,7 @@ "zh-cht": "使用硬件 KVM 連接", "xloc": [ "default.handlebars->container->column_l->p11->deskarea0->deskarea1->3->connectbutton1hspan", - "default3.handlebars->container->column_l->p11->deskarea0->1->1->0->deskarea1->1->connectbutton1hspan" + "default3.handlebars->container->column_l->p11->deskarea0->deskarea1->1->connectbutton1hspan" ] }, { @@ -24543,7 +24543,7 @@ "zh-cht": "桌面會話延遲", "xloc": [ "default.handlebars->container->column_l->p11->deskarea0->deskarea4->1", - "default3.handlebars->container->column_l->p11->deskarea0->1->1->4->deskarea4->3", + "default3.handlebars->container->column_l->p11->deskarea0->deskarea4->3", "sharing.handlebars->p11->deskarea0->deskarea4->1" ] }, @@ -27125,8 +27125,8 @@ "default.handlebars->deskDisconnectContextMenu->3", "default3.handlebars->35->2207", "default3.handlebars->35->984", - "default3.handlebars->container->column_l->p11->deskarea0->1->1->0->deskarea1->1->disconnectbutton1span->5->3->0", - "default3.handlebars->container->column_l->p11->deskarea0->1->1->0->deskarea1->1->disconnectbutton1span->disconnectbutton1", + "default3.handlebars->container->column_l->p11->deskarea0->deskarea1->1->disconnectbutton1span->5->3->0", + "default3.handlebars->container->column_l->p11->deskarea0->deskarea1->1->disconnectbutton1span->disconnectbutton1", "default3.handlebars->container->column_l->p12->termTable->1->1->0->1->1->disconnectbutton2span->disconnectbutton2", "default3.handlebars->container->column_l->p13->p13toolbar->1->0->1->1->p13Disconnect", "sharing-mobile.handlebars->11->62", @@ -27196,7 +27196,7 @@ "zh-cht": "斷開連接並鎖定", "xloc": [ "default.handlebars->deskDisconnectContextMenu->1", - "default3.handlebars->container->column_l->p11->deskarea0->1->1->0->deskarea1->1->disconnectbutton1span->5->1->0" + "default3.handlebars->container->column_l->p11->deskarea0->deskarea1->1->disconnectbutton1span->5->1->0" ] }, { @@ -27314,7 +27314,7 @@ "default3.handlebars->35->446", "default3.handlebars->35->486", "default3.handlebars->35->8", - "default3.handlebars->container->column_l->p11->deskarea0->1->1->0->deskarea1->1->deskstatus", + "default3.handlebars->container->column_l->p11->deskarea0->deskarea1->1->deskstatus", "default3.handlebars->container->column_l->p12->termTable->1->1->0->1->1->termstatus", "default3.handlebars->container->column_l->p13->p13toolbar->1->0->1->1->p13Status", "sharing-mobile.handlebars->11->1", @@ -27493,7 +27493,7 @@ "zh-cht": "在遠程電腦上顯示通知", "xloc": [ "default.handlebars->container->column_l->p11->deskarea0->deskarea4->1", - "default3.handlebars->container->column_l->p11->deskarea0->1->1->4->deskarea4->3" + "default3.handlebars->container->column_l->p11->deskarea0->deskarea4->3" ] }, { @@ -28560,7 +28560,7 @@ "zh-cht": "將遠程剪貼板下載到本地剪貼板", "xloc": [ "default.handlebars->container->column_l->p11->deskarea0->deskarea4->1", - "default3.handlebars->container->column_l->p11->deskarea0->1->1->4->deskarea4->3" + "default3.handlebars->container->column_l->p11->deskarea0->deskarea4->3" ] }, { @@ -29572,7 +29572,7 @@ "default-mobile.handlebars->container->page_content->column_l->p10->p10terminal->termTable->termarea4->1->3", "default.handlebars->container->column_l->p11->deskarea0->deskarea4->5", "default.handlebars->container->column_l->p12->termTable->1->1->4->1->3", - "default3.handlebars->container->column_l->p11->deskarea0->1->1->4->deskarea4->1", + "default3.handlebars->container->column_l->p11->deskarea0->deskarea4->1", "default3.handlebars->container->column_l->p12->termTable->1->1->4->1->1", "sharing.handlebars->p12->9->3" ] @@ -30284,7 +30284,7 @@ "zh-cht": "編輯遠程桌面設置", "xloc": [ "default.handlebars->container->column_l->p11->deskarea0->deskarea1->1", - "default3.handlebars->container->column_l->p11->deskarea0->1->1->0->deskarea1->3", + "default3.handlebars->container->column_l->p11->deskarea0->deskarea1->3", "sharing.handlebars->p11->deskarea0->deskarea1->1" ] }, @@ -34834,7 +34834,7 @@ "zh-cht": "全部關注", "xloc": [ "default.handlebars->container->column_l->p11->deskarea0->deskarea1->1", - "default3.handlebars->container->column_l->p11->deskarea0->1->1->0->deskarea1->3" + "default3.handlebars->container->column_l->p11->deskarea0->deskarea1->3" ] }, { @@ -36017,7 +36017,7 @@ "default.handlebars->container->column_l->p11->p11title->p11deviceNameHeader->devListToolbarViewIcons", "default.handlebars->container->column_l->p12->p12title->devListToolbarViewIcons2", "default.handlebars->container->column_l->p14->p14title->devListToolbarViewIcons", - "default3.handlebars->container->column_l->p11->p11title->devListToolbarViewIcons11", + "default3.handlebars->container->column_l->p11->p11title->devListToolbarViewIcons", "default3.handlebars->container->column_l->p12->p12title->devListToolbarViewIcons2", "default3.handlebars->container->column_l->p14->p14title->devListToolbarViewIcons" ] @@ -38196,7 +38196,7 @@ "default-mobile.handlebars->container->page_content->column_l->p10->p10desktop->deskarea1->1->3", "default.handlebars->container->column_l->p11->deskarea0->deskarea1->3->connectbutton1hspan", "default.handlebars->container->column_l->p12->termTable->1->1->0->1->3->connectbutton2hspan", - "default3.handlebars->container->column_l->p11->deskarea0->1->1->0->deskarea1->1->connectbutton1hspan->connectbutton1h", + "default3.handlebars->container->column_l->p11->deskarea0->deskarea1->1->connectbutton1hspan->connectbutton1h", "default3.handlebars->container->column_l->p12->termTable->1->1->0->1->1->connectbutton2hspan->connectbutton2h", "sharing-mobile.handlebars->container->page_content->column_l->p10->p10desktop->deskarea1->1->3", "sharing.handlebars->p11->deskarea0->deskarea1->3->connectbutton1hspan" @@ -40872,7 +40872,7 @@ "xloc": [ "default-mobile.handlebars->container->page_content->column_l->p10->p10desktop->deskarea4->1->3->11->DeskControlSpan", "default.handlebars->container->column_l->p11->deskarea0->deskarea4->5->11->DeskControlSpan", - "default3.handlebars->container->column_l->p11->deskarea0->1->1->4->deskarea4->1->DeskControlSpan->1", + "default3.handlebars->container->column_l->p11->deskarea0->deskarea4->1->DeskControlSpan->1", "sharing-mobile.handlebars->container->page_content->column_l->p10->p10desktop->deskarea4->1->3->5->DeskControlSpan", "sharing.handlebars->p11->deskarea0->deskarea4->3->9->DeskControlSpan" ] @@ -49099,7 +49099,7 @@ "zh-cht": "鎖定遠程計算機", "xloc": [ "default.handlebars->container->column_l->p11->deskarea0->deskarea4->1", - "default3.handlebars->container->column_l->p11->deskarea0->1->1->4->deskarea4->3" + "default3.handlebars->container->column_l->p11->deskarea0->deskarea4->3" ] }, { @@ -54752,8 +54752,8 @@ "default3.handlebars->35->2932", "default3.handlebars->35->341", "default3.handlebars->35->892", - "default3.handlebars->container->column_l->p11->deskarea0->1->1->2->deskarea3x->DeskTools->deskToolsArea->DeskToolsProcessTab->deskToolsHeader->3", - "default3.handlebars->container->column_l->p11->deskarea0->1->1->2->deskarea3x->DeskTools->deskToolsArea->DeskToolsServiceTab->deskToolsServiceHeader->3", + "default3.handlebars->container->column_l->p11->deskarea0->deskarea3x->DeskTools->deskToolsArea->DeskToolsProcessTab->deskToolsHeader->3", + "default3.handlebars->container->column_l->p11->deskarea0->deskarea3x->DeskTools->deskToolsArea->DeskToolsServiceTab->deskToolsServiceHeader->3", "default3.handlebars->container->column_l->p42->p42tbl->1->0->5" ] }, @@ -59696,7 +59696,7 @@ "zh-cht": "在遠程電腦上打開一個網址", "xloc": [ "default.handlebars->container->column_l->p11->deskarea0->deskarea4->1", - "default3.handlebars->container->column_l->p11->deskarea0->1->1->4->deskarea4->3" + "default3.handlebars->container->column_l->p11->deskarea0->deskarea4->3" ] }, { @@ -59728,7 +59728,7 @@ "default.handlebars->47->1030", "default.handlebars->container->column_l->p11->deskarea0->deskarea4->1", "default3.handlebars->35->1027", - "default3.handlebars->container->column_l->p11->deskarea0->1->1->4->deskarea4->3" + "default3.handlebars->container->column_l->p11->deskarea0->deskarea4->3" ] }, { @@ -60391,7 +60391,7 @@ "default.handlebars->47->1470", "default.handlebars->container->column_l->p11->deskarea0->deskarea3x->DeskTools->deskToolsArea->DeskToolsProcessTab->deskToolsHeader->1", "default3.handlebars->35->1456", - "default3.handlebars->container->column_l->p11->deskarea0->1->1->2->deskarea3x->DeskTools->deskToolsArea->DeskToolsProcessTab->deskToolsHeader->1" + "default3.handlebars->container->column_l->p11->deskarea0->deskarea3x->DeskTools->deskToolsArea->DeskToolsProcessTab->deskToolsHeader->1" ] }, { @@ -61867,7 +61867,7 @@ "default.handlebars->container->column_l->p12->termTable->1->1->0->1->1", "default.handlebars->container->column_l->p13->p13toolbar->1->0->1->1", "default3.handlebars->35->1017", - "default3.handlebars->container->column_l->p11->deskarea0->1->1->0->deskarea1->3", + "default3.handlebars->container->column_l->p11->deskarea0->deskarea1->3", "default3.handlebars->container->column_l->p12->termTable->1->1->0->1->3", "default3.handlebars->container->column_l->p13->p13toolbar->1->0->1->3" ] @@ -63070,7 +63070,7 @@ "xloc": [ "default-mobile.handlebars->container->page_content->column_l->p10->p10desktop->deskarea4->1->3", "default.handlebars->container->column_l->p11->deskarea0->deskarea1->1", - "default3.handlebars->container->column_l->p11->deskarea0->1->1->0->deskarea1->3" + "default3.handlebars->container->column_l->p11->deskarea0->deskarea1->3" ] }, { @@ -63647,7 +63647,7 @@ "zh-cht": "隱私欄", "xloc": [ "default.handlebars->deskConnectContextMenu->5", - "default3.handlebars->container->column_l->p11->deskarea0->1->1->0->deskarea1->1->connectbutton1span->5->5->0" + "default3.handlebars->container->column_l->p11->deskarea0->deskarea1->1->connectbutton1span->5->5->0" ] }, { @@ -63883,7 +63883,7 @@ "zh-cht": "進程", "xloc": [ "default.handlebars->container->column_l->p11->deskarea0->deskarea3x->DeskTools->deskToolsAreaTop->deskToolsTopTabProcess", - "default3.handlebars->container->column_l->p11->deskarea0->1->1->2->deskarea3x->DeskTools->deskToolsAreaTop->deskToolsTopTabProcess" + "default3.handlebars->container->column_l->p11->deskarea0->deskarea3x->DeskTools->deskToolsAreaTop->deskToolsTopTabProcess" ] }, { @@ -64698,7 +64698,7 @@ "zh-cht": "RDP 連接", "xloc": [ "default.handlebars->container->column_l->p11->deskarea0->deskarea1->3->connectbutton1rspan", - "default3.handlebars->container->column_l->p11->deskarea0->1->1->0->deskarea1->1->connectbutton1rspan->connectbutton1r" + "default3.handlebars->container->column_l->p11->deskarea0->deskarea1->1->connectbutton1rspan->connectbutton1r" ] }, { @@ -65346,7 +65346,7 @@ "zh-cht": "將遠程桌面會話記錄到檔案", "xloc": [ "default.handlebars->container->column_l->p11->deskarea0->deskarea4->1", - "default3.handlebars->container->column_l->p11->deskarea0->1->1->4->deskarea4->3" + "default3.handlebars->container->column_l->p11->deskarea0->deskarea4->3" ] }, { @@ -65706,7 +65706,7 @@ "default.handlebars->container->column_l->p40->3->3", "default.handlebars->container->column_l->p52->3->1->0->3->3", "default3.handlebars->35->872", - "default3.handlebars->container->column_l->p11->deskarea0->1->1->2->deskarea3x->DeskTools->deskToolsAreaTop->DeskToolsRefreshButton", + "default3.handlebars->container->column_l->p11->deskarea0->deskarea3x->DeskTools->deskToolsAreaTop->DeskToolsRefreshButton", "default3.handlebars->container->column_l->p13->p13toolbar->1->2->1->3", "default3.handlebars->container->column_l->p40->3->1", "default3.handlebars->container->column_l->p52->3->1->0->1->1", @@ -65771,7 +65771,7 @@ "zh-cht": "刷新桌面", "xloc": [ "default.handlebars->container->column_l->p11->deskarea0->deskarea4->1", - "default3.handlebars->container->column_l->p11->deskarea0->1->1->4->deskarea4->3" + "default3.handlebars->container->column_l->p11->deskarea0->deskarea4->3" ] }, { @@ -67477,7 +67477,7 @@ "zh-cht": "遠程輸入被鎖定", "xloc": [ "default.handlebars->container->column_l->p11->deskarea0->deskarea4->1", - "default3.handlebars->container->column_l->p11->deskarea0->1->1->4->deskarea4->3" + "default3.handlebars->container->column_l->p11->deskarea0->deskarea4->3" ] }, { @@ -67507,7 +67507,7 @@ "zh-cht": "遠程輸入已解鎖", "xloc": [ "default.handlebars->container->column_l->p11->deskarea0->deskarea4->1", - "default3.handlebars->container->column_l->p11->deskarea0->1->1->4->deskarea4->3" + "default3.handlebars->container->column_l->p11->deskarea0->deskarea4->3" ] }, { @@ -70210,7 +70210,7 @@ "zh-cht": "向左旋轉", "xloc": [ "default.handlebars->container->column_l->p11->deskarea0->deskarea1->1", - "default3.handlebars->container->column_l->p11->deskarea0->1->1->0->deskarea1->3", + "default3.handlebars->container->column_l->p11->deskarea0->deskarea1->3", "sharing.handlebars->p11->deskarea0->deskarea1->1" ] }, @@ -70241,7 +70241,7 @@ "zh-cht": "向右旋轉", "xloc": [ "default.handlebars->container->column_l->p11->deskarea0->deskarea1->1", - "default3.handlebars->container->column_l->p11->deskarea0->1->1->0->deskarea1->3", + "default3.handlebars->container->column_l->p11->deskarea0->deskarea1->3", "sharing.handlebars->p11->deskarea0->deskarea1->1" ] }, @@ -70437,7 +70437,7 @@ "uk": "Запустити сценарій на цьому комп'ютері", "xloc": [ "default.handlebars->container->column_l->p11->deskarea0->deskarea4->1", - "default3.handlebars->container->column_l->p11->deskarea0->1->1->4->deskarea4->3" + "default3.handlebars->container->column_l->p11->deskarea0->deskarea4->3" ] }, { @@ -71967,7 +71967,7 @@ "zh-cht": "保存遠程桌面的屏幕截圖", "xloc": [ "default.handlebars->container->column_l->p11->deskarea0->deskarea4->1", - "default3.handlebars->container->column_l->p11->deskarea0->1->1->4->deskarea4->3", + "default3.handlebars->container->column_l->p11->deskarea0->deskarea4->3", "sharing.handlebars->p11->deskarea0->deskarea4->1" ] }, @@ -73236,7 +73236,7 @@ "xloc": [ "default.handlebars->container->column_l->p11->deskarea0->deskarea4->5", "default.handlebars->container->column_l->p12->termTable->1->1->4->1->1->specialKeyDropDown", - "default3.handlebars->container->column_l->p11->deskarea0->1->1->4->deskarea4->1", + "default3.handlebars->container->column_l->p11->deskarea0->deskarea4->1", "default3.handlebars->container->column_l->p12->termTable->1->1->4->1->3", "messenger.handlebars->xbottom->1->1->0->3", "sharing.handlebars->p11->deskarea0->deskarea4->3", @@ -74834,7 +74834,7 @@ "default.handlebars->container->column_l->p11->deskarea0->deskarea1->1", "default.handlebars->container->column_l->p12->termTable->1->1->0->1->1", "default.handlebars->container->column_l->p13->p13toolbar->1->0->1->1", - "default3.handlebars->container->column_l->p11->deskarea0->1->1->0->deskarea1->3", + "default3.handlebars->container->column_l->p11->deskarea0->deskarea1->3", "default3.handlebars->container->column_l->p12->termTable->1->1->0->1->3", "default3.handlebars->container->column_l->p13->p13toolbar->1->0->1->3", "messenger.handlebars->xtop->3", @@ -75054,7 +75054,7 @@ "zh-cht": "服務", "xloc": [ "default.handlebars->container->column_l->p11->deskarea0->deskarea3x->DeskTools->deskToolsAreaTop->deskToolsTopTabService", - "default3.handlebars->container->column_l->p11->deskarea0->1->1->2->deskarea3x->DeskTools->deskToolsAreaTop->deskToolsTopTabService" + "default3.handlebars->container->column_l->p11->deskarea0->deskarea3x->DeskTools->deskToolsAreaTop->deskToolsTopTabService" ] }, { @@ -75245,7 +75245,7 @@ "xloc": [ "default.handlebars->container->column_l->p11->deskarea0->deskarea4->1", "default.handlebars->container->column_l->p12->termTable->1->1->4->1->1", - "default3.handlebars->container->column_l->p11->deskarea0->1->1->4->deskarea4->3", + "default3.handlebars->container->column_l->p11->deskarea0->deskarea4->3", "default3.handlebars->container->column_l->p12->termTable->1->1->4->1->3", "sharing.handlebars->p11->deskarea0->deskarea4->1", "sharing.handlebars->p12->9->1" @@ -75552,7 +75552,7 @@ "default-mobile.handlebars->container->page_content->column_l->p10->p10desktop->deskarea4->1->3", "default.handlebars->container->column_l->p1->devListToolbarSpan->1->0->kvmListToolbar", "default3.handlebars->container->column_l->p1->devListToolbarSpan->kvmListToolbar", - "default3.handlebars->container->column_l->p11->deskarea0->1->1->0->deskarea1->3", + "default3.handlebars->container->column_l->p11->deskarea0->deskarea1->3", "default3.handlebars->container->column_l->p4->3->1->0->1->3", "sharing-mobile.handlebars->container->page_content->column_l->p10->p10desktop->deskarea4->1->3" ] @@ -75891,7 +75891,7 @@ "zh-cht": "與訪客共享設備", "xloc": [ "default.handlebars->container->column_l->p11->deskarea0->deskarea4->1", - "default3.handlebars->container->column_l->p11->deskarea0->1->1->4->deskarea4->3" + "default3.handlebars->container->column_l->p11->deskarea0->deskarea4->3" ] }, { @@ -78210,8 +78210,8 @@ "default.handlebars->container->column_l->p11->deskarea0->deskarea3x->DeskTools->deskToolsArea->DeskToolsServiceTab->deskToolsServiceHeader", "default.handlebars->container->column_l->p13->p13toolbar->1->4->1->1->p13sortdropdown->1", "default.handlebars->container->column_l->p5->p5toolbar->1->2->p5filesubhead->1->p5sortdropdown->1", - "default3.handlebars->container->column_l->p11->deskarea0->1->1->2->deskarea3x->DeskTools->deskToolsArea->DeskToolsProcessTab->deskToolsHeader", - "default3.handlebars->container->column_l->p11->deskarea0->1->1->2->deskarea3x->DeskTools->deskToolsArea->DeskToolsServiceTab->deskToolsServiceHeader", + "default3.handlebars->container->column_l->p11->deskarea0->deskarea3x->DeskTools->deskToolsArea->DeskToolsProcessTab->deskToolsHeader", + "default3.handlebars->container->column_l->p11->deskarea0->deskarea3x->DeskTools->deskToolsArea->DeskToolsServiceTab->deskToolsServiceHeader", "default3.handlebars->container->column_l->p13->p13toolbar->1->4->1->1->p13sortdropdown->1", "default3.handlebars->container->column_l->p5->p5toolbar->1->2->p5filesubhead->3->p5sortdropdown->1", "sharing-mobile.handlebars->container->page_content->column_l->p10->p10files->p13toolbar->1->4->1->1->1->0->3->p13sortdropdown->1", @@ -78245,7 +78245,7 @@ "zh-cht": "按進程ID排序", "xloc": [ "default.handlebars->container->column_l->p11->deskarea0->deskarea3x->DeskTools->deskToolsArea->DeskToolsProcessTab->deskToolsHeader", - "default3.handlebars->container->column_l->p11->deskarea0->1->1->2->deskarea3x->DeskTools->deskToolsArea->DeskToolsProcessTab->deskToolsHeader" + "default3.handlebars->container->column_l->p11->deskarea0->deskarea3x->DeskTools->deskToolsArea->DeskToolsProcessTab->deskToolsHeader" ] }, { @@ -78311,7 +78311,7 @@ "zh-cht": "按狀態排序", "xloc": [ "default.handlebars->container->column_l->p11->deskarea0->deskarea3x->DeskTools->deskToolsArea->DeskToolsServiceTab->deskToolsServiceHeader", - "default3.handlebars->container->column_l->p11->deskarea0->1->1->2->deskarea3x->DeskTools->deskToolsArea->DeskToolsServiceTab->deskToolsServiceHeader" + "default3.handlebars->container->column_l->p11->deskarea0->deskarea3x->DeskTools->deskToolsArea->DeskToolsServiceTab->deskToolsServiceHeader" ] }, { @@ -79840,7 +79840,7 @@ "default.handlebars->47->1469", "default.handlebars->container->column_l->p11->deskarea0->deskarea3x->DeskTools->deskToolsArea->DeskToolsServiceTab->deskToolsServiceHeader->1", "default3.handlebars->35->1455", - "default3.handlebars->container->column_l->p11->deskarea0->1->1->2->deskarea3x->DeskTools->deskToolsArea->DeskToolsServiceTab->deskToolsServiceHeader->1" + "default3.handlebars->container->column_l->p11->deskarea0->deskarea3x->DeskTools->deskToolsArea->DeskToolsServiceTab->deskToolsServiceHeader->1" ] }, { @@ -83833,9 +83833,9 @@ { "en": "Toggle Dropdown", "xloc": [ - "default3.handlebars->container->column_l->p11->deskarea0->1->1->0->deskarea1->1->connectbutton1rspan->connectbutton1rd->0", - "default3.handlebars->container->column_l->p11->deskarea0->1->1->0->deskarea1->1->connectbutton1span->connectbutton1d->1", - "default3.handlebars->container->column_l->p11->deskarea0->1->1->0->deskarea1->1->disconnectbutton1span->diconnectbutton1d->1", + "default3.handlebars->container->column_l->p11->deskarea0->deskarea1->1->connectbutton1rspan->connectbutton1rd->0", + "default3.handlebars->container->column_l->p11->deskarea0->deskarea1->1->connectbutton1span->connectbutton1d->1", + "default3.handlebars->container->column_l->p11->deskarea0->deskarea1->1->disconnectbutton1span->diconnectbutton1d->1", "default3.handlebars->container->column_l->p12->termTable->1->1->0->1->1->connectbutton2span->connectbutton2d->0", "default3.handlebars->container->column_l->p12->termTable->1->1->0->1->1->connectbutton2sspan->connectbutton2sd->0", "default3.handlebars->container->column_l->p13->p13toolbar->1->0->1->1->p13Connectspan->p13Connectdrop->0", @@ -83937,7 +83937,7 @@ "zh-cht": "切換查看模式", "xloc": [ "default.handlebars->container->column_l->p11->deskarea0->deskarea1->1", - "default3.handlebars->container->column_l->p11->deskarea0->1->1->0->deskarea1->3", + "default3.handlebars->container->column_l->p11->deskarea0->deskarea1->3", "player.handlebars->p11->deskarea0->deskarea1->1", "sharing.handlebars->p11->deskarea0->deskarea1->1" ] @@ -83999,7 +83999,7 @@ "zh-cht": "切換焦點模式,現用中僅更新鼠標周圍的區域", "xloc": [ "default.handlebars->container->column_l->p11->deskarea0->deskarea1->1", - "default3.handlebars->container->column_l->p11->deskarea0->1->1->0->deskarea1->3" + "default3.handlebars->container->column_l->p11->deskarea0->deskarea1->3" ] }, { @@ -84059,7 +84059,7 @@ "zh-cht": "切換鼠標和鍵盤輸入", "xloc": [ "default.handlebars->container->column_l->p11->deskarea0->deskarea4->5->11", - "default3.handlebars->container->column_l->p11->deskarea0->1->1->4->deskarea4->1", + "default3.handlebars->container->column_l->p11->deskarea0->deskarea4->1", "sharing.handlebars->p11->deskarea0->deskarea4->3->9" ] }, @@ -84125,7 +84125,7 @@ "zh-cht": "切換遠程桌面背景", "xloc": [ "default.handlebars->container->column_l->p11->deskarea0->deskarea4->1", - "default3.handlebars->container->column_l->p11->deskarea0->1->1->4->deskarea4->3" + "default3.handlebars->container->column_l->p11->deskarea0->deskarea4->3" ] }, { @@ -84212,7 +84212,7 @@ "zh-cht": "切換工具視圖", "xloc": [ "default.handlebars->container->column_l->p11->deskarea0->deskarea4->1", - "default3.handlebars->container->column_l->p11->deskarea0->1->1->4->deskarea4->3" + "default3.handlebars->container->column_l->p11->deskarea0->deskarea4->3" ] }, { @@ -84392,7 +84392,7 @@ "zh-cht": "工具", "xloc": [ "default.handlebars->container->column_l->p11->deskarea0->deskarea4->1", - "default3.handlebars->container->column_l->p11->deskarea0->1->1->4->deskarea4->3" + "default3.handlebars->container->column_l->p11->deskarea0->deskarea4->3" ] }, { @@ -85134,7 +85134,7 @@ "default3.handlebars->35->2276", "default3.handlebars->35->3158", "default3.handlebars->35->506", - "default3.handlebars->container->column_l->p11->deskarea0->1->1->4->deskarea4->1", + "default3.handlebars->container->column_l->p11->deskarea0->deskarea4->1", "sharing.handlebars->p11->deskarea0->deskarea4->3" ] }, @@ -87286,7 +87286,7 @@ "zh-cht": "將本地剪貼板上傳到遠程裝置", "xloc": [ "default.handlebars->container->column_l->p11->deskarea0->deskarea4->1", - "default3.handlebars->container->column_l->p11->deskarea0->1->1->4->deskarea4->3" + "default3.handlebars->container->column_l->p11->deskarea0->deskarea4->3" ] }, { @@ -99589,7 +99589,7 @@ "ru": "⇲", "xloc": [ "default.handlebars->container->column_l->p11->deskarea0->deskarea1->1->5", - "default3.handlebars->container->column_l->p11->deskarea0->1->1->0->deskarea1->3->19", + "default3.handlebars->container->column_l->p11->deskarea0->deskarea1->3->19", "player.handlebars->p11->deskarea0->deskarea1->1->1", "sharing.handlebars->p11->deskarea0->deskarea1->1->3" ] @@ -99741,7 +99741,7 @@ "default.handlebars->container->column_l->p6->p6info->p2ServerActions->3->p2ServerActionsGoogleBackup->0->p2ServerActionsGoogleBackupCheck->0", "default.handlebars->container->column_l->p6->p6info->p2ServerActions->3->p2ServerActionsRestore->0->0->0", "default.handlebars->container->column_l->p6->p6info->p2ServerActions->3->p2ServerActionsVersion->0->0->0", - "default3.handlebars->container->column_l->p11->deskarea0->1->1->2->deskarea3x->p11bigok->0", + "default3.handlebars->container->column_l->p11->deskarea0->deskarea3x->p11bigok->0", "default3.handlebars->container->column_l->p13->p13filetable->p13bigok->0", "default3.handlebars->container->column_l->p2->p2info->p2AccountSecurity->3->manageAuthApp->1->authAppSetupCheck->0", "default3.handlebars->container->column_l->p2->p2info->p2AccountSecurity->3->manageDuoApp->1->authDuoSetupCheck->0", @@ -99785,7 +99785,7 @@ "default.handlebars->container->column_l->p11->deskarea0->deskarea1->1->idx_deskFullBtn2", "default.handlebars->container->column_l->p12->termTable->1->1->0->1->1->idx_termFullBtn2", "default.handlebars->container->dialog->dialogHeader->id_dialogclose", - "default3.handlebars->container->column_l->p11->deskarea0->1->1->0->deskarea1->3->idx_deskFullBtn2", + "default3.handlebars->container->column_l->p11->deskarea0->deskarea1->3->idx_deskFullBtn2", "default3.handlebars->container->column_l->p12->termTable->1->1->0->1->3->idx_termFullBtn2", "player.handlebars->p11->dialog->dialogHeader->id_dialogclose", "sharing.handlebars->dialog->dialogHeader->id_dialogclose", @@ -99815,7 +99815,7 @@ "default.handlebars->container->column_l->p11->deskarea0->deskarea3x->p11bigfail->0", "default.handlebars->container->column_l->p13->p13filetable->p13bigfail->0", "default.handlebars->container->column_l->p5->p5filetable->bigfail->0", - "default3.handlebars->container->column_l->p11->deskarea0->1->1->2->deskarea3x->p11bigfail->0", + "default3.handlebars->container->column_l->p11->deskarea0->deskarea3x->p11bigfail->0", "default3.handlebars->container->column_l->p13->p13filetable->p13bigfail->0", "default3.handlebars->container->column_l->p5->p5filetable->bigfail->0", "player.handlebars->p11->deskarea0->deskarea3x->bigfail->0", diff --git a/views/default.handlebars b/views/default.handlebars index bb622859..bdecac2a 100644 --- a/views/default.handlebars +++ b/views/default.handlebars @@ -13280,7 +13280,7 @@ x += ''; } @@ -13559,7 +13559,7 @@ if (((currentMesh.mtype == 3) || (currentMesh.mtype == 4)) && (currentMesh.relayid != null)) { var relayName = '' + "Unknown" + ''; var relayNode = getNodeFromId(currentMesh.relayid); - if (relayNode != null) { relayName = EscapeHtml(relayNode.name); } + if (relayNode != null) { relayName = EscapeHtml(relayNode.name) + ' (' + EscapeHtml(relayNode.meshnamel) + ')'; } x += addHtmlValue("Relay Device", addLinkConditional(relayName, 'p20editmeshrelay()', (meshrights & 1) != 0)); } @@ -13976,7 +13976,7 @@ setDialogMode(2, "Edit Device Group", 1, null, "No relay devices available."); } else { var relayDevices2 = []; - for (var i in relayDevices) { relayDevices2.push(''); } + for (var i in relayDevices) { relayDevices2.push(''); } var x = addHtmlValue("Relay Device", '
'); setDialogMode(2, "Edit Device Group", 3, p20editmeshrelayEx, x); } diff --git a/views/default3.handlebars b/views/default3.handlebars index 693175c6..3f0a0fd9 100644 --- a/views/default3.handlebars +++ b/views/default3.handlebars @@ -14287,7 +14287,7 @@ x += ''; } @@ -14601,7 +14601,7 @@ if (((currentMesh.mtype == 3) || (currentMesh.mtype == 4)) && (currentMesh.relayid != null)) { var relayName = '' + "Unknown" + ''; var relayNode = getNodeFromId(currentMesh.relayid); - if (relayNode != null) { relayName = EscapeHtml(relayNode.name); } + if (relayNode != null) { relayName = EscapeHtml(relayNode.name) + ' (' + EscapeHtml(relayNode.meshnamel) + ')'; } x += addHtmlValue("Relay Device", addLinkConditional(relayName, 'p20editmeshrelay()', (meshrights & 1) != 0)); } @@ -15037,7 +15037,7 @@ showModal('xxAddAgentModal', 'idx_dlgOkButton'); } else { var relayDevices2 = []; - for (var i in relayDevices) { relayDevices2.push(''); } + for (var i in relayDevices) { relayDevices2.push(''); } var x = addHtmlFormFloating("Relay Device", ''); setModalContent('xxAddAgent', "Edit Device Group", x); showModal('xxAddAgentModal', 'idx_dlgOkButton', p20editmeshrelayEx); From c202339b67cb579f942cd2d8fa50f586fff4468a Mon Sep 17 00:00:00 2001 From: PTR <47147771+PTR-inc@users.noreply.github.com> Date: Sat, 12 Apr 2025 11:00:32 +0200 Subject: [PATCH 6/8] Add mongodump args option (#6921) * Add mongodump args option * Put mongodumpargs in proper place --- db.js | 7 +++++-- meshcentral-config-schema.json | 4 ++++ 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/db.js b/db.js index 79387758..39309c94 100644 --- a/db.js +++ b/db.js @@ -3323,7 +3323,10 @@ module.exports.CreateDB = function (parent, func) { var cmd = '"' + mongoDumpPath + '"'; if (dburl) { cmd = '\"' + mongoDumpPath + '\" --uri=\"' + dburl + '\"'; } - + if (parent.config.settings.autobackup?.mongodumpargs) { + cmd = '\"' + mongoDumpPath + '\" ' + parent.config.settings.autobackup.mongodumpargs; + if (!parent.config.settings.autobackup.mongodumpargs.includes("--db=")) {cmd += ' --db=' + (parent.config.settings.mongodbname ? parent.config.settings.mongodbname : 'meshcentral')}; + } return cmd; } @@ -3378,7 +3381,7 @@ module.exports.CreateDB = function (parent, func) { const child_process = require('child_process'); child_process.exec(cmd, { cwd: backupPath }, function (error, stdout, stderr) { if ((error != null) && (error != '')) { - func(1, "Unable to find mongodump tool, backup will not be performed. Command tried: " + cmd); + func(1, "Mongodump error, backup will not be performed. Command tried: " + cmd + ' --> ERROR: ' + stderr); return; } else {parent.config.settings.autobackup.backupintervalhours = backupInterval;} }); diff --git a/meshcentral-config-schema.json b/meshcentral-config-schema.json index f53bccbb..9e7daffd 100644 --- a/meshcentral-config-schema.json +++ b/meshcentral-config-schema.json @@ -886,6 +886,10 @@ "default": "mongodump", "description": "The file path of where \"mongodump\" is located. Default is \"mongodump\"" }, + "mongoDumpArgs": { + "type": "string", + "description": "Override the default mongodump --uri=. The --db= option is automatically appended if omitted. (f.e. --host=127.0.0.1 --username=someUser --password=PaSsWORD --authenticationDatabase=admin)" + }, "mysqlDumpPath": { "type": "string", "default": "mysqldump", From 5f68458cc5218e536e822c679ee35a02f98887c4 Mon Sep 17 00:00:00 2001 From: Daniel Hammerschmidt Date: Sat, 12 Apr 2025 11:14:37 +0200 Subject: [PATCH 7/8] Add flags to meshes to prefer agentname when synced and to override synced name temporarily (#6809) * Add flags to meshes to prefer agentname when synced and to override synced name temporarily * automatically enable sub-options * change caption * apply changes to bootstrap UI --- meshagent.js | 7 ++++++- views/default.handlebars | 22 ++++++++++++++++++++-- views/default3.handlebars | 20 +++++++++++++++++++- 3 files changed, 45 insertions(+), 4 deletions(-) diff --git a/meshagent.js b/meshagent.js index 7169b9ff..5ea181d9 100644 --- a/meshagent.js +++ b/meshagent.js @@ -807,7 +807,12 @@ module.exports.CreateMeshAgent = function (parent, db, ws, req, args, domain) { if (device.agent.ver != obj.agentInfo.agentVersion) { device.agent.ver = obj.agentInfo.agentVersion; change = 1; changes.push('agent version'); } if (device.agent.id != obj.agentInfo.agentId) { device.agent.id = obj.agentInfo.agentId; change = 1; changes.push('agent type'); } if ((device.agent.caps & 24) != (obj.agentInfo.capabilities & 24)) { device.agent.caps = obj.agentInfo.capabilities; change = 1; changes.push('agent capabilities'); } // If agent console or javascript support changes, update capabilities - if (mesh.flags && (mesh.flags & 2) && (device.name != obj.agentInfo.computerName)) { device.name = obj.agentInfo.computerName; change = 1; } // We want the server name to be sync'ed to the hostname + // We want the server name to be sync'ed to the hostname or the --agentName + // (flag 16 allows to override the name until next connection) + if (mesh.flags && (mesh.flags & 2)) { + var preferredName = (mesh.flags & 8) && obj.agentName || obj.agentInfo.computerName; + if (device.name != preferredName) {device.name = preferredName; change = 1; } + } if (device.ip != obj.remoteaddr) { device.ip = obj.remoteaddr; change = 1; } if (change == 1) { diff --git a/views/default.handlebars b/views/default.handlebars index bdecac2a..bc0ca318 100644 --- a/views/default.handlebars +++ b/views/default.handlebars @@ -1,4 +1,4 @@ - + @@ -7497,7 +7497,7 @@ // Add node name var nname = EscapeHtml(node.name), nnameEx; if (nname.length == 0) { nname = '' + "None" + ''; } - if (((meshrights & 4) != 0) && ((!mesh.flags) || ((mesh.flags & 2) == 0))) { nname = '' + nname + ' '; } + if (((meshrights & 4) != 0) && ((!mesh.flags) || ((mesh.flags & 2) == 0 || (mesh.flags & 16)))) { nname = '' + nname + ' '; } nnameEx = nname; if (mesh) { nname += ' - ' + EscapeHtml(mesh.name) + ''; } QH('p10deviceName', nname); @@ -13586,6 +13586,8 @@ if (currentMesh.flags) { if (currentMesh.flags & 1) { meshFeatures.push("Auto-Remove"); } if (currentMesh.flags & 2) { meshFeatures.push((currentMesh.mtype == 4)?"Port Name Sync":"Hostname Sync"); } + if (currentMesh.flags & 8) { meshFeatures.push("prefer --agentname"); } + if (currentMesh.flags & 16) { meshFeatures.push("allow override"); } if ((serverinfo.devGroupSessionRecording == 1) && (currentMesh.flags & 4)) { meshFeatures.push("Record Sessions"); } } if ((typeof currentMesh.expireDevs == 'number') && (currentMesh.expireDevs > 0)) { meshFeatures.push("Remove inactive"); } @@ -14067,6 +14069,10 @@ } if ((currentMesh.mtype == 2) || (currentMesh.mtype == 4)) { x += '

'; + if (currentMesh.mtype == 2) { + x += '

'; + x += '

'; + } x += '

'; } x += '

'; @@ -14087,6 +14093,16 @@ function p20editmeshfeaturesValidate() { var flags = 0, ok = true; if (((currentMesh.mtype == 2) || (currentMesh.mtype == 4)) && (Q('d20flag1').checked)) { flags += 1; } + if (currentMesh.mtype == 2) { + if (Q('d20flag2').checked) { + flags += 2; + if (event.currentTarget.id == 'd20flag2') { Q('d20flag8').checked = true; Q('d20flag16').checked = true; } + } + for (const flag of [8, 16]) { + const element = Q('d20flag' + flag); + if ((element.checked = element.checked && !(element.disabled = !(flags & 2)))) { flags += flag; } + } + } QE('d20expireDevice', (flags & 1) == 0); var x = ((flags & 1) == 0) && Q('d20expireDevice').checked; QV('d20expireDeviceDev', x); @@ -14099,6 +14115,8 @@ if ((currentMesh.mtype == 2) || (currentMesh.mtype == 4)) { if (Q('d20flag1').checked) { flags += 1; } if (Q('d20flag2').checked) { flags += 2; } + if (Q('d20flag8').checked) { flags += 8; } + if (Q('d20flag16').checked) { flags += 16; } } if ((serverinfo.devGroupSessionRecording == 1) && (currentMesh.mtype != 4)) { if (Q('d20flag4').checked) { flags += 4; } } var expireDevs = 0; diff --git a/views/default3.handlebars b/views/default3.handlebars index 3f0a0fd9..6e2d2f79 100644 --- a/views/default3.handlebars +++ b/views/default3.handlebars @@ -8168,7 +8168,7 @@ // Add node name var nname = EscapeHtml(node.name), nnameEx; if (nname.length == 0) { nname = '' + "None" + ''; } - if (((meshrights & 4) != 0) && ((!mesh.flags) || ((mesh.flags & 2) == 0))) { nname = '' + nname + ' '; } + if (((meshrights & 4) != 0) && ((!mesh.flags) || ((mesh.flags & 2) == 0 || (mesh.flags & 16)))) { nname = '' + nname + ' '; } nnameEx = nname; if (mesh) { nname += ' - ' + EscapeHtml(mesh.name) + ''; } QH('p10deviceName', nname); @@ -14628,6 +14628,8 @@ if (currentMesh.flags) { if (currentMesh.flags & 1) { meshFeatures.push("Auto-Remove"); } if (currentMesh.flags & 2) { meshFeatures.push((currentMesh.mtype == 4) ? "Port Name Sync" : "Hostname Sync"); } + if (currentMesh.flags & 8) { meshFeatures.push("prefer --agentname"); } + if (currentMesh.flags & 16) { meshFeatures.push("allow override"); } if ((serverinfo.devGroupSessionRecording == 1) && (currentMesh.flags & 4)) { meshFeatures.push("Record Sessions"); } } if ((typeof currentMesh.expireDevs == 'number') && (currentMesh.expireDevs > 0)) { meshFeatures.push("Remove inactive"); } @@ -15144,6 +15146,10 @@ } if ((currentMesh.mtype == 2) || (currentMesh.mtype == 4)) { x += '

'; + if (currentMesh.mtype == 2) { + x += '

'; + x += '

'; + } x += '

'; } x += '

'; @@ -15165,6 +15171,16 @@ function p20editmeshfeaturesValidate() { var flags = 0, ok = true; if (((currentMesh.mtype == 2) || (currentMesh.mtype == 4)) && (Q('d20flag1').checked)) { flags += 1; } + if (currentMesh.mtype == 2) { + if (Q('d20flag2').checked) { + flags += 2; + if (event.currentTarget.id == 'd20flag2') { Q('d20flag8').checked = true; Q('d20flag16').checked = true; } + } + for (const flag of [8, 16]) { + const element = Q('d20flag' + flag); + if ((element.checked = element.checked && !(element.disabled = !(flags & 2)))) { flags += flag; } + } + } QE('d20expireDevice', (flags & 1) == 0); var x = ((flags & 1) == 0) && Q('d20expireDevice').checked; QV('d20expireDeviceDev', x); @@ -15177,6 +15193,8 @@ if ((currentMesh.mtype == 2) || (currentMesh.mtype == 4)) { if (Q('d20flag1').checked) { flags += 1; } if (Q('d20flag2').checked) { flags += 2; } + if (Q('d20flag8').checked) { flags += 8; } + if (Q('d20flag16').checked) { flags += 16; } } if ((serverinfo.devGroupSessionRecording == 1) && (currentMesh.mtype != 4)) { if (Q('d20flag4').checked) { flags += 4; } } var expireDevs = 0; From 440cad5b50b6a697d51ee2312e02a372a3e6ce4c Mon Sep 17 00:00:00 2001 From: si458 Date: Sat, 12 Apr 2025 11:03:44 +0100 Subject: [PATCH 8/8] runcommands now shows live output in console instead of after finishing #6948 Signed-off-by: si458 --- agents/meshcore.js | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/agents/meshcore.js b/agents/meshcore.js index 5a7faaf1..e0c31907 100644 --- a/agents/meshcore.js +++ b/agents/meshcore.js @@ -1556,14 +1556,13 @@ function handleServerCommand(data) { // Windows command shell mesh.cmdchild = require('child_process').execFile(process.env['windir'] + '\\system32\\cmd.exe', ['cmd'], options); mesh.cmdchild.descriptorMetadata = 'UserCommandsShell'; - mesh.cmdchild.stdout.on('data', function (c) { replydata += c.toString(); }); - mesh.cmdchild.stderr.on('data', function (c) { replydata += c.toString(); }); + mesh.cmdchild.stdout.on('data', function (c) { replydata += c.toString(); sendConsoleText(c.toString()); }); + mesh.cmdchild.stderr.on('data', function (c) { replydata += c.toString(); sendConsoleText(c.toString()); }); mesh.cmdchild.stdin.write(data.cmds + '\r\nexit\r\n'); mesh.cmdchild.on('exit', function () { if (data.reply) { mesh.SendCommand({ action: 'msg', type: 'runcommands', result: replydata, sessionid: data.sessionid, responseid: data.responseid }); } else { - sendConsoleText(replydata); sendConsoleText("Run commands completed."); } delete mesh.cmdchild; @@ -1572,14 +1571,13 @@ function handleServerCommand(data) { // Windows Powershell mesh.cmdchild = require('child_process').execFile(process.env['windir'] + '\\System32\\WindowsPowerShell\\v1.0\\powershell.exe', ['powershell', '-noprofile', '-nologo', '-command', '-'], options); mesh.cmdchild.descriptorMetadata = 'UserCommandsPowerShell'; - mesh.cmdchild.stdout.on('data', function (c) { replydata += c.toString(); }); - mesh.cmdchild.stderr.on('data', function (c) { replydata += c.toString(); }); + mesh.cmdchild.stdout.on('data', function (c) { replydata += c.toString(); sendConsoleText(c.toString()); }); + mesh.cmdchild.stderr.on('data', function (c) { replydata += c.toString(); sendConsoleText(c.toString()); }); mesh.cmdchild.stdin.write(data.cmds + '\r\nexit\r\n'); mesh.cmdchild.on('exit', function () { if (data.reply) { mesh.SendCommand({ action: 'msg', type: 'runcommands', result: replydata, sessionid: data.sessionid, responseid: data.responseid }); } else { - sendConsoleText(replydata); sendConsoleText("Run commands completed."); } delete mesh.cmdchild; @@ -1589,14 +1587,13 @@ function handleServerCommand(data) { // Linux shell mesh.cmdchild = require('child_process').execFile('/bin/sh', ['sh'], options); mesh.cmdchild.descriptorMetadata = 'UserCommandsShell'; - mesh.cmdchild.stdout.on('data', function (c) { replydata += c.toString(); }); - mesh.cmdchild.stderr.on('data', function (c) { replydata += c.toString(); }); + mesh.cmdchild.stdout.on('data', function (c) { replydata += c.toString(); sendConsoleText(c.toString()); }); + mesh.cmdchild.stderr.on('data', function (c) { replydata += c.toString(); sendConsoleText(c.toString()); }); mesh.cmdchild.stdin.write(data.cmds.split('\r').join('') + '\nexit\n'); mesh.cmdchild.on('exit', function () { if (data.reply) { mesh.SendCommand({ action: 'msg', type: 'runcommands', result: replydata, sessionid: data.sessionid, responseid: data.responseid }); } else { - sendConsoleText(replydata); sendConsoleText("Run commands completed."); } delete mesh.cmdchild;