all files / src/controllers/accounts/ session.js

24% Statements 6/25
0% Branches 0/13
0% Functions 0/7
24% Lines 6/25
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52                                                                                           
'use strict';
 
var async = require('async');
 
var db = require('../../database');
var user = require('../../user');
 
var sessionController = {};
 
sessionController.revoke = function(req, res, next) {
	if (!req.params.hasOwnProperty('uuid')) {
		return next();
	}
 
	var _id;
 
	async.waterfall([
		function (next) {
			db.getSortedSetRange('uid:' + req.uid + ':sessions', 0, -1, next);
		},
		function (sids, done) {
			async.eachSeries(sids, function(sid, next) {
				db.sessionStore.get(sid, function(err, sessionObj) {
					if (err) {
						return next(err);
					}
					if (sessionObj && sessionObj.meta && sessionObj.meta.uuid === req.params.uuid) {
						_id = sid;
						done();
					} else {
						next();
					}
				});
			}, next);
		},
		function (next) {
			if (!_id) {
				return next(new Error('[[error:no-session-found]]'));
			}
 
			user.auth.revokeSession(_id, req.uid, next);
		}
	], function(err) {
		if (err) {
			return res.status(500).send(err.message);
		} else {
			return res.sendStatus(200);
		}
	});
};
 
module.exports = sessionController;