From e49ef3ef8753cee38ac622ab61287917265abfc8 Mon Sep 17 00:00:00 2001 From: achwie Date: Fri, 28 Jul 2017 16:21:20 +0200 Subject: [PATCH] Added support for Redis as session store (via env variable SESSION_STORE_TYPE). Fixes Haufe-Lexware/wicked.haufe.io#83 --- app.js | 7 ++----- sessionstore.js | 28 ++++++++++++++++++++++++++++ 2 files changed, 30 insertions(+), 5 deletions(-) create mode 100644 sessionstore.js diff --git a/app.js b/app.js index a8f21dd..3061b38 100644 --- a/app.js +++ b/app.js @@ -32,16 +32,13 @@ var correlationIdHandler = wicked.correlationIdHandler(); var passport = require('passport'); var fs = require('fs'); var session = require('express-session'); -var FileStore = require('session-file-store')(session); - -// Use default options, see https://www.npmjs.com/package/session-file-store -var sessionStoreOptions = {}; +var sessionStore = require('./sessionstore')(session); var SECRET = 'ThisIsASecret'; // Session: 15 minutes var sessionArgs = { - store: new FileStore(sessionStoreOptions), + store: sessionStore, secret: SECRET, saveUninitialized: true, resave: false, diff --git a/sessionstore.js b/sessionstore.js new file mode 100644 index 0000000..e085015 --- /dev/null +++ b/sessionstore.js @@ -0,0 +1,28 @@ +var debug = require('debug')('portal:app'); + +function initSessionStore(session){ + var sessionStoreType = process.env.SESSION_STORE_TYPE || 'file'; + + var sessionStoreOptions = {}; + var SessionStore; + switch (sessionStoreType){ + case 'file': + SessionStore = require('session-file-store')(session); + // Use default options for file session store, see https://www.npmjs.com/package/session-file-store + break; + case 'redis': + SessionStore = require('connect-redis')(session); + // Set options for Redis session store, see https://www.npmjs.com/package/connect-redis + sessionStoreOptions.host = process.env.SESSION_STORE_HOST || 'localhost'; + sessionStoreOptions.port = process.env.SESSION_STORE_PORT || 6379; + break; + default: + throw new Error("Invalid session-store type: '" + sessionStoreType + "'"); + } + + debug('Using session store \'' + sessionStoreType + '\' with options ' + JSON.stringify(sessionStoreOptions)); + + return new SessionStore(sessionStoreOptions); +} + +module.exports = initSessionStore; \ No newline at end of file