First version with FireFox push messaging support.

Ylian Saint-Hilaire committed Feb 9, 2021 at 17:36 UTC 1f92f1a516b94540c8edce4e8b761cefc77f672d
1 file changed +24 -1
webserver.js
+24 -1
@@ -2371,6 +2371,14 @@ module.exports.CreateWebServer = function (parent, db, args, certificates) {
2371 // If a user exists and is logged in, serve the default app, otherwise server the login app.
2372 if (req.session && req.session.userid && obj.users[req.session.userid]) {
2373 const user = obj.users[req.session.userid];
2374 +
2375 + // If the request has a "meshmessengerid", redirect to MeshMessenger
2376 + // This situation happens when you get a push notification for a chat session, but are not logged in.
2377 + if (req.query.meshmessengerid != null) {
2378 + res.redirect(domain.url + 'messenger?id=' + req.query.meshmessengerid + ((req.query.key != null) ? ('&key=' + req.query.key) : ''));
2379 + return;
2380 + }
2381 +
2382 const xdbGetFunc = function dbGetFunc(err, states) {
2383 if (dbGetFunc.req.session.domainid != domain.id) { // Check if the session is for the correct domain
2384 parent.debug('web', 'handleRootRequestEx: incorrect domain.');
@@ -2808,6 +2816,22 @@ module.exports.CreateWebServer = function (parent, db, args, certificates) {
2816 return;
2817 }
2818
2819 + // Check if this session is for a user
2820 + if (req.query.id == null) { res.sendStatus(404); return; }
2821 + var idSplit = decodeURIComponent(req.query.id).split('/');
2822 + if ((idSplit.length != 7) || (idSplit[0] != 'meshmessenger')) { res.sendStatus(404); return; }
2823 + if ((idSplit[1] == 'user') && (idSplit[4] == 'user')) {
2824 + // This is a user to user conversation, both users must be logged in.
2825 + var user1 = idSplit[1] + '/' + idSplit[2] + '/' + idSplit[3]
2826 + var user2 = idSplit[4] + '/' + idSplit[5] + '/' + idSplit[6]
2827 + if (!req.session || !req.session.userid) {
2828 + // Redirect to login page
2829 + if (req.query.key != null) { res.redirect(domain.url + '?key=' + req.query.key + '&meshmessengerid=' + req.query.id); } else { res.redirect(domain.url + '?meshmessengerid=' + req.query.id); }
2830 + return;
2831 + }
2832 + if ((req.session.userid != user1) && (req.session.userid != user2)) { res.sendStatus(404); return; }
2833 + }
2834 +
2835 // Get WebRTC configuration
2836 var webRtcConfig = null;
2837 if (obj.parent.config.settings && obj.parent.config.settings.webrtconfig && (typeof obj.parent.config.settings.webrtconfig == 'object')) { webRtcConfig = encodeURIComponent(JSON.stringify(obj.parent.config.settings.webrtconfig)).replace(/'/g, '%27'); }
@@ -2819,7 +2843,6 @@ module.exports.CreateWebServer = function (parent, db, args, certificates) {
2843
2844 // Get the userid and name
2845 if ((domain.meshmessengertitle != null) && (req.query.id != null) && (req.query.id.startsWith('meshmessenger/node'))) {
2822 - var idSplit = decodeURIComponent(req.query.id).split('/');
2846 if (idSplit.length == 7) {
2847 const user = obj.users[idSplit[4] + '/' + idSplit[5] + '/' + idSplit[6]];
2848 if (user != null) {