You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
nodebb/src/upgrades/1.4.6/delete_sessions.js

50 lines
1.2 KiB
JavaScript

'use strict';
var db = require('../../database');
var async = require('async');
module.exports = {
name: 'Delete accidentally long-lived sessions',
timestamp: Date.UTC(2017, 3, 16),
method: function (callback) {
var configJSON = require.main.require('./config.json');
var isRedisSessionStore = configJSON.hasOwnProperty('redis');
var progress = this.progress;
async.waterfall([
function (next) {
if (isRedisSessionStore) {
var rdb = require.main.require('./src/database/redis');
var batch = require.main.require('./src/batch');
var client = rdb.connect();
async.waterfall([
function (next) {
client.keys('sess:*', next);
},
function (sessionKeys, next) {
progress.total = sessionKeys.length;
batch.processArray(sessionKeys, function (keys, next) {
var multi = client.multi();
keys.forEach(function (key) {
progress.incr();
multi.del(key);
});
multi.exec(next);
}, {
batch: 1000,
}, next);
},
], function (err) {
next(err);
});
} else {
db.client.collection('sessions').deleteMany({}, {}, function (err) {
next(err);
});
}
},
], callback);
},
};