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");
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)
});
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)