From d511e431eac0c0db9dbcaff8b895d0b5b6a2106b Mon Sep 17 00:00:00 2001 From: Ylian Saint-Hilaire Date: Thu, 26 Sep 2019 12:58:35 -0700 Subject: [PATCH] Added browser notification support to MeshMessenger --- MeshCentralServer.njsproj | 1 + meshuser.js | 2 +- package.json | 2 +- public/images/messenger32.png | Bin 11610 -> 12419 bytes public/styles/messenger.css | 15 +++++++++++++++ views/messenger-min.handlebars | 2 +- views/messenger.handlebars | 34 +++++++++++++++++++++++++++++++++ 7 files changed, 53 insertions(+), 3 deletions(-) diff --git a/MeshCentralServer.njsproj b/MeshCentralServer.njsproj index b2988f75..92bf34ee 100644 --- a/MeshCentralServer.njsproj +++ b/MeshCentralServer.njsproj @@ -263,6 +263,7 @@ + diff --git a/meshuser.js b/meshuser.js index f33c97bd..d2d72d2d 100644 --- a/meshuser.js +++ b/meshuser.js @@ -2847,7 +2847,6 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use var smesh = command.meshid.split('/'); if ((smesh.length != 3) || (smesh[0] != 'mesh') || (smesh[1] != domain.id)) { err = 'Invalid group id'; } var serverName = parent.getWebServerName(domain); - if (parent.args.lanonly == true) { err = 'Server has not fixed IP or DNS name.'; } // Handle any errors if (err != null) { @@ -2865,6 +2864,7 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use var xdomain = (domain.dns == null) ? domain.id : ''; if (xdomain != '') xdomain += "/"; var url = "http" + (args.notls ? '' : 's') + "://" + serverName + ":" + httpsPort + "/" + xdomain + "agentinvite?c=" + inviteCookie; + if (serverName.split('.') == 1) { url = "/" + xdomain + "agentinvite?c=" + inviteCookie; } ws.send(JSON.stringify({ action: 'createInviteLink', meshid: command.meshid, url: url, expire: command.expire, cookie: inviteCookie, responseid: command.responseid, tag: command.tag })); break; diff --git a/package.json b/package.json index 0d7b38f2..4c0eaa9b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "meshcentral", - "version": "0.4.1-i", + "version": "0.4.1-j", "keywords": [ "Remote Management", "Intel AMT", diff --git a/public/images/messenger32.png b/public/images/messenger32.png index da6b8527cc1a31458d88469181496a1415332176..f7fd80a4b93e9fda5c76a8014fd91b4d81d237f8 100644 GIT binary patch delta 9771 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 CEihjI diff --git a/public/styles/messenger.css b/public/styles/messenger.css index bf044de7..acc3cecc 100644 --- a/public/styles/messenger.css +++ b/public/styles/messenger.css @@ -104,6 +104,21 @@ background-color: orange; } +.icon12 { + background: url(../images/messenger32.png) -352px 0px; + background-color: gray; +} + +.icon13 { + background: url(../images/messenger32.png) -384px 0px; + background-color: gray; +} + +.icon14 { + background: url(../images/messenger32.png) -416px 0px; + background-color: gray; +} + .fileicon { background: url(../images/messenger32.png) -96px 0px; height: 32px; diff --git a/views/messenger-min.handlebars b/views/messenger-min.handlebars index a2fa1033..19bdf575 100644 --- a/views/messenger-min.handlebars +++ b/views/messenger-min.handlebars @@ -1 +1 @@ - MeshMessenger
MeshMessenger
\ No newline at end of file + MeshMessenger
MeshMessenger
\ No newline at end of file diff --git a/views/messenger.handlebars b/views/messenger.handlebars index 0ea4f482..5ee4aac5 100644 --- a/views/messenger.handlebars +++ b/views/messenger.handlebars @@ -12,6 +12,7 @@
+
@@ -52,6 +53,7 @@ var remoteStream = null; var multiWebRtc = true; // if set to true, multiple WebRTC sessions will be setup. If false, everything uses one session. var userMediaSupport = 0; + var notification = null; getUserMediaSupport(function (x) { userMediaSupport = x; }) var webrtcconfiguration = "{{{webrtconfig}}}"; if (webrtcconfiguration == '') { webrtcconfiguration = null; } else { try { webrtcconfiguration = JSON.parse(decodeURIComponent(webrtcconfiguration)); } catch (ex) { console.log('Invalid WebRTC config: \"' + webrtcconfiguration + '\".'); webrtcconfiguration = null; } } @@ -65,13 +67,23 @@ // Set the title if (args.title) { QH('xtitle', ' - ' + args.title); document.title = document.title + ' - ' + args.title; } + // Setup web notifications + if (Notification) { QV('notifyButton', Notification.permission != 'granted'); } + // Listen to drag & drop events document.addEventListener('dragover', haltEvent, false); document.addEventListener('dragleave', haltEvent, false); document.addEventListener('drop', fileDrop, false); + document.onclick = function (e) { + if (Notification) { QV('notifyButton', Notification.permission != 'granted'); } + if (notification != null) { notification.close(); notification = null; } + } + // Trap document key up events document.onkeyup = function ondockeypress(e) { + if (Notification) { QV('notifyButton', Notification.permission != 'granted'); } + if (notification != null) { notification.close(); notification = null; } if (state == 2) { if ((e.keyCode == 8) && (userInputFocus == 0)) { // Backspace @@ -84,6 +96,8 @@ // Trap document key presses document.onkeypress = function ondockeypress(e) { + if (Notification) { QV('notifyButton', Notification.permission != 'granted'); } + if (notification != null) { notification.close(); notification = null; } if (state == 2) { if (e.keyCode == 13) { // Return @@ -148,10 +162,23 @@ function displayRemote(msg) { QA('xmsg', '
' + msg + '
'); Q('xmsg').scrollTop = Q('xmsg').scrollHeight; + + // If web notifications are granted, use it. + if (Notification) { QV('notifyButton', Notification.permission != 'granted'); } + if (Notification && (Notification.permission == "granted")) { + if (notification != null) { notification.close(); notification = null; } + if (args.title) { + notification = new Notification("MeshMessenger - " + args.title, { body: msg }); + } else { + notification = new Notification("MeshMessenger", { body: msg }); + } + } } // Display and send a message from the local user function xsend(event) { + if (notification != null) { notification.close(); notification = null; } + if (Notification) { QV('notifyButton', Notification.permission != 'granted'); } var outtext = Q('xouttext').value; if (outtext.length > 0) { Q('xouttext').value = ''; @@ -486,6 +513,12 @@ send({ action: 'fileUploadAck', id: msg.id }); } + // Toggle notification + function enableNotificationsButtonClick() { + if (Notification) { Notification.requestPermission().then(function (permission) { QV('notifyButton', permission != "granted"); }); } + return false; + } + // Camera button function camButtonClick() { if (localStream == null) { startLocalStream({ video: true, audio: true }); } @@ -603,6 +636,7 @@ if (webchannel != null) { try { webchannel.close(); } catch (e) { } webchannel = null; } if (socket != null) { try { socket.close(); } catch (e) { } socket = null; } } +