This commit is contained in:
barisusakli
2016-12-15 14:47:42 +03:00
parent 9d75c48236
commit 55b68197aa
5 changed files with 75 additions and 4 deletions

View File

@@ -3,7 +3,6 @@
var async = require('async');
var winston = require('winston');
var nconf = require('nconf');
var path = require('path');
var meta = require('../meta');
var plugins = require('../plugins');
@@ -285,5 +284,9 @@ SocketAdmin.getSearchDict = function (socket, data, callback) {
});
};
SocketAdmin.deleteAllSessions = function (socket, data, callback) {
user.auth.deleteAllSessions(callback);
};
module.exports = SocketAdmin;

View File

@@ -5,6 +5,7 @@ var winston = require('winston');
var db = require('../database');
var meta = require('../meta');
var events = require('../events');
var batch = require('../batch');
module.exports = function (User) {
User.auth = {};
@@ -142,4 +143,36 @@ module.exports = function (User) {
}
], callback);
};
User.auth.deleteAllSessions = function (callback) {
var _ = require('underscore');
batch.processSortedSet('users:joindate', function (uids, next) {
var sessionKeys = uids.map(function (uid) {
return 'uid:' + uid + ':sessions';
});
var sessionUUIDKeys = uids.map(function (uid) {
return 'uid:' + uid + ':sessionUUID:sessionId';
});
async.waterfall([
function (next) {
db.getSortedSetRange(sessionKeys, 0, -1, next);
},
function (sids, next) {
sids = _.flatten(sids);
async.parallel([
async.apply(db.deleteAll, sessionUUIDKeys),
async.apply(db.deleteAll, sessionKeys),
function (next) {
async.each(sids, function (sid, next) {
db.sessionStore.destroy(sid, next);
}, next);
}
], next);
}
], next);
}, {batch: 1000}, callback);
};
};

View File

@@ -48,6 +48,13 @@
Leave blank for default
</p>
</div>
<div class="form-group">
<button id="delete-all-sessions" class="btn btn-danger">Revoke All Sessions</button>
<p class="help-block">
This will delete all sessions, you will be logged out and will have to login again!
</p>
</div>
</form>
</div>
</div>