X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=index.js;h=cd1911def06ba21b1197a72c9bd6b1d5405b0989;hb=3466003e498d45dab79737107b7ae8f6053a54ae;hp=638c59dc6543fbab851e179d9b59b74aa123c51c;hpb=84c231f733711d8eb02317ea067c7be57676172b;p=zombocom-ai diff --git a/index.js b/index.js index 638c59d..cd1911d 100644 --- a/index.js +++ b/index.js @@ -5,6 +5,8 @@ const execFile = util.promisify(require('child_process').execFile); const express = require('express'); const app = express(); +const session = require('express-session'); +const FileStore = require('session-file-store')(session); const http = require('http'); const server = http.createServer(app); const { Server } = require("socket.io"); @@ -17,6 +19,26 @@ const state_file = 'zombocom-state.json' var state; +if (!process.env.ZOMBOCOM_SESSION_SECRET) { + console.log("Error: Environment variable ZOMBOCOM_SESSION_SECRET not set."); + console.log("Please set it to a random, but persistent, value.") + process.exit(); +} + +const session_middleware = session( + {store: new FileStore, + secret: process.env.ZOMBOCOM_SESSION_SECRET, + resave: false, + saveUninitialized: true + }); + +app.use(session_middleware); + +// convert a connect middleware to a Socket.IO middleware +const wrap = middleware => (socket, next) => middleware(socket.request, {}, next); + +io.use(wrap(session_middleware)); + // Load comments at server startup fs.readFile(state_file, (err, data) => { if (err) @@ -43,11 +65,18 @@ process.on('SIGINT', () => { }); app.get('/index.html', (req, res) => { + if (req.session.views) { + req.session.views++; + } else { + req.session.views = 1; + } res.sendFile(__dirname + '/index.html'); }); io.on('connection', (socket) => { + console.log("Connection from client with " + socket.request.session.views + " views."); + // Replay old comments and images to a newly-joining client state.comments.forEach((comment) => { socket.emit('comment', comment)