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) {