mirror of
https://github.com/Ylianst/MeshCentral.git
synced 2025-02-22 19:12:28 -05:00
Merge branch 'master' of https://github.com/silversword411/MeshCentral
This commit is contained in:
commit
c65dfdd59e
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -4,7 +4,7 @@
|
||||
"agentVersion": "New Version",
|
||||
"group": "Device Group",
|
||||
"url": "Server URL",
|
||||
"meshName": "Mesh Name",
|
||||
"meshName": "Group Name",
|
||||
"meshId": "Group Identifier",
|
||||
"serverId": "Server Identifier",
|
||||
"setup": "Setup",
|
||||
@ -311,7 +311,7 @@
|
||||
"agent": "Agent",
|
||||
"group": "Apparaat groep",
|
||||
"url": "Server URL",
|
||||
"meshName": "Mesh naam",
|
||||
"meshName": "Groepsnaam",
|
||||
"meshId": "Groepsidentificatie",
|
||||
"serverId": "Server identificatie",
|
||||
"setup": "Setup",
|
||||
|
@ -1,15 +1,15 @@
|
||||
{
|
||||
"3": {
|
||||
"filename": "MeshService-signed.exe",
|
||||
"hash": "19F470D41D70288E7E95C8BC8066E68DD112DBCE8A5E7FBF9D1A3AB2FD2E47959820B8AB19835C6B951B036427331318",
|
||||
"size": 3463488,
|
||||
"mtime": "2022-01-07T23:07:37Z"
|
||||
"hash": "93917AC2C4A3A6A034B39675FA658B0A67F480DDE7BA5607A75F6A711D7ADC553208D98678340796D48813D1F4B56A94",
|
||||
"size": 3656000,
|
||||
"mtime": "2022-02-13T20:24:29Z"
|
||||
},
|
||||
"4": {
|
||||
"filename": "MeshService64-signed.exe",
|
||||
"hash": "C0A2CB8FEFAA7414F1CD6D37E25CB8FE10D680F614FD0AA338BC2C0786EFC07C3BCE03BD4CBC075FD387B5642A135E25",
|
||||
"size": 3079488,
|
||||
"mtime": "2022-01-07T23:07:40Z"
|
||||
"hash": "B7AC4F1A3A66D0C377CE8E19FC86A666E9BA85AE233C6278CDCA05D156B5F2E018EC5C9FAE2A5968F2E64D0D0417B4CD",
|
||||
"size": 3272000,
|
||||
"mtime": "2022-02-13T20:24:32Z"
|
||||
},
|
||||
"5": {
|
||||
"filename": "meshagent_x86",
|
||||
@ -132,3 +132,4 @@
|
||||
"mtime": "2022-01-08T00:23:52Z"
|
||||
}
|
||||
}
|
||||
0
|
||||
|
@ -171,6 +171,12 @@ var agentFileHttpRequests = {}; // Currently active agent HTTPS GET requests fro
|
||||
var agentFileHttpPendingRequests = []; // Pending HTTPS GET requests from the server.
|
||||
var debugConsole = (global._MSH && (_MSH().debugConsole == 1));
|
||||
|
||||
var color_options =
|
||||
{
|
||||
background: (global._MSH != null) ? global._MSH().background : '0,54,105',
|
||||
foreground: (global._MSH != null) ? global._MSH().foreground : '255,255,255'
|
||||
};
|
||||
|
||||
if (process.platform == 'win32' && require('user-sessions').isRoot()) {
|
||||
// Check the Agent Uninstall MetaData for correctness, as the installer may have written an incorrect value
|
||||
try {
|
||||
@ -1091,7 +1097,7 @@ function handleServerCommand(data) {
|
||||
ipr.username = data.username;
|
||||
global._clientmessage = ipr.then(function (img)
|
||||
{
|
||||
this.messagebox = require('win-dialog').create(this.title, this.message, this.username, { timeout: 120000, b64Image: img.split(',').pop() });
|
||||
this.messagebox = require('win-dialog').create(this.title, this.message, this.username, { timeout: 120000, b64Image: img.split(',').pop(), background: color_options.background, foreground: color_options.foreground });
|
||||
this.__childPromise.addMessage = this.messagebox.addMessage.bind(this.messagebox);
|
||||
return (this.messagebox);
|
||||
});
|
||||
@ -2072,7 +2078,7 @@ function onTunnelData(data) {
|
||||
ipr.username = this.httprequest.realname;
|
||||
ipr.translations = { Allow: currentTranslation['allow'], Deny: currentTranslation['deny'], Auto: currentTranslation['autoAllowForFive'], Caption: consentMessage };
|
||||
this.httprequest.tpromise._consent = ipr.then(function (img) {
|
||||
this.consent = require('win-userconsent').create(this.consentTitle, this.consentMessage, this.username, { b64Image: img.split(',').pop(), timeout: 30000, translations: this.translations });
|
||||
this.consent = require('win-userconsent').create(this.consentTitle, this.consentMessage, this.username, { b64Image: img.split(',').pop(), timeout: 30000, translations: this.translations, background: color_options.background, foreground: color_options.foreground });
|
||||
this.__childPromise.close = this.consent.close.bind(this.consent);
|
||||
return (this.consent);
|
||||
});
|
||||
@ -2372,7 +2378,7 @@ function onTunnelData(data) {
|
||||
this.httprequest.desktop.kvm.users.splice(i, 1);
|
||||
this.httprequest.desktop.kvm.connectionBar.removeAllListeners('close');
|
||||
this.httprequest.desktop.kvm.connectionBar.close();
|
||||
this.httprequest.desktop.kvm.connectionBar = require('notifybar-desktop')(this.httprequest.privacybartext.replace('{0}', this.httprequest.desktop.kvm.rusers.join(', ')).replace('{1}', this.httprequest.desktop.kvm.users.join(', ')), require('MeshAgent')._tsid);
|
||||
this.httprequest.desktop.kvm.connectionBar = require('notifybar-desktop')(this.httprequest.privacybartext.replace('{0}', this.httprequest.desktop.kvm.rusers.join(', ')).replace('{1}', this.httprequest.desktop.kvm.users.join(', ')), require('MeshAgent')._tsid, color_options);
|
||||
this.httprequest.desktop.kvm.connectionBar.httprequest = this.httprequest;
|
||||
this.httprequest.desktop.kvm.connectionBar.on('close', function () {
|
||||
MeshServerLogEx(29, null, "Remote Desktop Connection forcefully closed by local user (" + this.httprequest.remoteaddr + ")", this.httprequest);
|
||||
@ -2433,7 +2439,7 @@ function onTunnelData(data) {
|
||||
ipr.username = this.httprequest.realname;
|
||||
ipr.translation = { Allow: currentTranslation['allow'], Deny: currentTranslation['deny'], Auto: currentTranslation['autoAllowForFive'], Caption: consentMessage };
|
||||
pr = ipr.then(function (img) {
|
||||
this.consent = require('win-userconsent').create(this.consentTitle, this.consentMessage, this.username, { b64Image: img.split(',').pop(), uid: this.tsid, timeout: 30000, translations: this.translation });
|
||||
this.consent = require('win-userconsent').create(this.consentTitle, this.consentMessage, this.username, { b64Image: img.split(',').pop(), uid: this.tsid, timeout: 30000, translations: this.translation, background: color_options.background, foreground: color_options.foreground });
|
||||
this.__childPromise.close = this.consent.close.bind(this.consent);
|
||||
return (this.consent);
|
||||
});
|
||||
@ -2478,7 +2484,7 @@ function onTunnelData(data) {
|
||||
this.ws.httprequest.desktop.kvm.connectionBar.close();
|
||||
}
|
||||
try {
|
||||
this.ws.httprequest.desktop.kvm.connectionBar = require('notifybar-desktop')(this.ws.httprequest.privacybartext.replace('{0}', this.ws.httprequest.desktop.kvm.rusers.join(', ')).replace('{1}', this.ws.httprequest.desktop.kvm.users.join(', ')), require('MeshAgent')._tsid);
|
||||
this.ws.httprequest.desktop.kvm.connectionBar = require('notifybar-desktop')(this.ws.httprequest.privacybartext.replace('{0}', this.ws.httprequest.desktop.kvm.rusers.join(', ')).replace('{1}', this.ws.httprequest.desktop.kvm.users.join(', ')), require('MeshAgent')._tsid, color_options);
|
||||
MeshServerLogEx(31, null, "Remote Desktop Connection Bar Activated/Updated (" + this.ws.httprequest.remoteaddr + ")", this.ws.httprequest);
|
||||
} catch (ex) {
|
||||
if (process.platform != 'darwin') {
|
||||
@ -2530,7 +2536,7 @@ function onTunnelData(data) {
|
||||
this.httprequest.desktop.kvm.connectionBar.close();
|
||||
}
|
||||
try {
|
||||
this.httprequest.desktop.kvm.connectionBar = require('notifybar-desktop')(this.httprequest.privacybartext.replace('{0}', this.httprequest.desktop.kvm.rusers.join(', ')).replace('{1}', this.httprequest.desktop.kvm.users.join(', ')), require('MeshAgent')._tsid);
|
||||
this.httprequest.desktop.kvm.connectionBar = require('notifybar-desktop')(this.httprequest.privacybartext.replace('{0}', this.httprequest.desktop.kvm.rusers.join(', ')).replace('{1}', this.httprequest.desktop.kvm.users.join(', ')), require('MeshAgent')._tsid, color_options);
|
||||
MeshServerLogEx(31, null, "Remote Desktop Connection Bar Activated/Updated (" + this.httprequest.remoteaddr + ")", this.httprequest);
|
||||
} catch (ex) {
|
||||
MeshServerLogEx(32, null, "Remote Desktop Connection Bar Failed or not Supported (" + this.httprequest.remoteaddr + ")", this.httprequest);
|
||||
@ -2616,7 +2622,7 @@ function onTunnelData(data) {
|
||||
ipr.username = this.httprequest.realname;
|
||||
ipr.translations = { Allow: currentTranslation['allow'], Deny: currentTranslation['deny'], Auto: currentTranslation['autoAllowForFive'], Caption: consentMessage };
|
||||
pr = ipr.then(function (img) {
|
||||
this.consent = require('win-userconsent').create(this.consentTitle, this.consentMessage, this.username, { b64Image: img.split(',').pop(), timeout: 30000, translations: this.translations });
|
||||
this.consent = require('win-userconsent').create(this.consentTitle, this.consentMessage, this.username, { b64Image: img.split(',').pop(), timeout: 30000, translations: this.translations, background: color_options.background, foreground: color_options.foreground });
|
||||
this.__childPromise.close = this.consent.close.bind(this.consent);
|
||||
return (this.consent);
|
||||
});
|
||||
|
@ -3,7 +3,7 @@
|
||||
"compression": "^1.7.4",
|
||||
"cookie-session": "^1.4.0",
|
||||
"express": "^4.17.0",
|
||||
"express-handlebars": "^3.1.0",
|
||||
"express-handlebars": "^5.3.5",
|
||||
"express-ws": "^4.0.0",
|
||||
"ipcheck": "^0.1.0",
|
||||
"minimist": "^1.2.5",
|
||||
|
@ -223,9 +223,10 @@ function CreateIPKVMManager(parent) {
|
||||
if (obj.managedPorts[nodeid] != null) {
|
||||
// This port is no longer connected
|
||||
parent.ClearConnectivityState(sender.meshid, nodeid, 1, null, null);
|
||||
const mesh = parent.webserver.meshes[sender.meshid];
|
||||
|
||||
// If the device group policy is set to auto-remove devices, remove it now
|
||||
if ((mesh.flags) && (mesh.flags & 1)) { // Auto-remove devices
|
||||
if ((mesh != null) && (mesh.flags) && (mesh.flags & 1)) { // Auto-remove devices
|
||||
parent.db.Remove(nodeid); // Remove node with that id
|
||||
parent.db.Remove('nt' + nodeid); // Remove notes
|
||||
parent.db.Remove('lc' + nodeid); // Remove last connect time
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "meshcentral",
|
||||
"version": "0.9.79",
|
||||
"version": "0.9.83",
|
||||
"keywords": [
|
||||
"Remote Device Management",
|
||||
"Remote Device Monitoring",
|
||||
@ -41,7 +41,7 @@
|
||||
"compression": "^1.7.4",
|
||||
"cookie-session": "^1.4.0",
|
||||
"express": "^4.17.0",
|
||||
"express-handlebars": "^3.1.0",
|
||||
"express-handlebars": "^5.3.5",
|
||||
"express-ws": "^4.0.0",
|
||||
"ipcheck": "^0.1.0",
|
||||
"minimist": "^1.2.5",
|
||||
|
@ -3217,3 +3217,12 @@ a {
|
||||
.night .thermalSensor {
|
||||
color: #000;
|
||||
}
|
||||
|
||||
.desktopButtons {
|
||||
padding-top: 2px;
|
||||
}
|
||||
|
||||
.night .desktopButtons {
|
||||
filter: invert(60%);
|
||||
-webkit-filter: invert(60%);
|
||||
}
|
@ -956,6 +956,7 @@
|
||||
},
|
||||
{
|
||||
"en": ", 16 grays",
|
||||
"nl": ", 16 grijstinten",
|
||||
"ru": ", 16 оттенков серого",
|
||||
"xloc": [
|
||||
"player.handlebars->3->35"
|
||||
@ -963,6 +964,7 @@
|
||||
},
|
||||
{
|
||||
"en": ", 256 grays",
|
||||
"nl": ", 256 grijstinten",
|
||||
"ru": ", 256 оттенков серого",
|
||||
"xloc": [
|
||||
"player.handlebars->3->36"
|
||||
@ -1776,6 +1778,7 @@
|
||||
},
|
||||
{
|
||||
"en": "1 byte-per-pixel",
|
||||
"nl": "1 byte per pixel",
|
||||
"ru": "1 байт на пиксель",
|
||||
"xloc": [
|
||||
"player.handlebars->3->34"
|
||||
@ -2630,6 +2633,7 @@
|
||||
},
|
||||
{
|
||||
"en": "2 byte-per-pixel",
|
||||
"nl": "2 byte per pixel",
|
||||
"ru": "2 байта на пиксель",
|
||||
"xloc": [
|
||||
"player.handlebars->3->33"
|
||||
@ -13711,6 +13715,7 @@
|
||||
},
|
||||
{
|
||||
"en": "Closed desktop multiplex session \\\"{0}\\\", {1} second(s)",
|
||||
"nl": "Gesloten desktop multiplexsessie \\\"{0}\\\", {1} seconde(n)",
|
||||
"xloc": [
|
||||
"default.handlebars->39->2277"
|
||||
]
|
||||
@ -23774,6 +23779,7 @@
|
||||
},
|
||||
{
|
||||
"en": "Encoding Quality",
|
||||
"nl": "Coderingskwaliteit",
|
||||
"ru": "Качество кодирования",
|
||||
"xloc": [
|
||||
"player.handlebars->3->37"
|
||||
@ -26115,6 +26121,7 @@
|
||||
},
|
||||
{
|
||||
"en": "Finished recording session \\\"{0}\\\", {1} second(s)",
|
||||
"nl": "Beëindigde opnamesessie \\\"{0}\\\", {1} seconde(n)",
|
||||
"xloc": [
|
||||
"default.handlebars->39->2276"
|
||||
]
|
||||
@ -28212,6 +28219,13 @@
|
||||
"default.handlebars->39->2469"
|
||||
]
|
||||
},
|
||||
{
|
||||
"en": "Group Name",
|
||||
"nl": "Groepsnaam",
|
||||
"xloc": [
|
||||
"agent-translations.json"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cs": "Skupina vytvořená",
|
||||
"da": "Gruppér efter",
|
||||
@ -33311,6 +33325,7 @@
|
||||
},
|
||||
{
|
||||
"en": "Joined desktop multiplex session \\\"{0}\\\"",
|
||||
"nl": "Deelgenomen aan desktop multiplex-sessie \\\"{0}\\\"",
|
||||
"xloc": [
|
||||
"default.handlebars->39->2273"
|
||||
]
|
||||
@ -34971,6 +34986,7 @@
|
||||
},
|
||||
{
|
||||
"en": "Left the desktop multiplex session \\\"{0}\\\" after {1} second(s).",
|
||||
"nl": "Verliet de desktop multiplexsessie \\\"{0}\\\" na {1} seconde(n).",
|
||||
"xloc": [
|
||||
"default.handlebars->39->2274"
|
||||
]
|
||||
@ -38128,6 +38144,7 @@
|
||||
},
|
||||
{
|
||||
"en": "Maximum keys reached.",
|
||||
"nl": "Maximum aantal sleutels bereikt.",
|
||||
"xloc": [
|
||||
"default.handlebars->39->217"
|
||||
]
|
||||
@ -38347,10 +38364,7 @@
|
||||
"sv": "Masknamn",
|
||||
"tr": "Mesh Adı",
|
||||
"zh-chs": "网格名称",
|
||||
"zh-cht": "網格名稱",
|
||||
"xloc": [
|
||||
"agent-translations.json"
|
||||
]
|
||||
"zh-cht": "網格名稱"
|
||||
},
|
||||
{
|
||||
"cs": "Mesh předávání (relay)",
|
||||
@ -55906,7 +55920,7 @@
|
||||
"tr": "Karanlık modu ayarla",
|
||||
"zh-chs": "设置深色模式",
|
||||
"xloc": [
|
||||
"default-mobile.handlebars->container->page_content->column_l->p3->p3info->3->p3AccountActions->p2AccountActions->3->11->0"
|
||||
"default-mobile.handlebars->container->page_content->column_l->p3->p3info->3->p3AccountActions->p2AccountActions->3->setDarkModeLink->0"
|
||||
]
|
||||
},
|
||||
{
|
||||
@ -58774,6 +58788,7 @@
|
||||
},
|
||||
{
|
||||
"en": "Started desktop multiplex session \\\"{0}\\\"",
|
||||
"nl": "Startte een Desktop multiplexsessie \\\"{0}\\\"",
|
||||
"xloc": [
|
||||
"default.handlebars->39->2275"
|
||||
]
|
||||
|
@ -668,19 +668,19 @@
|
||||
<span id="DeskTimer" title="Session time"></span>
|
||||
<select id=termdisplays style="display:none" onchange=deskSetDisplay(event) onkeypress="return false" onkeydown="return false"></select>
|
||||
<input id=DeskToolsButton type=button value=Tools title="Toggle tools view" onkeypress="return false" onkeydown="return false" onclick="toggleDeskTools()" />
|
||||
<span id=DeskChatButton class="deskarea" title="Open chat window to this computer"><img src='images/icon-chat.png' onclick=deviceChat(event) height=16 width=16 style=padding-top:2px /></span>
|
||||
<span id=DeskNotifyButton title="Display a notification on the remote computer"><img src='images/icon-notify.png' onclick=deviceToastFunction() height=16 width=16 style=padding-top:2px /></span>
|
||||
<span id=DeskLockButton title="Lock the remote computer"><img src='images/icon-lock.png' onclick=deviceLockFunction() height=16 width=16 style=padding-top:2px /></span>
|
||||
<span id=DeskOpenWebButton title="Open a web address on the remote computer"><img src='images/icon-url2.png' onclick=deviceUrlFunction() height=16 width=16 style=padding-top:2px /></span>
|
||||
<span id=DeskBackgroundButton title="Toggle remote desktop background"><img src='images/icon-background.png' onclick=deviceToggleBackground(event) height=16 width=16 style=padding-top:2px /></span>
|
||||
<span id=DeskSaveImageButton title="Save a screenshot of the remote desktop"><img src='images/icon-camera.png' onclick=deskSaveImage() height=16 width=16 style=padding-top:2px /></span>
|
||||
<span id=DeskRecordButton cmenu=deskPlayerContextMenu title="Record remote desktop session to file" style="display:none"><img id=DeskRecordButtonImage src='images/icon-film.png' onclick=deskRecordSession() height=16 width=16 style=padding-top:2px /></span>
|
||||
<span id=DeskClipboardInButton title="Download remote clipboard to local clipboard" style="display:none"><img id=DeskClipboardInButtonImage src='images/icon-clipboard-in.png' onclick=deskClipboardInFunction() height=16 width=16 style=padding-top:2px /></span>
|
||||
<span id=DeskClipboardOutButton title="Upload local clipboard to remote device"><img id=DeskClipboardOutButtonImage src='images/icon-clipboard-out.png' onclick=deskClipboardOutFunction() height=16 width=16 style=padding-top:2px /></span>
|
||||
<span id=DeskRefreshButton title="Refresh the desktop"><img id=DeskRefreshButtonImage src='images/icon-refresh.png' onclick=deskRefreshFunction() height=16 width=16 style=padding-top:2px /></span>
|
||||
<span id=DeskInputLockedButton title="Remote input is locked"><img id=DeskInputLockedButtonImage src='images/icon-keylock-red.png' onclick=deskInputLockFunction(0) height=16 width=16 style=padding-top:2px /></span>
|
||||
<span id=DeskInputUnLockedButton title="Remote input is unlocked"><img id=DeskInputUnLockedButtonImage src='images/icon-keylock.png' onclick=deskInputLockFunction(1) height=16 width=16 style=padding-top:2px /></span>
|
||||
<span id=DeskGuestShareButton title="Share the device with a guest"><img id=DeskInputUnLockedButtonImage src='images/icon-share2.png' onclick=showShareDevice() height=16 width=16 style=padding-top:2px /></span>
|
||||
<span id=DeskChatButton class="deskarea" title="Open chat window to this computer"><img class="desktopButtons" src='images/icon-chat.png' onclick=deviceChat(event) height=16 width=16 style=padding-top:2px /></span>
|
||||
<span id=DeskNotifyButton title="Display a notification on the remote computer"><img class="desktopButtons" src='images/icon-notify.png' onclick=deviceToastFunction() height=16 width=16 style=padding-top:2px /></span>
|
||||
<span id=DeskLockButton title="Lock the remote computer"><img src='images/icon-lock.png' class="desktopButtons" onclick=deviceLockFunction() height=16 width=16 /></span>
|
||||
<span id=DeskOpenWebButton title="Open a web address on the remote computer"><img class="desktopButtons" src='images/icon-url2.png' onclick=deviceUrlFunction() height=16 width=16 /></span>
|
||||
<span id=DeskBackgroundButton title="Toggle remote desktop background"><img class="desktopButtons" src='images/icon-background.png' onclick=deviceToggleBackground(event) height=16 width=16 /></span>
|
||||
<span id=DeskSaveImageButton title="Save a screenshot of the remote desktop"><img class="desktopButtons" src='images/icon-camera.png' onclick=deskSaveImage() height=16 width=16 /></span>
|
||||
<span id=DeskRecordButton cmenu=deskPlayerContextMenu title="Record remote desktop session to file" style="display:none"><img class="desktopButtons" id=DeskRecordButtonImage src='images/icon-film.png' onclick=deskRecordSession() height=16 width=16 /></span>
|
||||
<span id=DeskClipboardInButton title="Download remote clipboard to local clipboard" style="display:none"><img class="desktopButtons" id=DeskClipboardInButtonImage src='images/icon-clipboard-in.png' onclick=deskClipboardInFunction() height=16 width=16 /></span>
|
||||
<span id=DeskClipboardOutButton title="Upload local clipboard to remote device"><img class="desktopButtons" id=DeskClipboardOutButtonImage src='images/icon-clipboard-out.png' onclick=deskClipboardOutFunction() height=16 width=16 /></span>
|
||||
<span id=DeskRefreshButton title="Refresh the desktop"><img class="desktopButtons" id=DeskRefreshButtonImage src='images/icon-refresh.png' onclick=deskRefreshFunction() height=16 width=16 /></span>
|
||||
<span id=DeskInputLockedButton title="Remote input is locked"><img class="desktopButtons" id=DeskInputLockedButtonImage src='images/icon-keylock-red.png' onclick=deskInputLockFunction(0) height=16 width=16 /></span>
|
||||
<span id=DeskInputUnLockedButton title="Remote input is unlocked"><img class="desktopButtons" id=DeskInputUnLockedButtonImage src='images/icon-keylock.png' onclick=deskInputLockFunction(1) height=16 width=16 /></span>
|
||||
<span id=DeskGuestShareButton title="Share the device with a guest"><img class="desktopButtons" id=DeskInputUnLockedButtonImage src='images/icon-share2.png' onclick=showShareDevice() height=16 width=16 /></span>
|
||||
</div>
|
||||
<div>
|
||||
<select id="deskkeys" cmenu=deskKeyShortcutContextMenu></select>
|
||||
@ -2121,7 +2121,7 @@
|
||||
if (userinfo.otphkeys > 0) { authFactorCount += userinfo.otphkeys; } // FIDO hardware factor
|
||||
if ((features & 0x00800000) && (userinfo.otpekey == 1)) { authFactorCount++; } // EMail factor
|
||||
if ((features & 0x02000000) && (features & 0x04000000) && (userinfo.phone != null)) { authFactorCount++; } // SMS factor
|
||||
if ((authFactorCount > 0) && (userinfo.otpkeys > 0) && ((features & 0x40000) == 0)) { authFactorCount++; } // Backup keys
|
||||
if ((authFactorCount > 0) && (userinfo.otpkeys > 0) && ((features2 & 0x40000) == 0)) { authFactorCount++; } // Backup keys
|
||||
return authFactorCount;
|
||||
}
|
||||
|
||||
@ -17216,6 +17216,11 @@
|
||||
}
|
||||
}
|
||||
|
||||
// Request Confirmation if closing while a desktop, terminal session is active
|
||||
window.addEventListener('beforeunload', function (e) {
|
||||
if (((desktop != null) && (xxcurrentView == 11)) || ((terminal != null) && (xxcurrentView == 12))) { e.preventDefault(); e.returnValue = ''; }
|
||||
});
|
||||
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
@ -5587,7 +5587,7 @@ module.exports.CreateWebServer = function (parent, db, args, certificates, doneF
|
||||
}
|
||||
|
||||
// Setup middleware
|
||||
obj.app.engine('handlebars', obj.exphbs({ defaultLayout: null })); // defaultLayout: 'main'
|
||||
obj.app.engine('handlebars', obj.exphbs({ defaultLayout: false }));
|
||||
obj.app.set('view engine', 'handlebars');
|
||||
if (obj.args.trustedproxy) {
|
||||
// Reverse proxy should add the "X-Forwarded-*" headers
|
||||
|
Loading…
x
Reference in New Issue
Block a user