diff --git a/src/database/mongo.js b/src/database/mongo.js index 2e09047da1..47f7a0596e 100644 --- a/src/database/mongo.js +++ b/src/database/mongo.js @@ -9,6 +9,7 @@ var session = require('express-session'); var _ = require('underscore'); var semver = require('semver'); + var meta = require('../meta'); var db; _.mixin(require('underscore.deep')); @@ -47,7 +48,7 @@ module.helpers.mongo = require('./mongo/helpers'); module.init = function (callback) { - callback = callback || function () {}; + callback = callback || function () { }; var mongoClient; try { mongoClient = require('mongodb').MongoClient; @@ -111,38 +112,42 @@ if (err) { return callback(err); } - createSessionStore(); + callback(); }); } else { winston.warn('You have no mongo password setup!'); - createSessionStore(); - } - - function createSessionStore() { - var sessionStore; - if (nconf.get('redis')) { - sessionStore = require('connect-redis')(session); - var rdb = require('./redis'); - rdb.client = rdb.connect(); - - module.sessionStore = new sessionStore({ - client: rdb.client, - ttl: 60 * 60 * 24 * 14 - }); - } else if (nconf.get('mongo')) { - sessionStore = require('connect-mongo')(session); - module.sessionStore = new sessionStore({ - db: db - }); - } callback(); - } + } }); }; + module.initSessionStore = function (callback) { + var meta = require('../meta'); + var sessionStore; + if (nconf.get('redis')) { + sessionStore = require('connect-redis')(session); + var rdb = require('./redis'); + rdb.client = rdb.connect(); + + var ttlDays = 1000 * 60 * 60 * 24 * (parseInt(meta.config.loginDays, 10) || 14); + + module.sessionStore = new sessionStore({ + client: rdb.client, + ttl: ttlDays + }); + } else if (nconf.get('mongo')) { + sessionStore = require('connect-mongo')(session); + module.sessionStore = new sessionStore({ + db: db + }); + } + + callback(); + }; + module.createIndices = function (callback) { function createIndex(collection, index, options, callback) { - module.client.collection(collection).createIndex(index, options, callback); + module.client.collection(collection).createIndex(index, options, callback); } if (!module.client) { @@ -152,9 +157,9 @@ winston.info('[database] Checking database indices.'); async.series([ - async.apply(createIndex, 'objects', {_key: 1, score: -1}, {background: true}), - async.apply(createIndex, 'objects', {_key: 1, value: -1}, {background: true, unique: true, sparse: true}), - async.apply(createIndex, 'objects', {expireAt: 1}, {expireAfterSeconds: 0, background: true}) + async.apply(createIndex, 'objects', { _key: 1, score: -1 }, { background: true }), + async.apply(createIndex, 'objects', { _key: 1, value: -1 }, { background: true, unique: true, sparse: true }), + async.apply(createIndex, 'objects', { expireAt: 1 }, { expireAfterSeconds: 0, background: true }) ], function (err) { if (err) { winston.error('Error creating index ' + err.message); @@ -162,16 +167,16 @@ } winston.info('[database] Checking database indices done!'); callback(); - }); + }); }; module.checkCompatibility = function (callback) { var mongoPkg = require.main.require('./node_modules/mongodb/package.json'); - + if (semver.lt(mongoPkg.version, '2.0.0')) { return callback(new Error('The `mongodb` package is out-of-date, please run `./nodebb setup` again.')); } - + callback(); }; @@ -181,10 +186,10 @@ } async.parallel({ serverStatus: function (next) { - db.command({'serverStatus': 1}, next); + db.command({ 'serverStatus': 1 }, next); }, stats: function (next) { - db.command({'dbStats': 1}, next); + db.command({ 'dbStats': 1 }, next); }, listCollections: function (next) { db.listCollections().toArray(function (err, items) { @@ -239,4 +244,4 @@ db.close(); }; -}(exports)); +} (exports)); diff --git a/src/database/redis.js b/src/database/redis.js index f1c00a2316..153d2e3058 100644 --- a/src/database/redis.js +++ b/src/database/redis.js @@ -38,7 +38,6 @@ module.init = function (callback) { try { redis = require('redis'); - connectRedis = require('connect-redis')(session); } catch (err) { winston.error('Unable to initialize Redis! Is Redis installed? Error :' + err.message); process.exit(); @@ -48,11 +47,6 @@ module.client = redisClient; - module.sessionStore = new connectRedis({ - client: redisClient, - ttl: 60 * 60 * 24 * 14 - }); - require('./redis/main')(redisClient, module); require('./redis/hash')(redisClient, module); require('./redis/sets')(redisClient, module); @@ -64,6 +58,22 @@ } }; + module.initSessionStore = function (callback) { + var meta = require('../meta'); + connectRedis = require('connect-redis')(session); + + var ttlDays = 1000 * 60 * 60 * 24 * (parseInt(meta.config.loginDays, 10) || 14); + + module.sessionStore = new connectRedis({ + client: redisClient, + ttl: ttlDays + }); + + if (typeof callback === 'function') { + callback(); + } + }; + module.connect = function (options) { var redis_socket_or_host = nconf.get('redis:host'); var cxn; @@ -97,7 +107,7 @@ var dbIdx = parseInt(nconf.get('redis:database'), 10); if (dbIdx) { cxn.select(dbIdx, function (error) { - if(error) { + if (error) { winston.error("NodeBB could not connect to your Redis database. Redis returned the following error: " + error.message); process.exit(); } @@ -156,5 +166,5 @@ module.helpers = module.helpers || {}; module.helpers.redis = require('./redis/helpers'); -}(exports)); +} (exports)); diff --git a/src/start.js b/src/start.js index f44b90643d..8c09b31fee 100644 --- a/src/start.js +++ b/src/start.js @@ -40,6 +40,9 @@ start.start = function () { next(err); }); }, + function(next) { + db.initSessionStore(next); + }, function (next) { var webserver = require('./webserver'); require('./socket.io').init(webserver.server);