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