Improved web relay sharing (#4413)

Ylian Saint-Hilaire committed Aug 25, 2022 at 21:10 UTC 4fe394226cacc8e27299897e76406476189c5a6c
3 files changed +15 -4
apprelays.js
+12 -3
@@ -92,8 +92,13 @@ module.exports.CreateWebRelaySession = function (parent, db, req, args, domain,
92 obj.webCookies = {};
93
94 // Setup an expire time if needed
95 - if (expire != null) { var timeout = (expire - Date.now()); if (timeout < 10) { timeout = 10; } obj.expireTimer = setTimeout(close, timeout); }
96 -
95 + if (expire != null) {
96 + var timeout = (expire - Date.now());
97 + if (timeout < 10) { timeout = 10; }
98 + parent.parent.debug('webrelay', 'timeout set to ' + Math.floor(timeout / 1000) + ' second(s).');
99 + obj.expireTimer = setTimeout(function () { parent.parent.debug('webrelay', 'timeout'); close(); }, timeout);
100 + }
101 +
102 // Events
103 obj.closed = false;
104 obj.onclose = null;
@@ -131,6 +136,8 @@ module.exports.CreateWebRelaySession = function (parent, db, req, args, domain,
136
137 // Handle request
138 function handleNextRequest() {
139 + if (obj.closed == true) return;
140 +
141 // if there are not pending requests, do nothing
142 if (pendingRequests.length == 0) return;
143
@@ -148,13 +155,14 @@ module.exports.CreateWebRelaySession = function (parent, db, req, args, domain,
155 return;
156 }
157 }
151 -
158 +
159 if (count > 0) return;
160 launchNewTunnel();
161 }
162
163 function launchNewTunnel() {
164 // Launch a new tunnel
165 + if (obj.closed == true) return;
166 parent.parent.debug('webrelay', 'launchNewTunnel');
167 const tunnel = module.exports.CreateWebRelay(obj, db, args, domain);
168 tunnel.onclose = function (tunnelId, processedCount) {
@@ -188,6 +196,7 @@ module.exports.CreateWebRelaySession = function (parent, db, req, args, domain,
196 }
197 }
198 tunnel.onNextRequest = function () {
199 + if (tunnels == null) return;
200 parent.parent.debug('webrelay', 'tunnel-onNextRequest');
201 handleNextRequest();
202 }
webrelayserver.js
+2 -1
@@ -224,6 +224,7 @@ module.exports.CreateWebRelayServer = function (parent, db, args, certificates,
224 if (req.session.userid) { delete req.session.userid; } // Clear the web relay userid
225 if (req.session.z != webSessionId) { req.session.z = webSessionId; } // Set the web relay guest session
226 expire = urlCookie.expire;
227 + if ((expire != null) && (expire <= Date.now())) { parent.debug('webrelay', 'expired link'); res.sendStatus(404); return; }
228 }
229
230 // No session identifier was setup, exit now
@@ -246,7 +247,7 @@ module.exports.CreateWebRelayServer = function (parent, db, args, certificates,
247 if (xrelaySession != null) { xrelaySession.close(); delete relaySessions[webSessionId]; }
248
249 // Create a web relay session
249 - const relaySession = require('./apprelays.js').CreateWebRelaySession(obj, db, req, args, domain, userid, nodeid, addr, port, appid, xrelaySession, expire);
250 + const relaySession = require('./apprelays.js').CreateWebRelaySession(obj, db, req, args, domain, userid, nodeid, addr, port, appid, webSessionId, expire);
251 relaySession.onclose = function (sessionId) {
252 // Remove the relay session
253 delete relaySessions[sessionId];
webserver.js
+1
@@ -6610,6 +6610,7 @@ module.exports.CreateWebServer = function (parent, db, args, certificates, doneF
6610 if (req.session.userid) { delete req.session.userid; } // Clear the web relay userid
6611 if (req.session.z != webSessionId) { req.session.z = webSessionId; } // Set the web relay guest session
6612 expire = urlCookie.expire;
6613 + if ((expire != null) && (expire <= Date.now())) { parent.debug('webrelay', 'expired link'); res.sendStatus(404); return; }
6614 }
6615
6616 // No session identifier was setup, exit now