Merge branch 'Ylianst:master' into dockerrewrite

This commit is contained in:
dselen 2025-04-12 22:14:57 +02:00 committed by GitHub
commit 0514f4a859
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
9 changed files with 165 additions and 97 deletions

View File

@ -1556,14 +1556,13 @@ function handleServerCommand(data) {
// Windows command shell // Windows command shell
mesh.cmdchild = require('child_process').execFile(process.env['windir'] + '\\system32\\cmd.exe', ['cmd'], options); mesh.cmdchild = require('child_process').execFile(process.env['windir'] + '\\system32\\cmd.exe', ['cmd'], options);
mesh.cmdchild.descriptorMetadata = 'UserCommandsShell'; mesh.cmdchild.descriptorMetadata = 'UserCommandsShell';
mesh.cmdchild.stdout.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(); }); 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.stdin.write(data.cmds + '\r\nexit\r\n');
mesh.cmdchild.on('exit', function () { mesh.cmdchild.on('exit', function () {
if (data.reply) { if (data.reply) {
mesh.SendCommand({ action: 'msg', type: 'runcommands', result: replydata, sessionid: data.sessionid, responseid: data.responseid }); mesh.SendCommand({ action: 'msg', type: 'runcommands', result: replydata, sessionid: data.sessionid, responseid: data.responseid });
} else { } else {
sendConsoleText(replydata);
sendConsoleText("Run commands completed."); sendConsoleText("Run commands completed.");
} }
delete mesh.cmdchild; delete mesh.cmdchild;
@ -1572,14 +1571,13 @@ function handleServerCommand(data) {
// Windows Powershell // Windows Powershell
mesh.cmdchild = require('child_process').execFile(process.env['windir'] + '\\System32\\WindowsPowerShell\\v1.0\\powershell.exe', ['powershell', '-noprofile', '-nologo', '-command', '-'], options); 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.descriptorMetadata = 'UserCommandsPowerShell';
mesh.cmdchild.stdout.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(); }); 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.stdin.write(data.cmds + '\r\nexit\r\n');
mesh.cmdchild.on('exit', function () { mesh.cmdchild.on('exit', function () {
if (data.reply) { if (data.reply) {
mesh.SendCommand({ action: 'msg', type: 'runcommands', result: replydata, sessionid: data.sessionid, responseid: data.responseid }); mesh.SendCommand({ action: 'msg', type: 'runcommands', result: replydata, sessionid: data.sessionid, responseid: data.responseid });
} else { } else {
sendConsoleText(replydata);
sendConsoleText("Run commands completed."); sendConsoleText("Run commands completed.");
} }
delete mesh.cmdchild; delete mesh.cmdchild;
@ -1589,14 +1587,13 @@ function handleServerCommand(data) {
// Linux shell // Linux shell
mesh.cmdchild = require('child_process').execFile('/bin/sh', ['sh'], options); mesh.cmdchild = require('child_process').execFile('/bin/sh', ['sh'], options);
mesh.cmdchild.descriptorMetadata = 'UserCommandsShell'; mesh.cmdchild.descriptorMetadata = 'UserCommandsShell';
mesh.cmdchild.stdout.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(); }); 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.stdin.write(data.cmds.split('\r').join('') + '\nexit\n');
mesh.cmdchild.on('exit', function () { mesh.cmdchild.on('exit', function () {
if (data.reply) { if (data.reply) {
mesh.SendCommand({ action: 'msg', type: 'runcommands', result: replydata, sessionid: data.sessionid, responseid: data.responseid }); mesh.SendCommand({ action: 'msg', type: 'runcommands', result: replydata, sessionid: data.sessionid, responseid: data.responseid });
} else { } else {
sendConsoleText(replydata);
sendConsoleText("Run commands completed."); sendConsoleText("Run commands completed.");
} }
delete mesh.cmdchild; delete mesh.cmdchild;

View File

@ -114,7 +114,7 @@ CheckInstallAgent() {
# RaspberryPi 3B+ running Ubuntu 64 (aarch64) # RaspberryPi 3B+ running Ubuntu 64 (aarch64)
machineid=26 machineid=26
fi fi
if [ $marchinetype == 'riscv64' ] if [ $machinetype == 'riscv64' ]
then then
# RISC-V 64 bit # RISC-V 64 bit
machineid=45 machineid=45

12
db.js
View File

@ -3323,7 +3323,10 @@ module.exports.CreateDB = function (parent, func) {
var cmd = '"' + mongoDumpPath + '"'; var cmd = '"' + mongoDumpPath + '"';
if (dburl) { cmd = '\"' + mongoDumpPath + '\" --uri=\"' + dburl + '\"'; } 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; return cmd;
} }
@ -3352,8 +3355,9 @@ module.exports.CreateDB = function (parent, func) {
return; 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"); } try { fs.writeFileSync( testFile, "DeleteMe"); }
catch (e) { catch (e) {
//Unable to create file //Unable to create file
@ -3377,7 +3381,7 @@ module.exports.CreateDB = function (parent, func) {
const child_process = require('child_process'); const child_process = require('child_process');
child_process.exec(cmd, { cwd: backupPath }, function (error, stdout, stderr) { child_process.exec(cmd, { cwd: backupPath }, function (error, stdout, stderr) {
if ((error != null) && (error != '')) { 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; return;
} else {parent.config.settings.autobackup.backupintervalhours = backupInterval;} } else {parent.config.settings.autobackup.backupintervalhours = backupInterval;}
}); });

View File

@ -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.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.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 ((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 (device.ip != obj.remoteaddr) { device.ip = obj.remoteaddr; change = 1; }
if (change == 1) { if (change == 1) {

View File

@ -886,6 +886,10 @@
"default": "mongodump", "default": "mongodump",
"description": "The file path of where \"mongodump\" is located. Default is \"mongodump\"" "description": "The file path of where \"mongodump\" is located. Default is \"mongodump\""
}, },
"mongoDumpArgs": {
"type": "string",
"description": "Override the default mongodump --uri=<mongoDb>. The --db= option is automatically appended if omitted. (f.e. --host=127.0.0.1 --username=someUser --password=PaSsWORD --authenticationDatabase=admin)"
},
"mysqlDumpPath": { "mysqlDumpPath": {
"type": "string", "type": "string",
"default": "mysqldump", "default": "mysqldump",

View File

@ -6740,7 +6740,7 @@
"default.handlebars->container->column_l->p12->termTable->1->1->0->1->1", "default.handlebars->container->column_l->p12->termTable->1->1->0->1->1",
"default.handlebars->container->column_l->p13->p13toolbar->1->0->1->1", "default.handlebars->container->column_l->p13->p13toolbar->1->0->1->1",
"default3.handlebars->35->1016", "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->p12->termTable->1->1->0->1->3",
"default3.handlebars->container->column_l->p13->p13toolbar->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->rfbPortContextMenu->1",
"default.handlebars->sshPortContextMenu->1", "default.handlebars->sshPortContextMenu->1",
"default3.handlebars->altPortContextMenu->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->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->container->column_l->p13->p13toolbar->1->0->1->1->p13Connectsspan->5->1->0",
"default3.handlebars->httpPortContextMenu->1", "default3.handlebars->httpPortContextMenu->1",
@ -12469,7 +12469,7 @@
"xloc": [ "xloc": [
"default.handlebars->deskConnectContextMenu->3", "default.handlebars->deskConnectContextMenu->3",
"default.handlebars->filesShellContextMenu->1", "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" "default3.handlebars->container->column_l->p13->p13toolbar->1->0->1->1->p13Connectspan->5->1->0"
] ]
}, },
@ -12500,7 +12500,7 @@
"zh-cht": "詢問同意+工具欄", "zh-cht": "詢問同意+工具欄",
"xloc": [ "xloc": [
"default.handlebars->deskConnectContextMenu->1", "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->p11->deskarea0->deskarea1->3",
"default.handlebars->container->column_l->p12->termTable->1->1->0->1->3", "default.handlebars->container->column_l->p12->termTable->1->1->0->1->3",
"default.handlebars->container->column_l->p13->p13toolbar->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->p12->termTable->1->1->0->1->1->autoconnectbutton2",
"default3.handlebars->container->column_l->p13->p13toolbar->1->0->1->1->p13AutoConnect", "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", "sharing-mobile.handlebars->container->page_content->column_l->p10->p10files->p13toolbar->1->0->1->3",
@ -16128,7 +16128,7 @@
"zh-cht": "更改遠程機器的電源狀態", "zh-cht": "更改遠程機器的電源狀態",
"xloc": [ "xloc": [
"default.handlebars->container->column_l->p11->deskarea0->deskarea1->1", "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": "剪貼板", "zh-cht": "剪貼板",
"xloc": [ "xloc": [
"default.handlebars->container->column_l->p11->deskarea0->deskarea4->5", "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" "sharing.handlebars->p11->deskarea0->deskarea4->3"
] ]
}, },
@ -19634,7 +19634,7 @@
"default.handlebars->container->column_l->p13->p13toolbar->1->0->1->3", "default.handlebars->container->column_l->p13->p13toolbar->1->0->1->3",
"default3.handlebars->35->2206", "default3.handlebars->35->2206",
"default3.handlebars->35->983", "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->p12->termTable->1->1->0->1->1->connectbutton2span->connectbutton2",
"default3.handlebars->container->column_l->p13->p13toolbar->1->0->1->1->p13Connectspan->p13Connect", "default3.handlebars->container->column_l->p13->p13toolbar->1->0->1->1->p13Connectspan->p13Connect",
"mstsc.handlebars->main->1->3->1->12->1->0", "mstsc.handlebars->main->1->3->1->12->1->0",
@ -19879,8 +19879,8 @@
"zh-cht": "使用 MeshAgent 遠程桌面連接", "zh-cht": "使用 MeshAgent 遠程桌面連接",
"xloc": [ "xloc": [
"default.handlebars->container->column_l->p11->deskarea0->deskarea1->3->connectbutton1span", "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->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->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->connectbutton2span",
"default3.handlebars->container->column_l->p12->termTable->1->1->0->1->1->connectbutton2sspan", "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", "default3.handlebars->container->column_l->p13->p13toolbar->1->0->1->1->p13Connectspan",
@ -19914,7 +19914,7 @@
"zh-cht": "使用 RDP 連接", "zh-cht": "使用 RDP 連接",
"xloc": [ "xloc": [
"default.handlebars->container->column_l->p11->deskarea0->deskarea1->3->connectbutton1rspan", "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 連接", "zh-cht": "使用硬件 KVM 連接",
"xloc": [ "xloc": [
"default.handlebars->container->column_l->p11->deskarea0->deskarea1->3->connectbutton1hspan", "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": "桌面會話延遲", "zh-cht": "桌面會話延遲",
"xloc": [ "xloc": [
"default.handlebars->container->column_l->p11->deskarea0->deskarea4->1", "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" "sharing.handlebars->p11->deskarea0->deskarea4->1"
] ]
}, },
@ -27125,8 +27125,8 @@
"default.handlebars->deskDisconnectContextMenu->3", "default.handlebars->deskDisconnectContextMenu->3",
"default3.handlebars->35->2207", "default3.handlebars->35->2207",
"default3.handlebars->35->984", "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->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->disconnectbutton1",
"default3.handlebars->container->column_l->p12->termTable->1->1->0->1->1->disconnectbutton2span->disconnectbutton2", "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", "default3.handlebars->container->column_l->p13->p13toolbar->1->0->1->1->p13Disconnect",
"sharing-mobile.handlebars->11->62", "sharing-mobile.handlebars->11->62",
@ -27196,7 +27196,7 @@
"zh-cht": "斷開連接並鎖定", "zh-cht": "斷開連接並鎖定",
"xloc": [ "xloc": [
"default.handlebars->deskDisconnectContextMenu->1", "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->446",
"default3.handlebars->35->486", "default3.handlebars->35->486",
"default3.handlebars->35->8", "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->p12->termTable->1->1->0->1->1->termstatus",
"default3.handlebars->container->column_l->p13->p13toolbar->1->0->1->1->p13Status", "default3.handlebars->container->column_l->p13->p13toolbar->1->0->1->1->p13Status",
"sharing-mobile.handlebars->11->1", "sharing-mobile.handlebars->11->1",
@ -27493,7 +27493,7 @@
"zh-cht": "在遠程電腦上顯示通知", "zh-cht": "在遠程電腦上顯示通知",
"xloc": [ "xloc": [
"default.handlebars->container->column_l->p11->deskarea0->deskarea4->1", "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": "將遠程剪貼板下載到本地剪貼板", "zh-cht": "將遠程剪貼板下載到本地剪貼板",
"xloc": [ "xloc": [
"default.handlebars->container->column_l->p11->deskarea0->deskarea4->1", "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-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->p11->deskarea0->deskarea4->5",
"default.handlebars->container->column_l->p12->termTable->1->1->4->1->3", "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", "default3.handlebars->container->column_l->p12->termTable->1->1->4->1->1",
"sharing.handlebars->p12->9->3" "sharing.handlebars->p12->9->3"
] ]
@ -30284,7 +30284,7 @@
"zh-cht": "編輯遠程桌面設置", "zh-cht": "編輯遠程桌面設置",
"xloc": [ "xloc": [
"default.handlebars->container->column_l->p11->deskarea0->deskarea1->1", "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" "sharing.handlebars->p11->deskarea0->deskarea1->1"
] ]
}, },
@ -34834,7 +34834,7 @@
"zh-cht": "全部關注", "zh-cht": "全部關注",
"xloc": [ "xloc": [
"default.handlebars->container->column_l->p11->deskarea0->deskarea1->1", "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->p11->p11title->p11deviceNameHeader->devListToolbarViewIcons",
"default.handlebars->container->column_l->p12->p12title->devListToolbarViewIcons2", "default.handlebars->container->column_l->p12->p12title->devListToolbarViewIcons2",
"default.handlebars->container->column_l->p14->p14title->devListToolbarViewIcons", "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->p12->p12title->devListToolbarViewIcons2",
"default3.handlebars->container->column_l->p14->p14title->devListToolbarViewIcons" "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-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->p11->deskarea0->deskarea1->3->connectbutton1hspan",
"default.handlebars->container->column_l->p12->termTable->1->1->0->1->3->connectbutton2hspan", "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", "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-mobile.handlebars->container->page_content->column_l->p10->p10desktop->deskarea1->1->3",
"sharing.handlebars->p11->deskarea0->deskarea1->3->connectbutton1hspan" "sharing.handlebars->p11->deskarea0->deskarea1->3->connectbutton1hspan"
@ -40872,7 +40872,7 @@
"xloc": [ "xloc": [
"default-mobile.handlebars->container->page_content->column_l->p10->p10desktop->deskarea4->1->3->11->DeskControlSpan", "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", "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-mobile.handlebars->container->page_content->column_l->p10->p10desktop->deskarea4->1->3->5->DeskControlSpan",
"sharing.handlebars->p11->deskarea0->deskarea4->3->9->DeskControlSpan" "sharing.handlebars->p11->deskarea0->deskarea4->3->9->DeskControlSpan"
] ]
@ -49099,7 +49099,7 @@
"zh-cht": "鎖定遠程計算機", "zh-cht": "鎖定遠程計算機",
"xloc": [ "xloc": [
"default.handlebars->container->column_l->p11->deskarea0->deskarea4->1", "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->2932",
"default3.handlebars->35->341", "default3.handlebars->35->341",
"default3.handlebars->35->892", "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->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->DeskToolsServiceTab->deskToolsServiceHeader->3",
"default3.handlebars->container->column_l->p42->p42tbl->1->0->5" "default3.handlebars->container->column_l->p42->p42tbl->1->0->5"
] ]
}, },
@ -59696,7 +59696,7 @@
"zh-cht": "在遠程電腦上打開一個網址", "zh-cht": "在遠程電腦上打開一個網址",
"xloc": [ "xloc": [
"default.handlebars->container->column_l->p11->deskarea0->deskarea4->1", "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->47->1030",
"default.handlebars->container->column_l->p11->deskarea0->deskarea4->1", "default.handlebars->container->column_l->p11->deskarea0->deskarea4->1",
"default3.handlebars->35->1027", "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->47->1470",
"default.handlebars->container->column_l->p11->deskarea0->deskarea3x->DeskTools->deskToolsArea->DeskToolsProcessTab->deskToolsHeader->1", "default.handlebars->container->column_l->p11->deskarea0->deskarea3x->DeskTools->deskToolsArea->DeskToolsProcessTab->deskToolsHeader->1",
"default3.handlebars->35->1456", "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->p12->termTable->1->1->0->1->1",
"default.handlebars->container->column_l->p13->p13toolbar->1->0->1->1", "default.handlebars->container->column_l->p13->p13toolbar->1->0->1->1",
"default3.handlebars->35->1017", "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->p12->termTable->1->1->0->1->3",
"default3.handlebars->container->column_l->p13->p13toolbar->1->0->1->3" "default3.handlebars->container->column_l->p13->p13toolbar->1->0->1->3"
] ]
@ -63070,7 +63070,7 @@
"xloc": [ "xloc": [
"default-mobile.handlebars->container->page_content->column_l->p10->p10desktop->deskarea4->1->3", "default-mobile.handlebars->container->page_content->column_l->p10->p10desktop->deskarea4->1->3",
"default.handlebars->container->column_l->p11->deskarea0->deskarea1->1", "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": "隱私欄", "zh-cht": "隱私欄",
"xloc": [ "xloc": [
"default.handlebars->deskConnectContextMenu->5", "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": "進程", "zh-cht": "進程",
"xloc": [ "xloc": [
"default.handlebars->container->column_l->p11->deskarea0->deskarea3x->DeskTools->deskToolsAreaTop->deskToolsTopTabProcess", "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 連接", "zh-cht": "RDP 連接",
"xloc": [ "xloc": [
"default.handlebars->container->column_l->p11->deskarea0->deskarea1->3->connectbutton1rspan", "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": "將遠程桌面會話記錄到檔案", "zh-cht": "將遠程桌面會話記錄到檔案",
"xloc": [ "xloc": [
"default.handlebars->container->column_l->p11->deskarea0->deskarea4->1", "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->p40->3->3",
"default.handlebars->container->column_l->p52->3->1->0->3->3", "default.handlebars->container->column_l->p52->3->1->0->3->3",
"default3.handlebars->35->872", "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->p13->p13toolbar->1->2->1->3",
"default3.handlebars->container->column_l->p40->3->1", "default3.handlebars->container->column_l->p40->3->1",
"default3.handlebars->container->column_l->p52->3->1->0->1->1", "default3.handlebars->container->column_l->p52->3->1->0->1->1",
@ -65771,7 +65771,7 @@
"zh-cht": "刷新桌面", "zh-cht": "刷新桌面",
"xloc": [ "xloc": [
"default.handlebars->container->column_l->p11->deskarea0->deskarea4->1", "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": "遠程輸入被鎖定", "zh-cht": "遠程輸入被鎖定",
"xloc": [ "xloc": [
"default.handlebars->container->column_l->p11->deskarea0->deskarea4->1", "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": "遠程輸入已解鎖", "zh-cht": "遠程輸入已解鎖",
"xloc": [ "xloc": [
"default.handlebars->container->column_l->p11->deskarea0->deskarea4->1", "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": "向左旋轉", "zh-cht": "向左旋轉",
"xloc": [ "xloc": [
"default.handlebars->container->column_l->p11->deskarea0->deskarea1->1", "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" "sharing.handlebars->p11->deskarea0->deskarea1->1"
] ]
}, },
@ -70241,7 +70241,7 @@
"zh-cht": "向右旋轉", "zh-cht": "向右旋轉",
"xloc": [ "xloc": [
"default.handlebars->container->column_l->p11->deskarea0->deskarea1->1", "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" "sharing.handlebars->p11->deskarea0->deskarea1->1"
] ]
}, },
@ -70437,7 +70437,7 @@
"uk": "Запустити сценарій на цьому комп'ютері", "uk": "Запустити сценарій на цьому комп'ютері",
"xloc": [ "xloc": [
"default.handlebars->container->column_l->p11->deskarea0->deskarea4->1", "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": "保存遠程桌面的屏幕截圖", "zh-cht": "保存遠程桌面的屏幕截圖",
"xloc": [ "xloc": [
"default.handlebars->container->column_l->p11->deskarea0->deskarea4->1", "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" "sharing.handlebars->p11->deskarea0->deskarea4->1"
] ]
}, },
@ -73236,7 +73236,7 @@
"xloc": [ "xloc": [
"default.handlebars->container->column_l->p11->deskarea0->deskarea4->5", "default.handlebars->container->column_l->p11->deskarea0->deskarea4->5",
"default.handlebars->container->column_l->p12->termTable->1->1->4->1->1->specialKeyDropDown", "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", "default3.handlebars->container->column_l->p12->termTable->1->1->4->1->3",
"messenger.handlebars->xbottom->1->1->0->3", "messenger.handlebars->xbottom->1->1->0->3",
"sharing.handlebars->p11->deskarea0->deskarea4->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->p11->deskarea0->deskarea1->1",
"default.handlebars->container->column_l->p12->termTable->1->1->0->1->1", "default.handlebars->container->column_l->p12->termTable->1->1->0->1->1",
"default.handlebars->container->column_l->p13->p13toolbar->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->p12->termTable->1->1->0->1->3",
"default3.handlebars->container->column_l->p13->p13toolbar->1->0->1->3", "default3.handlebars->container->column_l->p13->p13toolbar->1->0->1->3",
"messenger.handlebars->xtop->3", "messenger.handlebars->xtop->3",
@ -75054,7 +75054,7 @@
"zh-cht": "服務", "zh-cht": "服務",
"xloc": [ "xloc": [
"default.handlebars->container->column_l->p11->deskarea0->deskarea3x->DeskTools->deskToolsAreaTop->deskToolsTopTabService", "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": [ "xloc": [
"default.handlebars->container->column_l->p11->deskarea0->deskarea4->1", "default.handlebars->container->column_l->p11->deskarea0->deskarea4->1",
"default.handlebars->container->column_l->p12->termTable->1->1->4->1->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", "default3.handlebars->container->column_l->p12->termTable->1->1->4->1->3",
"sharing.handlebars->p11->deskarea0->deskarea4->1", "sharing.handlebars->p11->deskarea0->deskarea4->1",
"sharing.handlebars->p12->9->1" "sharing.handlebars->p12->9->1"
@ -75552,7 +75552,7 @@
"default-mobile.handlebars->container->page_content->column_l->p10->p10desktop->deskarea4->1->3", "default-mobile.handlebars->container->page_content->column_l->p10->p10desktop->deskarea4->1->3",
"default.handlebars->container->column_l->p1->devListToolbarSpan->1->0->kvmListToolbar", "default.handlebars->container->column_l->p1->devListToolbarSpan->1->0->kvmListToolbar",
"default3.handlebars->container->column_l->p1->devListToolbarSpan->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", "default3.handlebars->container->column_l->p4->3->1->0->1->3",
"sharing-mobile.handlebars->container->page_content->column_l->p10->p10desktop->deskarea4->1->3" "sharing-mobile.handlebars->container->page_content->column_l->p10->p10desktop->deskarea4->1->3"
] ]
@ -75891,7 +75891,7 @@
"zh-cht": "與訪客共享設備", "zh-cht": "與訪客共享設備",
"xloc": [ "xloc": [
"default.handlebars->container->column_l->p11->deskarea0->deskarea4->1", "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->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->p13->p13toolbar->1->4->1->1->p13sortdropdown->1",
"default.handlebars->container->column_l->p5->p5toolbar->1->2->p5filesubhead->1->p5sortdropdown->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->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->DeskToolsServiceTab->deskToolsServiceHeader",
"default3.handlebars->container->column_l->p13->p13toolbar->1->4->1->1->p13sortdropdown->1", "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", "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", "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排序", "zh-cht": "按進程ID排序",
"xloc": [ "xloc": [
"default.handlebars->container->column_l->p11->deskarea0->deskarea3x->DeskTools->deskToolsArea->DeskToolsProcessTab->deskToolsHeader", "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": "按狀態排序", "zh-cht": "按狀態排序",
"xloc": [ "xloc": [
"default.handlebars->container->column_l->p11->deskarea0->deskarea3x->DeskTools->deskToolsArea->DeskToolsServiceTab->deskToolsServiceHeader", "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->47->1469",
"default.handlebars->container->column_l->p11->deskarea0->deskarea3x->DeskTools->deskToolsArea->DeskToolsServiceTab->deskToolsServiceHeader->1", "default.handlebars->container->column_l->p11->deskarea0->deskarea3x->DeskTools->deskToolsArea->DeskToolsServiceTab->deskToolsServiceHeader->1",
"default3.handlebars->35->1455", "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", "en": "Toggle Dropdown",
"xloc": [ "xloc": [
"default3.handlebars->container->column_l->p11->deskarea0->1->1->0->deskarea1->1->connectbutton1rspan->connectbutton1rd->0", "default3.handlebars->container->column_l->p11->deskarea0->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->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->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->connectbutton2span->connectbutton2d->0",
"default3.handlebars->container->column_l->p12->termTable->1->1->0->1->1->connectbutton2sspan->connectbutton2sd->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", "default3.handlebars->container->column_l->p13->p13toolbar->1->0->1->1->p13Connectspan->p13Connectdrop->0",
@ -83937,7 +83937,7 @@
"zh-cht": "切換查看模式", "zh-cht": "切換查看模式",
"xloc": [ "xloc": [
"default.handlebars->container->column_l->p11->deskarea0->deskarea1->1", "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", "player.handlebars->p11->deskarea0->deskarea1->1",
"sharing.handlebars->p11->deskarea0->deskarea1->1" "sharing.handlebars->p11->deskarea0->deskarea1->1"
] ]
@ -83999,7 +83999,7 @@
"zh-cht": "切換焦點模式,現用中僅更新鼠標周圍的區域", "zh-cht": "切換焦點模式,現用中僅更新鼠標周圍的區域",
"xloc": [ "xloc": [
"default.handlebars->container->column_l->p11->deskarea0->deskarea1->1", "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": "切換鼠標和鍵盤輸入", "zh-cht": "切換鼠標和鍵盤輸入",
"xloc": [ "xloc": [
"default.handlebars->container->column_l->p11->deskarea0->deskarea4->5->11", "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" "sharing.handlebars->p11->deskarea0->deskarea4->3->9"
] ]
}, },
@ -84125,7 +84125,7 @@
"zh-cht": "切換遠程桌面背景", "zh-cht": "切換遠程桌面背景",
"xloc": [ "xloc": [
"default.handlebars->container->column_l->p11->deskarea0->deskarea4->1", "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": "切換工具視圖", "zh-cht": "切換工具視圖",
"xloc": [ "xloc": [
"default.handlebars->container->column_l->p11->deskarea0->deskarea4->1", "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": "工具", "zh-cht": "工具",
"xloc": [ "xloc": [
"default.handlebars->container->column_l->p11->deskarea0->deskarea4->1", "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->2276",
"default3.handlebars->35->3158", "default3.handlebars->35->3158",
"default3.handlebars->35->506", "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" "sharing.handlebars->p11->deskarea0->deskarea4->3"
] ]
}, },
@ -87286,7 +87286,7 @@
"zh-cht": "將本地剪貼板上傳到遠程裝置", "zh-cht": "將本地剪貼板上傳到遠程裝置",
"xloc": [ "xloc": [
"default.handlebars->container->column_l->p11->deskarea0->deskarea4->1", "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": "⇲", "ru": "⇲",
"xloc": [ "xloc": [
"default.handlebars->container->column_l->p11->deskarea0->deskarea1->1->5", "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", "player.handlebars->p11->deskarea0->deskarea1->1->1",
"sharing.handlebars->p11->deskarea0->deskarea1->1->3" "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->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->p2ServerActionsRestore->0->0->0",
"default.handlebars->container->column_l->p6->p6info->p2ServerActions->3->p2ServerActionsVersion->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->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->manageAuthApp->1->authAppSetupCheck->0",
"default3.handlebars->container->column_l->p2->p2info->p2AccountSecurity->3->manageDuoApp->1->authDuoSetupCheck->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->p11->deskarea0->deskarea1->1->idx_deskFullBtn2",
"default.handlebars->container->column_l->p12->termTable->1->1->0->1->1->idx_termFullBtn2", "default.handlebars->container->column_l->p12->termTable->1->1->0->1->1->idx_termFullBtn2",
"default.handlebars->container->dialog->dialogHeader->id_dialogclose", "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", "default3.handlebars->container->column_l->p12->termTable->1->1->0->1->3->idx_termFullBtn2",
"player.handlebars->p11->dialog->dialogHeader->id_dialogclose", "player.handlebars->p11->dialog->dialogHeader->id_dialogclose",
"sharing.handlebars->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->p11->deskarea0->deskarea3x->p11bigfail->0",
"default.handlebars->container->column_l->p13->p13filetable->p13bigfail->0", "default.handlebars->container->column_l->p13->p13filetable->p13bigfail->0",
"default.handlebars->container->column_l->p5->p5filetable->bigfail->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->p13->p13filetable->p13bigfail->0",
"default3.handlebars->container->column_l->p5->p5filetable->bigfail->0", "default3.handlebars->container->column_l->p5->p5filetable->bigfail->0",
"player.handlebars->p11->deskarea0->deskarea3x->bigfail->0", "player.handlebars->p11->deskarea0->deskarea3x->bigfail->0",

View File

@ -1,4 +1,4 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en" dir="ltr" xmlns="http://www.w3.org/1999/xhtml"> <html lang="en" dir="ltr" xmlns="http://www.w3.org/1999/xhtml">
<head> <head>
<meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" />
@ -7497,7 +7497,7 @@
// Add node name // Add node name
var nname = EscapeHtml(node.name), nnameEx; var nname = EscapeHtml(node.name), nnameEx;
if (nname.length == 0) { nname = '<i>' + "None" + '</i>'; } if (nname.length == 0) { nname = '<i>' + "None" + '</i>'; }
if (((meshrights & 4) != 0) && ((!mesh.flags) || ((mesh.flags & 2) == 0))) { nname = '<span tabindex=0 title="' + "Click here to edit the server-side device name" + '" onclick=showEditNodeValueDialog(0) onkeyup="if (event.key == \'Enter\') showEditNodeValueDialog(0)" style=cursor:pointer>' + nname + ' <img class=hoverButton src="images/link5.png" /></span>'; } if (((meshrights & 4) != 0) && ((!mesh.flags) || ((mesh.flags & 2) == 0 || (mesh.flags & 16)))) { nname = '<span tabindex=0 title="' + "Click here to edit the server-side device name" + '" onclick=showEditNodeValueDialog(0) onkeyup="if (event.key == \'Enter\') showEditNodeValueDialog(0)" style=cursor:pointer>' + nname + ' <img class=hoverButton src="images/link5.png" /></span>'; }
nnameEx = nname; nnameEx = nname;
if (mesh) { nname += '<span style=color:#AAA;font-size:small> - ' + EscapeHtml(mesh.name) + '</span>'; } if (mesh) { nname += '<span style=color:#AAA;font-size:small> - ' + EscapeHtml(mesh.name) + '</span>'; }
QH('p10deviceName', nname); QH('p10deviceName', nname);
@ -13280,7 +13280,7 @@
x += '<div id=d2devrelaydiv style=display:none>'; x += '<div id=d2devrelaydiv style=display:none>';
relayDevices.sort(nameSort); relayDevices.sort(nameSort);
var relayDevices2 = []; var relayDevices2 = [];
for (var i in relayDevices) { relayDevices2.push('<option value="' + relayDevices[i]._id + '">' + EscapeHtml(relayDevices[i].name) + '</option>'); } for (var i in relayDevices) { relayDevices2.push('<option value="' + relayDevices[i]._id + '">' + EscapeHtml(relayDevices[i].name) + ' (' + EscapeHtml(relayDevices[i].meshnamel) + ')' + '</option>'); }
x += addHtmlValue("Relay Device", '<div style=width:230px;margin:0;padding:0><select id=d2devrelay style=width:100% onchange=account_validateMeshCreate() onkeyup=account_validateMeshCreate(event,2) >' + relayDevices2.join('') + '</select></div>'); x += addHtmlValue("Relay Device", '<div style=width:230px;margin:0;padding:0><select id=d2devrelay style=width:100% onchange=account_validateMeshCreate() onkeyup=account_validateMeshCreate(event,2) >' + relayDevices2.join('') + '</select></div>');
x += '</div>'; x += '</div>';
} }
@ -13559,7 +13559,7 @@
if (((currentMesh.mtype == 3) || (currentMesh.mtype == 4)) && (currentMesh.relayid != null)) { if (((currentMesh.mtype == 3) || (currentMesh.mtype == 4)) && (currentMesh.relayid != null)) {
var relayName = '<i>' + "Unknown" + '</i>'; var relayName = '<i>' + "Unknown" + '</i>';
var relayNode = getNodeFromId(currentMesh.relayid); 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)); x += addHtmlValue("Relay Device", addLinkConditional(relayName, 'p20editmeshrelay()', (meshrights & 1) != 0));
} }
@ -13586,6 +13586,8 @@
if (currentMesh.flags) { if (currentMesh.flags) {
if (currentMesh.flags & 1) { meshFeatures.push("Auto-Remove"); } 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 & 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 ((serverinfo.devGroupSessionRecording == 1) && (currentMesh.flags & 4)) { meshFeatures.push("Record Sessions"); }
} }
if ((typeof currentMesh.expireDevs == 'number') && (currentMesh.expireDevs > 0)) { meshFeatures.push("Remove inactive"); } if ((typeof currentMesh.expireDevs == 'number') && (currentMesh.expireDevs > 0)) { meshFeatures.push("Remove inactive"); }
@ -13976,7 +13978,7 @@
setDialogMode(2, "Edit Device Group", 1, null, "No relay devices available."); setDialogMode(2, "Edit Device Group", 1, null, "No relay devices available.");
} else { } else {
var relayDevices2 = []; var relayDevices2 = [];
for (var i in relayDevices) { relayDevices2.push('<option value="' + (relayDevices[i]._id + '"' + ((currentMesh.relayid == relayDevices[i]._id) ? ' selected' : '')) + '>' + EscapeHtml(relayDevices[i].name) + '</option>'); } for (var i in relayDevices) { relayDevices2.push('<option value="' + (relayDevices[i]._id + '"' + ((currentMesh.relayid == relayDevices[i]._id) ? ' selected' : '')) + '>' + EscapeHtml(relayDevices[i].name) + ' (' + EscapeHtml(relayDevices[i].meshnamel) + ')' + '</option>'); }
var x = addHtmlValue("Relay Device", '<div style=width:230px;margin:0;padding:0><select id=d2devrelay style=width:100%>' + relayDevices2.join('') + '</select></div>'); var x = addHtmlValue("Relay Device", '<div style=width:230px;margin:0;padding:0><select id=d2devrelay style=width:100%>' + relayDevices2.join('') + '</select></div>');
setDialogMode(2, "Edit Device Group", 3, p20editmeshrelayEx, x); setDialogMode(2, "Edit Device Group", 3, p20editmeshrelayEx, x);
} }
@ -14067,6 +14069,10 @@
} }
if ((currentMesh.mtype == 2) || (currentMesh.mtype == 4)) { if ((currentMesh.mtype == 2) || (currentMesh.mtype == 4)) {
x += '<div><label><input type=checkbox id=d20flag2 onchange=p20editmeshfeaturesValidate() ' + ((flags & 2) ? 'checked' : '') + '>' + ((currentMesh.mtype == 4)?"Sync server device name to port name":"Sync server device name to hostname") + '</label><br></div>'; x += '<div><label><input type=checkbox id=d20flag2 onchange=p20editmeshfeaturesValidate() ' + ((flags & 2) ? 'checked' : '') + '>' + ((currentMesh.mtype == 4)?"Sync server device name to port name":"Sync server device name to hostname") + '</label><br></div>';
if (currentMesh.mtype == 2) {
x += '<div style="margin-left:8px"><label><input type=checkbox id=d20flag8 onchange=p20editmeshfeaturesValidate() ' + ((flags & 8) ? 'checked' : '') + '>' + "Prefer value of --agentName" + '</label><br></div>';
x += '<div style="margin-left:8px"><label><input type=checkbox id=d20flag16 onchange=p20editmeshfeaturesValidate() ' + ((flags & 16) ? 'checked' : '') + '>' + "Allow to override server device name until next connection" + '</label><br></div>';
}
x += '<div><label><input type=checkbox id=d20flag1 onchange=p20editmeshfeaturesValidate() ' + ((flags & 1) ? 'checked' : '') + '>' + "Remove device on disconnect" + '</label><br></div>'; x += '<div><label><input type=checkbox id=d20flag1 onchange=p20editmeshfeaturesValidate() ' + ((flags & 1) ? 'checked' : '') + '>' + "Remove device on disconnect" + '</label><br></div>';
} }
x += '<div><label><input type=checkbox id=d20expireDevice onchange=p20editmeshfeaturesValidate() ' + ((expire > 0) ? 'checked' : '') + '>' + "Automatically remove inactive devices" + '</label><br></div>'; x += '<div><label><input type=checkbox id=d20expireDevice onchange=p20editmeshfeaturesValidate() ' + ((expire > 0) ? 'checked' : '') + '>' + "Automatically remove inactive devices" + '</label><br></div>';
@ -14087,6 +14093,16 @@
function p20editmeshfeaturesValidate() { function p20editmeshfeaturesValidate() {
var flags = 0, ok = true; var flags = 0, ok = true;
if (((currentMesh.mtype == 2) || (currentMesh.mtype == 4)) && (Q('d20flag1').checked)) { flags += 1; } 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); QE('d20expireDevice', (flags & 1) == 0);
var x = ((flags & 1) == 0) && Q('d20expireDevice').checked; var x = ((flags & 1) == 0) && Q('d20expireDevice').checked;
QV('d20expireDeviceDev', x); QV('d20expireDeviceDev', x);
@ -14099,6 +14115,8 @@
if ((currentMesh.mtype == 2) || (currentMesh.mtype == 4)) { if ((currentMesh.mtype == 2) || (currentMesh.mtype == 4)) {
if (Q('d20flag1').checked) { flags += 1; } if (Q('d20flag1').checked) { flags += 1; }
if (Q('d20flag2').checked) { flags += 2; } 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; } } if ((serverinfo.devGroupSessionRecording == 1) && (currentMesh.mtype != 4)) { if (Q('d20flag4').checked) { flags += 4; } }
var expireDevs = 0; var expireDevs = 0;

View File

@ -8168,7 +8168,7 @@
// Add node name // Add node name
var nname = EscapeHtml(node.name), nnameEx; var nname = EscapeHtml(node.name), nnameEx;
if (nname.length == 0) { nname = '<i>' + "None" + '</i>'; } if (nname.length == 0) { nname = '<i>' + "None" + '</i>'; }
if (((meshrights & 4) != 0) && ((!mesh.flags) || ((mesh.flags & 2) == 0))) { nname = '<span tabindex=0 title="' + "Click here to edit the server-side device name" + '" onclick=showEditNodeValueDialog(0) onkeyup="if (event.key == \'Enter\') showEditNodeValueDialog(0)" role="button">' + nname + ' <i class="fa-solid fa-pencil fa-2xs"/></i></span>'; } if (((meshrights & 4) != 0) && ((!mesh.flags) || ((mesh.flags & 2) == 0 || (mesh.flags & 16)))) { nname = '<span tabindex=0 title="' + "Click here to edit the server-side device name" + '" onclick=showEditNodeValueDialog(0) onkeyup="if (event.key == \'Enter\') showEditNodeValueDialog(0)" role="button">' + nname + ' <i class="fa-solid fa-pencil fa-2xs"/></i></span>'; }
nnameEx = nname; nnameEx = nname;
if (mesh) { nname += '<span style=color:#AAA;font-size:small> - ' + EscapeHtml(mesh.name) + '</span>'; } if (mesh) { nname += '<span style=color:#AAA;font-size:small> - ' + EscapeHtml(mesh.name) + '</span>'; }
QH('p10deviceName', nname); QH('p10deviceName', nname);
@ -14287,7 +14287,7 @@
x += '<div id=d2devrelaydiv style=display:none>'; x += '<div id=d2devrelaydiv style=display:none>';
relayDevices.sort(nameSort); relayDevices.sort(nameSort);
var relayDevices2 = []; var relayDevices2 = [];
for (var i in relayDevices) { relayDevices2.push('<option value="' + relayDevices[i]._id + '">' + EscapeHtml(relayDevices[i].name) + '</option>'); } for (var i in relayDevices) { relayDevices2.push('<option value="' + relayDevices[i]._id + '">' + EscapeHtml(relayDevices[i].name) + ' (' + EscapeHtml(relayDevices[i].meshnamel) + ')' + '</option>'); }
x += addHtmlFormFloating("Relay Device", '<select id=d2devrelay onchange=account_validateMeshCreate() onkeyup=account_validateMeshCreate(event,2) class=form-select >' + relayDevices2.join('') + '</select>'); x += addHtmlFormFloating("Relay Device", '<select id=d2devrelay onchange=account_validateMeshCreate() onkeyup=account_validateMeshCreate(event,2) class=form-select >' + relayDevices2.join('') + '</select>');
x += '</div>'; x += '</div>';
} }
@ -14601,7 +14601,7 @@
if (((currentMesh.mtype == 3) || (currentMesh.mtype == 4)) && (currentMesh.relayid != null)) { if (((currentMesh.mtype == 3) || (currentMesh.mtype == 4)) && (currentMesh.relayid != null)) {
var relayName = '<i>' + "Unknown" + '</i>'; var relayName = '<i>' + "Unknown" + '</i>';
var relayNode = getNodeFromId(currentMesh.relayid); 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)); x += addHtmlValue("Relay Device", addLinkConditional(relayName, 'p20editmeshrelay()', (meshrights & 1) != 0));
} }
@ -14628,6 +14628,8 @@
if (currentMesh.flags) { if (currentMesh.flags) {
if (currentMesh.flags & 1) { meshFeatures.push("Auto-Remove"); } 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 & 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 ((serverinfo.devGroupSessionRecording == 1) && (currentMesh.flags & 4)) { meshFeatures.push("Record Sessions"); }
} }
if ((typeof currentMesh.expireDevs == 'number') && (currentMesh.expireDevs > 0)) { meshFeatures.push("Remove inactive"); } if ((typeof currentMesh.expireDevs == 'number') && (currentMesh.expireDevs > 0)) { meshFeatures.push("Remove inactive"); }
@ -15037,7 +15039,7 @@
showModal('xxAddAgentModal', 'idx_dlgOkButton'); showModal('xxAddAgentModal', 'idx_dlgOkButton');
} else { } else {
var relayDevices2 = []; var relayDevices2 = [];
for (var i in relayDevices) { relayDevices2.push('<option value="' + (relayDevices[i]._id + '"' + ((currentMesh.relayid == relayDevices[i]._id) ? ' selected' : '')) + '>' + EscapeHtml(relayDevices[i].name) + '</option>'); } for (var i in relayDevices) { relayDevices2.push('<option value="' + (relayDevices[i]._id + '"' + ((currentMesh.relayid == relayDevices[i]._id) ? ' selected' : '')) + '>' + EscapeHtml(relayDevices[i].name) + ' (' + EscapeHtml(relayDevices[i].meshnamel) + ')' + '</option>'); }
var x = addHtmlFormFloating("Relay Device", '<select id=d2devrelay class="form-select">' + relayDevices2.join('') + '</select>'); var x = addHtmlFormFloating("Relay Device", '<select id=d2devrelay class="form-select">' + relayDevices2.join('') + '</select>');
setModalContent('xxAddAgent', "Edit Device Group", x); setModalContent('xxAddAgent', "Edit Device Group", x);
showModal('xxAddAgentModal', 'idx_dlgOkButton', p20editmeshrelayEx); showModal('xxAddAgentModal', 'idx_dlgOkButton', p20editmeshrelayEx);
@ -15144,6 +15146,10 @@
} }
if ((currentMesh.mtype == 2) || (currentMesh.mtype == 4)) { if ((currentMesh.mtype == 2) || (currentMesh.mtype == 4)) {
x += '<div class="form-check"><label><input type=checkbox id=d20flag2 class="form-check-input me-2" onchange=p20editmeshfeaturesValidate() ' + ((flags & 2) ? 'checked' : '') + '>' + ((currentMesh.mtype == 4) ? "Sync server device name to port name" : "Sync server device name to hostname") + '</label><br></div>'; x += '<div class="form-check"><label><input type=checkbox id=d20flag2 class="form-check-input me-2" onchange=p20editmeshfeaturesValidate() ' + ((flags & 2) ? 'checked' : '') + '>' + ((currentMesh.mtype == 4) ? "Sync server device name to port name" : "Sync server device name to hostname") + '</label><br></div>';
if (currentMesh.mtype == 2) {
x += '<div style="margin-left:12px"><label><input type=checkbox id=d20flag8 class="form-check-input me-2" onchange=p20editmeshfeaturesValidate() ' + ((flags & 8) ? 'checked' : '') + '>' + "Prefer value of --agentName" + '</label><br></div>';
x += '<div style="margin-left:12px"><label><input type=checkbox id=d20flag16 class="form-check-input me-2" onchange=p20editmeshfeaturesValidate() ' + ((flags & 16) ? 'checked' : '') + '>' + "Allow to override server device name until next connection" + '</label><br></div>';
}
x += '<div class="form-check"><label><input type=checkbox id=d20flag1 class="form-check-input me-2" onchange=p20editmeshfeaturesValidate() ' + ((flags & 1) ? 'checked' : '') + '>' + "Remove device on disconnect" + '</label><br></div>'; x += '<div class="form-check"><label><input type=checkbox id=d20flag1 class="form-check-input me-2" onchange=p20editmeshfeaturesValidate() ' + ((flags & 1) ? 'checked' : '') + '>' + "Remove device on disconnect" + '</label><br></div>';
} }
x += '<div class="form-check"><label><input type=checkbox id=d20expireDevice class="form-check-input me-2" onchange=p20editmeshfeaturesValidate() ' + ((expire > 0) ? 'checked' : '') + '>' + "Automatically remove inactive devices" + '</label><br></div>'; x += '<div class="form-check"><label><input type=checkbox id=d20expireDevice class="form-check-input me-2" onchange=p20editmeshfeaturesValidate() ' + ((expire > 0) ? 'checked' : '') + '>' + "Automatically remove inactive devices" + '</label><br></div>';
@ -15165,6 +15171,16 @@
function p20editmeshfeaturesValidate() { function p20editmeshfeaturesValidate() {
var flags = 0, ok = true; var flags = 0, ok = true;
if (((currentMesh.mtype == 2) || (currentMesh.mtype == 4)) && (Q('d20flag1').checked)) { flags += 1; } 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); QE('d20expireDevice', (flags & 1) == 0);
var x = ((flags & 1) == 0) && Q('d20expireDevice').checked; var x = ((flags & 1) == 0) && Q('d20expireDevice').checked;
QV('d20expireDeviceDev', x); QV('d20expireDeviceDev', x);
@ -15177,6 +15193,8 @@
if ((currentMesh.mtype == 2) || (currentMesh.mtype == 4)) { if ((currentMesh.mtype == 2) || (currentMesh.mtype == 4)) {
if (Q('d20flag1').checked) { flags += 1; } if (Q('d20flag1').checked) { flags += 1; }
if (Q('d20flag2').checked) { flags += 2; } 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; } } if ((serverinfo.devGroupSessionRecording == 1) && (currentMesh.mtype != 4)) { if (Q('d20flag4').checked) { flags += 4; } }
var expireDevs = 0; var expireDevs = 0;

View File

@ -65,7 +65,12 @@ module.exports.CreateWebServer = function (parent, db, args, certificates, doneF
obj.db = db; obj.db = db;
obj.app = obj.express(); obj.app = obj.express();
if (obj.args.agentport) { obj.agentapp = 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.app.disable('x-powered-by');
obj.tlsServer = null; obj.tlsServer = null;
obj.tcpServer = null; obj.tcpServer = null;
@ -3514,7 +3519,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); 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 }); 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); handleRootRequestEx(req, res, domain);
return; return;
} }
@ -7067,6 +7078,7 @@ module.exports.CreateWebServer = function (parent, db, args, certificates, doneF
// User credentials are stored in session, just check again and get userid // User credentials are stored in session, just check again and get userid
obj.authenticate(sec.tuser, sec.tpass, domain, function (err, userid, passhint, loginOptions) { obj.authenticate(sec.tuser, sec.tpass, domain, function (err, userid, passhint, loginOptions) {
if ((userid != null) && (err == null)) { if ((userid != null) && (err == null)) {
var user = obj.users[userid]; // Get user object
// Login data correct, now exchange authorization code for 2FA // Login data correct, now exchange authorization code for 2FA
client.exchangeAuthorizationCodeFor2FAResult(req.query.duo_code, userid.split('/')[2]).then(function (data) { client.exchangeAuthorizationCodeFor2FAResult(req.query.duo_code, userid.split('/')[2]).then(function (data) {
const sec = parent.decryptSessionData(req.session.e); const sec = parent.decryptSessionData(req.session.e);
@ -7082,6 +7094,12 @@ module.exports.CreateWebServer = function (parent, db, args, certificates, doneF
delete sec.tpass; delete sec.tpass;
req.session.e = parent.encryptSessionData(sec); 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 }); 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)); res.redirect(domain.url + getQueryPortion(req));
}).catch(function (err) { }).catch(function (err) {
const sec = parent.decryptSessionData(req.session.e); const sec = parent.decryptSessionData(req.session.e);
@ -7092,6 +7110,10 @@ module.exports.CreateWebServer = function (parent, db, args, certificates, doneF
req.session.e = parent.encryptSessionData(sec); req.session.e = parent.encryptSessionData(sec);
req.session.loginmode = 1; req.session.loginmode = 1;
req.session.messageid = 117; // Invalid security check 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)); res.redirect(domain.url + getQueryPortion(req));
}); });
} else { } else {