mirror of
https://github.com/Nystik-gh/ignis.git
synced 2026-06-17 04:35:53 +00:00
implement demo mode
This commit is contained in:
41
server/demo/demo-ws.js
Normal file
41
server/demo/demo-ws.js
Normal file
@@ -0,0 +1,41 @@
|
||||
// Vault prefix translation for WebSocket upgrades.
|
||||
//
|
||||
// ws.js validates the upgrade's `?vault=` against config.vaults.
|
||||
// We translate to the storage-prefixed name before it sees the request, otherwise the handshake fails and the client reconnect-loops.
|
||||
|
||||
const url = require("url");
|
||||
|
||||
const {
|
||||
COOKIE_NAME,
|
||||
sessions,
|
||||
parseCookies,
|
||||
makeStorageName,
|
||||
touchSession,
|
||||
} = require("./demo-sessions");
|
||||
|
||||
function wireWebSocket(server) {
|
||||
const origEmit = server.emit.bind(server);
|
||||
|
||||
server.emit = function (event, req, ...rest) {
|
||||
if (event === "upgrade") {
|
||||
const cookies = parseCookies(req);
|
||||
const sessionId = cookies[COOKIE_NAME];
|
||||
|
||||
if (sessionId && sessions.has(sessionId)) {
|
||||
const u = new url.URL(req.url, "http://localhost");
|
||||
const userVault = u.searchParams.get("vault");
|
||||
|
||||
if (userVault && !userVault.startsWith("demo-")) {
|
||||
u.searchParams.set("vault", makeStorageName(sessionId, userVault));
|
||||
req.url = u.pathname + u.search;
|
||||
}
|
||||
|
||||
touchSession(sessionId);
|
||||
}
|
||||
}
|
||||
|
||||
return origEmit(event, req, ...rest);
|
||||
};
|
||||
}
|
||||
|
||||
module.exports = { wireWebSocket };
|
||||
Reference in New Issue
Block a user