From 4fe394226cacc8e27299897e76406476189c5a6c Mon Sep 17 00:00:00 2001 From: Ylian Saint-Hilaire Date: Thu, 25 Aug 2022 21:10:09 -0700 Subject: [PATCH] Improved web relay sharing (#4413) --- apprelays.js | 15 ++++++++++++--- webrelayserver.js | 3 ++- webserver.js | 1 + 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/apprelays.js b/apprelays.js index 3eb87a03..56ead390 100644 --- a/apprelays.js +++ b/apprelays.js @@ -92,8 +92,13 @@ module.exports.CreateWebRelaySession = function (parent, db, req, args, domain, obj.webCookies = {}; // Setup an expire time if needed - if (expire != null) { var timeout = (expire - Date.now()); if (timeout < 10) { timeout = 10; } obj.expireTimer = setTimeout(close, timeout); } - + if (expire != null) { + var timeout = (expire - Date.now()); + if (timeout < 10) { timeout = 10; } + parent.parent.debug('webrelay', 'timeout set to ' + Math.floor(timeout / 1000) + ' second(s).'); + obj.expireTimer = setTimeout(function () { parent.parent.debug('webrelay', 'timeout'); close(); }, timeout); + } + // Events obj.closed = false; obj.onclose = null; @@ -131,6 +136,8 @@ module.exports.CreateWebRelaySession = function (parent, db, req, args, domain, // Handle request function handleNextRequest() { + if (obj.closed == true) return; + // if there are not pending requests, do nothing if (pendingRequests.length == 0) return; @@ -148,13 +155,14 @@ module.exports.CreateWebRelaySession = function (parent, db, req, args, domain, return; } } - + if (count > 0) return; launchNewTunnel(); } function launchNewTunnel() { // Launch a new tunnel + if (obj.closed == true) return; parent.parent.debug('webrelay', 'launchNewTunnel'); const tunnel = module.exports.CreateWebRelay(obj, db, args, domain); tunnel.onclose = function (tunnelId, processedCount) { @@ -188,6 +196,7 @@ module.exports.CreateWebRelaySession = function (parent, db, req, args, domain, } } tunnel.onNextRequest = function () { + if (tunnels == null) return; parent.parent.debug('webrelay', 'tunnel-onNextRequest'); handleNextRequest(); } diff --git a/webrelayserver.js b/webrelayserver.js index 07aa3349..bac34b73 100644 --- a/webrelayserver.js +++ b/webrelayserver.js @@ -224,6 +224,7 @@ module.exports.CreateWebRelayServer = function (parent, db, args, certificates, if (req.session.userid) { delete req.session.userid; } // Clear the web relay userid if (req.session.z != webSessionId) { req.session.z = webSessionId; } // Set the web relay guest session expire = urlCookie.expire; + if ((expire != null) && (expire <= Date.now())) { parent.debug('webrelay', 'expired link'); res.sendStatus(404); return; } } // No session identifier was setup, exit now @@ -246,7 +247,7 @@ module.exports.CreateWebRelayServer = function (parent, db, args, certificates, if (xrelaySession != null) { xrelaySession.close(); delete relaySessions[webSessionId]; } // Create a web relay session - const relaySession = require('./apprelays.js').CreateWebRelaySession(obj, db, req, args, domain, userid, nodeid, addr, port, appid, xrelaySession, expire); + const relaySession = require('./apprelays.js').CreateWebRelaySession(obj, db, req, args, domain, userid, nodeid, addr, port, appid, webSessionId, expire); relaySession.onclose = function (sessionId) { // Remove the relay session delete relaySessions[sessionId]; diff --git a/webserver.js b/webserver.js index d4d8d54b..7e2a7861 100644 --- a/webserver.js +++ b/webserver.js @@ -6610,6 +6610,7 @@ module.exports.CreateWebServer = function (parent, db, args, certificates, doneF if (req.session.userid) { delete req.session.userid; } // Clear the web relay userid if (req.session.z != webSessionId) { req.session.z = webSessionId; } // Set the web relay guest session expire = urlCookie.expire; + if ((expire != null) && (expire <= Date.now())) { parent.debug('webrelay', 'expired link'); res.sendStatus(404); return; } } // No session identifier was setup, exit now