mirror of
https://github.com/Ylianst/MeshCentral.git
synced 2024-11-22 22:17:31 +03:00
Added support for user notification.
This commit is contained in:
parent
ba3503ebe0
commit
0aae8c67d0
@ -423,6 +423,8 @@ function createMeshCore(agent) {
|
|||||||
tunnel.on('error', function (e) { sendConsoleText('ERROR: ' + JSON.stringify(e)); });
|
tunnel.on('error', function (e) { sendConsoleText('ERROR: ' + JSON.stringify(e)); });
|
||||||
tunnel.sessionid = data.sessionid;
|
tunnel.sessionid = data.sessionid;
|
||||||
tunnel.rights = data.rights;
|
tunnel.rights = data.rights;
|
||||||
|
tunnel.consent = data.consent;
|
||||||
|
tunnel.username = data.username;
|
||||||
tunnel.state = 0;
|
tunnel.state = 0;
|
||||||
tunnel.url = xurl;
|
tunnel.url = xurl;
|
||||||
tunnel.protocol = 0;
|
tunnel.protocol = 0;
|
||||||
@ -706,6 +708,11 @@ function createMeshCore(agent) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Perform notification if needed
|
||||||
|
if (this.httprequest.consent && (this.httprequest.consent & 2)) {
|
||||||
|
require('toaster').Toast('MeshCentral', this.httprequest.username + ' started a remote terminal session.');
|
||||||
|
}
|
||||||
|
|
||||||
// Remote terminal using native pipes
|
// Remote terminal using native pipes
|
||||||
if (process.platform == "win32")
|
if (process.platform == "win32")
|
||||||
{
|
{
|
||||||
@ -759,14 +766,16 @@ function createMeshCore(agent) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Perform notification if needed
|
||||||
|
if (this.httprequest.consent && (this.httprequest.consent & 1)) {
|
||||||
|
require('toaster').Toast('MeshCentral', this.httprequest.username + ' started a remote desktop session.');
|
||||||
|
}
|
||||||
|
|
||||||
// Remote desktop using native pipes
|
// Remote desktop using native pipes
|
||||||
this.httprequest.desktop = { state: 0, kvm: mesh.getRemoteDesktopStream(), tunnel: this };
|
this.httprequest.desktop = { state: 0, kvm: mesh.getRemoteDesktopStream(), tunnel: this };
|
||||||
this.httprequest.desktop.kvm.parent = this.httprequest.desktop;
|
this.httprequest.desktop.kvm.parent = this.httprequest.desktop;
|
||||||
this.desktop = this.httprequest.desktop;
|
this.desktop = this.httprequest.desktop;
|
||||||
|
|
||||||
// Display a toast message
|
|
||||||
//require('toaster').Toast('MeshCentral', 'Remote Desktop Control Started.');
|
|
||||||
|
|
||||||
this.end = function () {
|
this.end = function () {
|
||||||
--this.desktop.kvm.connectionCount;
|
--this.desktop.kvm.connectionCount;
|
||||||
|
|
||||||
@ -811,6 +820,11 @@ function createMeshCore(agent) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Perform notification if needed
|
||||||
|
if (this.httprequest.consent && (this.httprequest.consent & 4)) {
|
||||||
|
require('toaster').Toast('MeshCentral', this.httprequest.username + ' started a remote file access.');
|
||||||
|
}
|
||||||
|
|
||||||
// Setup files
|
// Setup files
|
||||||
// NOP
|
// NOP
|
||||||
}
|
}
|
||||||
|
2
agents/meshcore.min.js
vendored
2
agents/meshcore.min.js
vendored
File diff suppressed because one or more lines are too long
@ -145,7 +145,7 @@ function WindowsConsole()
|
|||||||
this.TrayIcon.remove();
|
this.TrayIcon.remove();
|
||||||
handled = true;
|
handled = true;
|
||||||
}
|
}
|
||||||
if (!handled) { console.log(msg); }
|
//if (!handled) { console.log(msg); }
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
retVal.remove = function remove()
|
retVal.remove = function remove()
|
||||||
|
@ -1 +1 @@
|
|||||||
var TrayIconFlags={NIF_MESSAGE:1,NIF_ICON:2,NIF_TIP:4,NIF_STATE:8,NIF_INFO:16,NIF_GUID:32,NIF_REALTIME:64,NIF_SHOWTIP:128,NIM_ADD:0,NIM_MODIFY:1,NIM_DELETE:2,NIM_SETFOCUS:3,NIM_SETVERSION:4};var NOTIFYICON_VERSION_4=4;var MessageTypes={WM_APP:32768,WM_USER:1024};function WindowsConsole(){if(process.platform=="win32"){this._ObjectID="win-console";this._Marshal=require("_GenericMarshal");this._kernel32=this._Marshal.CreateNativeProxy("kernel32.dll");this._user32=this._Marshal.CreateNativeProxy("user32.dll");this._kernel32.CreateMethod("GetConsoleWindow");this._kernel32.CreateMethod("GetCurrentThread");this._user32.CreateMethod("ShowWindow");this._user32.CreateMethod("LoadImageA");this._user32.CreateMethod({method:"GetMessageA",threadDispatch:1});this._shell32=this._Marshal.CreateNativeProxy("Shell32.dll");this._shell32.CreateMethod("Shell_NotifyIconA");this._handle=this._kernel32.GetConsoleWindow();this.minimize=function(){this._user32.ShowWindow(this._handle,6)};this.restore=function(){this._user32.ShowWindow(this._handle,9)};this.hide=function(){this._user32.ShowWindow(this._handle,0)};this.show=function(){this._user32.ShowWindow(this._handle,5)};this._loadicon=function(c){var b=this._user32.LoadImageA(0,this._Marshal.CreateVariable(c),1,0,0,16|32768|64);return(b)};this.SetTrayIcon=function a(h){var b=this._Marshal.CreateVariable(this._Marshal.PointerSize==4?508:528);b.toBuffer().writeUInt32LE(b._size,0);var n=TrayIconFlags.NIF_TIP|TrayIconFlags.NIF_MESSAGE;h.filter=MessageTypes.WM_APP+1;b.Deref(this._Marshal.PointerSize==4?16:24,4).toBuffer().writeUInt32LE(h.filter);if(!h.noBalloon){n|=TrayIconFlags.NIF_INFO}if(h.icon){n|=TrayIconFlags.NIF_ICON;var c=b.Deref(this._Marshal.PointerSize==4?20:32,this._Marshal.PointerSize);h.icon.pointerBuffer().copy(c.toBuffer())}b.Deref(this._Marshal.PointerSize*2,4).toBuffer().writeUInt32LE(1);b.Deref(this._Marshal.PointerSize==4?12:20,4).toBuffer().writeUInt32LE(n);b.Deref(this._Marshal.PointerSize==4?416:432,4).toBuffer().writeUInt32LE(NOTIFYICON_VERSION_4);var m=b.Deref(this._Marshal.PointerSize==4?24:40,128);var k=b.Deref(this._Marshal.PointerSize==4?160:176,256);var l=b.Deref(this._Marshal.PointerSize==4?420:436,64);if(h.szTip){Buffer.from(h.szTip).copy(m.toBuffer())}if(h.szInfo){Buffer.from(h.szInfo).copy(k.toBuffer())}if(h.szInfoTitle){Buffer.from(h.szInfoTitle).copy(l.toBuffer())}var d=require("win-message-pump");retVal={_ObjectID:"WindowsConsole.TrayIcon",MessagePump:new d(h)};var j=require("events").inherits(retVal);j.createEvent("ToastClicked");j.createEvent("IconHover");j.createEvent("ToastDismissed");retVal.Options=h;retVal.MessagePump.TrayIcon=retVal;retVal.MessagePump.NotifyData=b;retVal.MessagePump.WindowsConsole=this;retVal.MessagePump.on("exit",function e(o){console.log("Pump Exited");if(this.TrayIcon){this.TrayIcon.remove()}});retVal.MessagePump.on("hwnd",function f(o){h.hwnd=o;o.pointerBuffer().copy(this.NotifyData.Deref(this.WindowsConsole._Marshal.PointerSize,this.WindowsConsole._Marshal.PointerSize).toBuffer());if(this.WindowsConsole._shell32.Shell_NotifyIconA(TrayIconFlags.NIM_ADD,this.NotifyData).Val==0){}});retVal.MessagePump.on("message",function g(p){if(p.message==this.TrayIcon.Options.filter){var o=false;if(p.wparam==1&&p.lparam==1029){this.TrayIcon.emit("ToastClicked");o=true}if(p.wparam==1&&p.lparam==512){this.TrayIcon.emit("IconHover");o=true}if(this.TrayIcon.Options.balloonOnly&&p.wparam==1&&(p.lparam==1028||p.lparam==1029)){this.TrayIcon.emit("ToastDismissed");this.TrayIcon.remove();o=true}if(!o){console.log(p)}}});retVal.remove=function i(){this.MessagePump.WindowsConsole._shell32.Shell_NotifyIconA(TrayIconFlags.NIM_DELETE,this.MessagePump.NotifyData);this.MessagePump.stop();delete this.MessagePump.TrayIcon;delete this.MessagePump};return(retVal)}}}module.exports=new WindowsConsole();
|
var TrayIconFlags={NIF_MESSAGE:1,NIF_ICON:2,NIF_TIP:4,NIF_STATE:8,NIF_INFO:16,NIF_GUID:32,NIF_REALTIME:64,NIF_SHOWTIP:128,NIM_ADD:0,NIM_MODIFY:1,NIM_DELETE:2,NIM_SETFOCUS:3,NIM_SETVERSION:4};var NOTIFYICON_VERSION_4=4;var MessageTypes={WM_APP:32768,WM_USER:1024};function WindowsConsole(){if(process.platform=="win32"){this._ObjectID="win-console";this._Marshal=require("_GenericMarshal");this._kernel32=this._Marshal.CreateNativeProxy("kernel32.dll");this._user32=this._Marshal.CreateNativeProxy("user32.dll");this._kernel32.CreateMethod("GetConsoleWindow");this._kernel32.CreateMethod("GetCurrentThread");this._user32.CreateMethod("ShowWindow");this._user32.CreateMethod("LoadImageA");this._user32.CreateMethod({method:"GetMessageA",threadDispatch:1});this._shell32=this._Marshal.CreateNativeProxy("Shell32.dll");this._shell32.CreateMethod("Shell_NotifyIconA");this._handle=this._kernel32.GetConsoleWindow();this.minimize=function(){this._user32.ShowWindow(this._handle,6)};this.restore=function(){this._user32.ShowWindow(this._handle,9)};this.hide=function(){this._user32.ShowWindow(this._handle,0)};this.show=function(){this._user32.ShowWindow(this._handle,5)};this._loadicon=function(c){var b=this._user32.LoadImageA(0,this._Marshal.CreateVariable(c),1,0,0,16|32768|64);return(b)};this.SetTrayIcon=function a(h){var b=this._Marshal.CreateVariable(this._Marshal.PointerSize==4?508:528);b.toBuffer().writeUInt32LE(b._size,0);var n=TrayIconFlags.NIF_TIP|TrayIconFlags.NIF_MESSAGE;h.filter=MessageTypes.WM_APP+1;b.Deref(this._Marshal.PointerSize==4?16:24,4).toBuffer().writeUInt32LE(h.filter);if(!h.noBalloon){n|=TrayIconFlags.NIF_INFO}if(h.icon){n|=TrayIconFlags.NIF_ICON;var c=b.Deref(this._Marshal.PointerSize==4?20:32,this._Marshal.PointerSize);h.icon.pointerBuffer().copy(c.toBuffer())}b.Deref(this._Marshal.PointerSize*2,4).toBuffer().writeUInt32LE(1);b.Deref(this._Marshal.PointerSize==4?12:20,4).toBuffer().writeUInt32LE(n);b.Deref(this._Marshal.PointerSize==4?416:432,4).toBuffer().writeUInt32LE(NOTIFYICON_VERSION_4);var m=b.Deref(this._Marshal.PointerSize==4?24:40,128);var k=b.Deref(this._Marshal.PointerSize==4?160:176,256);var l=b.Deref(this._Marshal.PointerSize==4?420:436,64);if(h.szTip){Buffer.from(h.szTip).copy(m.toBuffer())}if(h.szInfo){Buffer.from(h.szInfo).copy(k.toBuffer())}if(h.szInfoTitle){Buffer.from(h.szInfoTitle).copy(l.toBuffer())}var d=require("win-message-pump");retVal={_ObjectID:"WindowsConsole.TrayIcon",MessagePump:new d(h)};var j=require("events").inherits(retVal);j.createEvent("ToastClicked");j.createEvent("IconHover");j.createEvent("ToastDismissed");retVal.Options=h;retVal.MessagePump.TrayIcon=retVal;retVal.MessagePump.NotifyData=b;retVal.MessagePump.WindowsConsole=this;retVal.MessagePump.on("exit",function e(o){console.log("Pump Exited");if(this.TrayIcon){this.TrayIcon.remove()}});retVal.MessagePump.on("hwnd",function f(o){h.hwnd=o;o.pointerBuffer().copy(this.NotifyData.Deref(this.WindowsConsole._Marshal.PointerSize,this.WindowsConsole._Marshal.PointerSize).toBuffer());if(this.WindowsConsole._shell32.Shell_NotifyIconA(TrayIconFlags.NIM_ADD,this.NotifyData).Val==0){}});retVal.MessagePump.on("message",function g(p){if(p.message==this.TrayIcon.Options.filter){var o=false;if(p.wparam==1&&p.lparam==1029){this.TrayIcon.emit("ToastClicked");o=true}if(p.wparam==1&&p.lparam==512){this.TrayIcon.emit("IconHover");o=true}if(this.TrayIcon.Options.balloonOnly&&p.wparam==1&&(p.lparam==1028||p.lparam==1029)){this.TrayIcon.emit("ToastDismissed");this.TrayIcon.remove();o=true}}});retVal.remove=function i(){this.MessagePump.WindowsConsole._shell32.Shell_NotifyIconA(TrayIconFlags.NIM_DELETE,this.MessagePump.NotifyData);this.MessagePump.stop();delete this.MessagePump.TrayIcon;delete this.MessagePump};return(retVal)}}}module.exports=new WindowsConsole();
|
12
meshrelay.js
12
meshrelay.js
@ -53,7 +53,7 @@ module.exports.CreateMeshRelay = function (parent, ws, req, domain, user, cookie
|
|||||||
};
|
};
|
||||||
|
|
||||||
obj.sendAgentMessage = function (command, userid, domainid) {
|
obj.sendAgentMessage = function (command, userid, domainid) {
|
||||||
var rights;
|
var rights, mesh;
|
||||||
if (command.nodeid == null) return false;
|
if (command.nodeid == null) return false;
|
||||||
var user = obj.parent.users[userid];
|
var user = obj.parent.users[userid];
|
||||||
if (user == null) return false;
|
if (user == null) return false;
|
||||||
@ -66,9 +66,13 @@ module.exports.CreateMeshRelay = function (parent, ws, req, domain, user, cookie
|
|||||||
if (agent != null) {
|
if (agent != null) {
|
||||||
// Check if we have permission to send a message to that node
|
// Check if we have permission to send a message to that node
|
||||||
rights = user.links[agent.dbMeshKey];
|
rights = user.links[agent.dbMeshKey];
|
||||||
if (rights != null || ((rights & 16) != 0)) { // TODO: 16 is console permission, may need more gradular permission checking
|
mesh = parent.meshes[agent.dbMeshKey];
|
||||||
|
if ((rights != null) && (mesh != null) || ((rights & 16) != 0)) { // TODO: 16 is console permission, may need more gradular permission checking
|
||||||
command.sessionid = ws.sessionId; // Set the session id, required for responses.
|
command.sessionid = ws.sessionId; // Set the session id, required for responses.
|
||||||
command.rights = rights.rights; // Add user rights flags to the message
|
command.rights = rights.rights; // Add user rights flags to the message
|
||||||
|
command.consent = mesh.consent; // Add user consent
|
||||||
|
if (typeof domain.userconsentflags == 'number') { command.consent |= domain.userconsentflags; } // Add server required consent flags
|
||||||
|
command.username = user.name; // Add user name
|
||||||
delete command.nodeid; // Remove the nodeid since it's implyed.
|
delete command.nodeid; // Remove the nodeid since it's implyed.
|
||||||
agent.send(JSON.stringify(command));
|
agent.send(JSON.stringify(command));
|
||||||
return true;
|
return true;
|
||||||
@ -79,9 +83,13 @@ module.exports.CreateMeshRelay = function (parent, ws, req, domain, user, cookie
|
|||||||
if (routing != null) {
|
if (routing != null) {
|
||||||
// Check if we have permission to send a message to that node
|
// Check if we have permission to send a message to that node
|
||||||
rights = user.links[routing.meshid];
|
rights = user.links[routing.meshid];
|
||||||
|
mesh = parent.meshes[routing.meshid];
|
||||||
if (rights != null || ((rights & 16) != 0)) { // TODO: 16 is console permission, may need more gradular permission checking
|
if (rights != null || ((rights & 16) != 0)) { // TODO: 16 is console permission, may need more gradular permission checking
|
||||||
command.fromSessionid = ws.sessionId; // Set the session id, required for responses.
|
command.fromSessionid = ws.sessionId; // Set the session id, required for responses.
|
||||||
command.rights = rights.rights; // Add user rights flags to the message
|
command.rights = rights.rights; // Add user rights flags to the message
|
||||||
|
command.consent = mesh.consent; // Add user consent
|
||||||
|
if (typeof domain.userconsentflags == 'number') { command.consent |= domain.userconsentflags; } // Add server required consent flags
|
||||||
|
command.username = user.name; // Add user name
|
||||||
obj.parent.parent.multiServer.DispatchMessageSingleServer(command, routing.serverid);
|
obj.parent.parent.multiServer.DispatchMessageSingleServer(command, routing.serverid);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
25
meshuser.js
25
meshuser.js
@ -125,10 +125,14 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use
|
|||||||
if (agent != null) {
|
if (agent != null) {
|
||||||
// Check if we have permission to send a message to that node
|
// Check if we have permission to send a message to that node
|
||||||
var rights = user.links[agent.dbMeshKey];
|
var rights = user.links[agent.dbMeshKey];
|
||||||
if ((rights != null) && ((rights.rights & 8) || (rights.rights & 256))) { // 8 is remote control permission, 256 is desktop read only
|
var mesh = parent.meshes[agent.dbMeshKey];
|
||||||
command.sessionid = ws.sessionId; // Set the session id, required for responses.
|
if ((rights != null) && (mesh != null) && ((rights.rights & 8) || (rights.rights & 256))) { // 8 is remote control permission, 256 is desktop read only
|
||||||
|
command.sessionid = ws.sessionId; // Set the session id, required for responses
|
||||||
command.rights = rights.rights; // Add user rights flags to the message
|
command.rights = rights.rights; // Add user rights flags to the message
|
||||||
delete command.nodeid; // Remove the nodeid since it's implyed.
|
command.consent = mesh.consent; // Add user consent
|
||||||
|
if (typeof domain.userconsentflags == 'number') { command.consent |= domain.userconsentflags; } // Add server required consent flags
|
||||||
|
command.username = user.name; // Add user name
|
||||||
|
delete command.nodeid; // Remove the nodeid since it's implied
|
||||||
try { agent.send(JSON.stringify(command)); } catch (ex) { }
|
try { agent.send(JSON.stringify(command)); } catch (ex) { }
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@ -137,9 +141,13 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use
|
|||||||
if (routing != null) {
|
if (routing != null) {
|
||||||
// Check if we have permission to send a message to that node
|
// Check if we have permission to send a message to that node
|
||||||
var rights = user.links[routing.meshid];
|
var rights = user.links[routing.meshid];
|
||||||
if ((rights != null) && ((rights.rights & 8) || (rights.rights & 256))) { // 8 is remote control permission
|
var mesh = parent.meshes[agent.dbMeshKey];
|
||||||
command.fromSessionid = ws.sessionId; // Set the session id, required for responses.
|
if ((rights != null) && (mesh != null) && ((rights.rights & 8) || (rights.rights & 256))) { // 8 is remote control permission
|
||||||
|
command.fromSessionid = ws.sessionId; // Set the session id, required for responses
|
||||||
command.rights = rights.rights; // Add user rights flags to the message
|
command.rights = rights.rights; // Add user rights flags to the message
|
||||||
|
command.consent = mesh.consent; // Add user consent
|
||||||
|
if (typeof domain.userconsentflags == 'number') { command.consent |= domain.userconsentflags; } // Add server required consent flags
|
||||||
|
command.username = user.name; // Add user name
|
||||||
parent.parent.multiServer.DispatchMessageSingleServer(command, routing.serverid);
|
parent.parent.multiServer.DispatchMessageSingleServer(command, routing.serverid);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -253,6 +261,7 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use
|
|||||||
// Build server information object
|
// Build server information object
|
||||||
var serverinfo = { name: parent.certificates.CommonName, mpsname: parent.certificates.AmtMpsName, mpsport: mpsport, mpspass: args.mpspass, port: httpport, emailcheck: ((parent.parent.mailserver != null) && (domain.auth != 'sspi') && (domain.auth != 'ldap')), domainauth: ((domain.auth == 'sspi') || (domain.auth == 'ldap')) };
|
var serverinfo = { name: parent.certificates.CommonName, mpsname: parent.certificates.AmtMpsName, mpsport: mpsport, mpspass: args.mpspass, port: httpport, emailcheck: ((parent.parent.mailserver != null) && (domain.auth != 'sspi') && (domain.auth != 'ldap')), domainauth: ((domain.auth == 'sspi') || (domain.auth == 'ldap')) };
|
||||||
if (args.notls == true) { serverinfo.https = false; } else { serverinfo.https = true; serverinfo.redirport = args.redirport; }
|
if (args.notls == true) { serverinfo.https = false; } else { serverinfo.https = true; serverinfo.redirport = args.redirport; }
|
||||||
|
if (typeof domain.userconsentflags == 'number') { serverinfo.consent = domain.userconsentflags; }
|
||||||
|
|
||||||
// Send server information
|
// Send server information
|
||||||
try { ws.send(JSON.stringify({ action: 'serverinfo', serverinfo: serverinfo })); } catch (ex) { }
|
try { ws.send(JSON.stringify({ action: 'serverinfo', serverinfo: serverinfo })); } catch (ex) { }
|
||||||
@ -1147,6 +1156,7 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use
|
|||||||
if (common.validateString(command.meshid, 1, 1024) == false) break; // Check the meshid
|
if (common.validateString(command.meshid, 1, 1024) == false) break; // Check the meshid
|
||||||
mesh = parent.meshes[command.meshid];
|
mesh = parent.meshes[command.meshid];
|
||||||
change = '';
|
change = '';
|
||||||
|
|
||||||
if (mesh) {
|
if (mesh) {
|
||||||
// Check if this user has rights to do this
|
// Check if this user has rights to do this
|
||||||
if (mesh.links[user._id] == null || ((mesh.links[user._id].rights & 1) == 0)) return;
|
if (mesh.links[user._id] == null || ((mesh.links[user._id].rights & 1) == 0)) return;
|
||||||
@ -1155,7 +1165,8 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use
|
|||||||
if ((common.validateString(command.meshname, 1, 64) == true) && (command.meshname != mesh.name)) { change = 'Group name changed from "' + mesh.name + '" to "' + command.meshname + '"'; mesh.name = command.meshname; }
|
if ((common.validateString(command.meshname, 1, 64) == true) && (command.meshname != mesh.name)) { change = 'Group name changed from "' + mesh.name + '" to "' + command.meshname + '"'; mesh.name = command.meshname; }
|
||||||
if ((common.validateString(command.desc, 0, 1024) == true) && (command.desc != mesh.desc)) { if (change != '') change += ' and description changed'; else change += 'Group "' + mesh.name + '" description changed'; mesh.desc = command.desc; }
|
if ((common.validateString(command.desc, 0, 1024) == true) && (command.desc != mesh.desc)) { if (change != '') change += ' and description changed'; else change += 'Group "' + mesh.name + '" description changed'; mesh.desc = command.desc; }
|
||||||
if ((common.validateInt(command.flags) == true) && (command.flags != mesh.flags)) { if (change != '') change += ' and flags changed'; else change += 'Group "' + mesh.name + '" flags changed'; mesh.flags = command.flags; }
|
if ((common.validateInt(command.flags) == true) && (command.flags != mesh.flags)) { if (change != '') change += ' and flags changed'; else change += 'Group "' + mesh.name + '" flags changed'; mesh.flags = command.flags; }
|
||||||
if (change != '') { db.Set(common.escapeLinksFieldName(mesh)); parent.parent.DispatchEvent(['*', mesh._id, user._id], obj, { etype: 'mesh', username: user.name, meshid: mesh._id, name: mesh.name, mtype: mesh.mtype, desc: mesh.desc, flags: mesh.flags, action: 'meshchange', links: mesh.links, msg: change, domain: domain.id }); }
|
if ((common.validateInt(command.consent) == true) && (command.consent != mesh.consent)) { if (change != '') change += ' and consent changed'; else change += 'Group "' + mesh.name + '" consent changed'; mesh.consent = command.consent; }
|
||||||
|
if (change != '') { db.Set(common.escapeLinksFieldName(mesh)); parent.parent.DispatchEvent(['*', mesh._id, user._id], obj, { etype: 'mesh', username: user.name, meshid: mesh._id, name: mesh.name, mtype: mesh.mtype, desc: mesh.desc, flags: mesh.flags, consent: mesh.consent, action: 'meshchange', links: mesh.links, msg: change, domain: domain.id }); }
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -1249,7 +1260,7 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use
|
|||||||
change = '';
|
change = '';
|
||||||
if (mesh) {
|
if (mesh) {
|
||||||
// Check if this user has rights to do this
|
// Check if this user has rights to do this
|
||||||
if ((mesh.links[user._id] == null) || (mesh.links[user._id].rights != 0xFFFFFFFF)) return;
|
if ((mesh.links[user._id] == null) || ((mesh.links[user._id].rights & 1) == 0)) return;
|
||||||
if ((command.meshid.split('/').length != 3) || (command.meshid.split('/')[1] != domain.id)) return; // Invalid domain, operation only valid for current domain
|
if ((command.meshid.split('/').length != 3) || (command.meshid.split('/')[1] != domain.id)) return; // Invalid domain, operation only valid for current domain
|
||||||
|
|
||||||
// TODO: Check if this is a change from the existing policy
|
// TODO: Check if this is a change from the existing policy
|
||||||
|
@ -43,7 +43,7 @@ var CreateAgentRedirect = function (meshserver, module, serverPublicNamePort, au
|
|||||||
obj.socket.onclose = obj.xxOnSocketClosed;
|
obj.socket.onclose = obj.xxOnSocketClosed;
|
||||||
obj.xxStateChange(1);
|
obj.xxStateChange(1);
|
||||||
//obj.meshserver.send({ action: 'msg', type: 'tunnel', nodeid: obj.nodeid, value: url2 });
|
//obj.meshserver.send({ action: 'msg', type: 'tunnel', nodeid: obj.nodeid, value: url2 });
|
||||||
obj.meshserver.send({ action: 'msg', type: 'tunnel', nodeid: obj.nodeid, value: "*/meshrelay.ashx?id=" + obj.tunnelid });
|
obj.meshserver.send({ action: 'msg', type: 'tunnel', nodeid: obj.nodeid, value: "*/meshrelay.ashx?id=" + obj.tunnelid, usage: obj.protocol });
|
||||||
//obj.debug("Agent Redir Start: " + url);
|
//obj.debug("Agent Redir Start: " + url);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -56,6 +56,8 @@
|
|||||||
"_UserBlockedIP": "127.0.0.1,::1,192.168.0.100",
|
"_UserBlockedIP": "127.0.0.1,::1,192.168.0.100",
|
||||||
"_AgentAllowedIP": "192.168.0.100/24",
|
"_AgentAllowedIP": "192.168.0.100/24",
|
||||||
"_AgentBlockedIP": "127.0.0.1,::1",
|
"_AgentBlockedIP": "127.0.0.1,::1",
|
||||||
|
"__UserConsentFlags__" : "Set to: 1 for desktop, 2 for terminal, 3 for files, 7 for all",
|
||||||
|
"_UserConsentFlags" : 7,
|
||||||
"_Limits": {
|
"_Limits": {
|
||||||
"_MaxUserAccounts": 100,
|
"_MaxUserAccounts": 100,
|
||||||
"_MaxUserSessions": 100,
|
"_MaxUserSessions": 100,
|
||||||
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -1645,6 +1645,7 @@
|
|||||||
if (message.event.name) { meshes[message.event.meshid].name = message.event.name; }
|
if (message.event.name) { meshes[message.event.meshid].name = message.event.name; }
|
||||||
if (message.event.desc) { meshes[message.event.meshid].desc = message.event.desc; }
|
if (message.event.desc) { meshes[message.event.meshid].desc = message.event.desc; }
|
||||||
if (message.event.flags != null) { meshes[message.event.meshid].flags = message.event.flags; }
|
if (message.event.flags != null) { meshes[message.event.meshid].flags = message.event.flags; }
|
||||||
|
if (message.event.consent != null) { meshes[message.event.meshid].consent = message.event.consent; }
|
||||||
if (message.event.links) { meshes[message.event.meshid].links = message.event.links; }
|
if (message.event.links) { meshes[message.event.meshid].links = message.event.links; }
|
||||||
if (message.event.amt) { meshes[message.event.meshid].amt = message.event.amt; }
|
if (message.event.amt) { meshes[message.event.meshid].amt = message.event.amt; }
|
||||||
|
|
||||||
@ -5949,6 +5950,10 @@
|
|||||||
x += addHtmlValue('Name', addLinkConditional(EscapeHtml(currentMesh.name), 'p20editmesh(1)', (meshrights & 1) != 0));
|
x += addHtmlValue('Name', addLinkConditional(EscapeHtml(currentMesh.name), 'p20editmesh(1)', (meshrights & 1) != 0));
|
||||||
x += addHtmlValue('Description', addLinkConditional(((currentMesh.desc && currentMesh.desc != '')?EscapeHtml(currentMesh.desc):'<i>None</i>'), 'p20editmesh(2)', (meshrights & 1) != 0));
|
x += addHtmlValue('Description', addLinkConditional(((currentMesh.desc && currentMesh.desc != '')?EscapeHtml(currentMesh.desc):'<i>None</i>'), 'p20editmesh(2)', (meshrights & 1) != 0));
|
||||||
|
|
||||||
|
// Display group type
|
||||||
|
x += addHtmlValue('Type', meshtype);
|
||||||
|
//x += addHtmlValue('Identifier', currentMesh._id.split('/')[2]);
|
||||||
|
|
||||||
// Display features
|
// Display features
|
||||||
var meshFeatures = [];
|
var meshFeatures = [];
|
||||||
if (currentMesh.flags) {
|
if (currentMesh.flags) {
|
||||||
@ -5957,11 +5962,22 @@
|
|||||||
}
|
}
|
||||||
meshFeatures = meshFeatures.join(', ');
|
meshFeatures = meshFeatures.join(', ');
|
||||||
if (meshFeatures == '') { meshFeatures = '<i>None</i>'; }
|
if (meshFeatures == '') { meshFeatures = '<i>None</i>'; }
|
||||||
x += addHtmlValue('Features', addLinkConditional(meshFeatures, 'p20editmeshfeatures()', (meshrights & 1) != 0));
|
x += addHtmlValue('Features', addLinkConditional(meshFeatures, 'p20editmeshfeatures()', meshrights & 1));
|
||||||
|
|
||||||
// Display group type
|
// Display user consent
|
||||||
x += addHtmlValue('Type', meshtype);
|
meshFeatures = [];
|
||||||
//x += addHtmlValue('Identifier', currentMesh._id.split('/')[2]);
|
var consent = 0;
|
||||||
|
if (currentMesh.consent) { consent = currentMesh.consent; }
|
||||||
|
if (serverinfo.consent) { consent |= serverinfo.consent; }
|
||||||
|
if (consent & 1) { meshFeatures.push('Desktop Notify'); }
|
||||||
|
if (consent & 2) { meshFeatures.push('Terminal Notify'); }
|
||||||
|
if (consent & 4) { meshFeatures.push('Files Notify'); }
|
||||||
|
//if ((consent & 7) == 7) { meshFeatures.push('Always Notify'); } else if ((currentMesh.consent & 7) != 0) { meshFeatures.push('Notify Sometimes'); }
|
||||||
|
//if ((consent & 56) == 56) { meshFeatures.push('Always Blink Border'); } else if ((currentMesh.consent & 56) != 0) { meshFeatures.push('Blick Border Sometimes'); }
|
||||||
|
|
||||||
|
meshFeatures = meshFeatures.join(', ');
|
||||||
|
if (meshFeatures == '') { meshFeatures = '<i>None</i>'; }
|
||||||
|
x += addHtmlValue('User Consent', addLinkConditional(meshFeatures, 'p20editmeshconsent()', meshrights & 1));
|
||||||
|
|
||||||
// Intel AMT setup
|
// Intel AMT setup
|
||||||
if (currentMesh.mtype == 2) {
|
if (currentMesh.mtype == 2) {
|
||||||
@ -5973,7 +5989,7 @@
|
|||||||
if (currentMesh.amt.cirasetup == 2) { intelAmtPolicy += ' + CIRA'; }
|
if (currentMesh.amt.cirasetup == 2) { intelAmtPolicy += ' + CIRA'; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
x += addHtmlValue('Intel® AMT', addLinkConditional(intelAmtPolicy, 'p20editMeshAmt()', (meshrights & 0xFFFFFFFF) != 0));
|
x += addHtmlValue('Intel® AMT', addLinkConditional(intelAmtPolicy, 'p20editMeshAmt()', meshrights & 1));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Display group note support
|
// Display group note support
|
||||||
@ -6117,6 +6133,40 @@
|
|||||||
QE('idx_dlgOkButton', Q('dp20meshname').value.length > 0);
|
QE('idx_dlgOkButton', Q('dp20meshname').value.length > 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function p20editmeshconsent() {
|
||||||
|
if (xxdialogMode) return;
|
||||||
|
var x = '', consent = (currentMesh.consent) ? currentMesh.consent : 0;
|
||||||
|
x += '<div style="width:100%;border-bottom:1px solid gray;margin-bottom:5px"><b>Desktop</b></div>';
|
||||||
|
x += "<div><input type=checkbox id=d20flag1 " + ((consent & 0x0001) ? 'checked' : '') + ">Notify User</div>";
|
||||||
|
//x += "<div><input type=checkbox id=d20flag2 " + ((consent & 0x0008) ? 'checked' : '') + ">Blinking Border</div>";
|
||||||
|
x += '<div style="width:100%;border-bottom:1px solid gray;margin-bottom:5px;margin-top:8px"><b>Terminal</b></div>';
|
||||||
|
x += "<div><input type=checkbox id=d20flag3 " + ((consent & 0x0002) ? 'checked' : '') + ">Notify User</div>";
|
||||||
|
//x += "<div><input type=checkbox id=d20flag4 " + ((consent & 0x0010) ? 'checked' : '') + ">Blinking Border</div>";
|
||||||
|
x += '<div style="width:100%;border-bottom:1px solid gray;margin-bottom:5px;margin-top:8px"><b>Files</b></div>';
|
||||||
|
x += "<div><input type=checkbox id=d20flag5 " + ((consent & 0x0004) ? 'checked' : '') + ">Notify User</div>";
|
||||||
|
//x += "<div><input type=checkbox id=d20flag6 " + ((consent & 0x0020) ? 'checked' : '') + ">Blinking Border</div>";
|
||||||
|
setDialogMode(2, "Edit Device Group User Consent", 3, p20editmeshconsentEx, x);
|
||||||
|
if (serverinfo.consent) {
|
||||||
|
if (serverinfo.consent & 1) { Q('d20flag1').checked = true; }
|
||||||
|
if (serverinfo.consent & 2) { Q('d20flag3').checked = true; }
|
||||||
|
if (serverinfo.consent & 4) { Q('d20flag5').checked = true; }
|
||||||
|
QE('d20flag1', !(serverinfo.consent & 1));
|
||||||
|
QE('d20flag3', !(serverinfo.consent & 2));
|
||||||
|
QE('d20flag5', !(serverinfo.consent & 4));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function p20editmeshconsentEx() {
|
||||||
|
var consent = 0;
|
||||||
|
if (Q('d20flag1').checked) { consent += 0x0001; }
|
||||||
|
//if (Q('d20flag2').checked) { consent += 0x0008; }
|
||||||
|
if (Q('d20flag3').checked) { consent += 0x0002; }
|
||||||
|
//if (Q('d20flag4').checked) { consent += 0x0010; }
|
||||||
|
if (Q('d20flag5').checked) { consent += 0x0004; }
|
||||||
|
//if (Q('d20flag6').checked) { consent += 0x0020; }
|
||||||
|
meshserver.send({ action: 'editmesh', meshid: currentMesh._id, consent: consent });
|
||||||
|
}
|
||||||
|
|
||||||
function p20editmeshfeatures() {
|
function p20editmeshfeatures() {
|
||||||
if (xxdialogMode) return;
|
if (xxdialogMode) return;
|
||||||
var flags = (currentMesh.flags)?currentMesh.flags:0;
|
var flags = (currentMesh.flags)?currentMesh.flags:0;
|
||||||
|
Loading…
Reference in New Issue
Block a user