diff --git a/controllers/admin.js b/controllers/admin.js index 79f8777db..42d96cb86 100644 --- a/controllers/admin.js +++ b/controllers/admin.js @@ -39,7 +39,7 @@ var loadPassport = require('../libs/passportLoader').loadPassport; var strategyInstances = require('../libs/passportLoader').strategyInstances; var statusCodePage = require('../libs/templateHelpers').statusCodePage; var updateSessions = require('../libs/modifySessions').update; -var findSessionData = require('../libs/modifySessions').findSessionData; +var getSessionDataList = require('../libs/modifySessions').getSessionDataList; var pageMetadata = require('../libs/templateHelpers').pageMetadata; //--- Configuration inclusions @@ -382,6 +382,8 @@ exports.adminSessionActiveView = function (aReq, aRes, aNext) { options.isFounder = authedUser && authedUser.isFounder; options.isRoot = authedUser && authedUser.isRoot; + options.isAdminSessionActiveView = true; + if (!options.isAdmin) { statusCodePage(aReq, aRes, aNext, { statusCode: 403, @@ -401,54 +403,11 @@ exports.adminSessionActiveView = function (aReq, aRes, aNext) { //--- Tasks tasks.push(function (aCallback) { - findSessionData({ username: username }, store, options, function (aErr) { - if (aErr) { - statusCodePage(aReq, aRes, aNext, { - statusCode: 500, - statusMessage: aErr - }); - return; - } - - aCallback(); - }); - }); - - // Post processing that can't be handled in modelParser - tasks.push(function (aCallback) { - options.sessionList = _.map(options.sessionList, function (aSession) { - var session = modelParser.parseSession(aSession); - - var oujsOptions = session.passport.oujsOptions; - - session.canDestroyOne = true; // TODO: Perhaps do some further conditionals - - oujsOptions.remoteAddressMask = session.name === authedUser.name && !oujsOptions.authFrom - ? oujsOptions.remoteAddressMask - : oujsOptions.authFrom - ? oujsOptions.authFrom - : null; - - session.showExtend = aReq.sessionID === oujsOptions.sid; - session.canExtend = !oujsOptions.extended; - - return session; - }); - - aCallback(); - }); - - // Sort newest to oldest - tasks.push(function (aCallback) { - options.sessionList = _.sortBy(options.sessionList, function (aSession) { - return -aSession.passport.oujsOptions.since || 0; - }); - - aCallback(); + getSessionDataList(aReq, options, aCallback); }); //--- - async.series(tasks, asyncComplete); + async.parallel(tasks, asyncComplete); }; // View everything about current deployed `./package.json` diff --git a/controllers/user.js b/controllers/user.js index 69fc6a085..7a027f235 100644 --- a/controllers/user.js +++ b/controllers/user.js @@ -53,6 +53,7 @@ var countTask = require('../libs/tasks').countTask; var pageMetadata = require('../libs/templateHelpers').pageMetadata; var orderDir = require('../libs/templateHelpers').orderDir; +var getSessionDataList = require('../libs/modifySessions').getSessionDataList; var extendSession = require('../libs/modifySessions').extend; var destroyOneSession = require('../libs/modifySessions').destroyOne; @@ -1031,22 +1032,9 @@ exports.userEditPreferencesPage = function (aReq, aRes, aNext) { // User session control tasks.push(function (aCallback) { - if (!aReq.session.passport) { - aReq.session.passport = {}; - } - - if (!aReq.session.passport.oujsOptions) { - aReq.session.passport.oujsOptions = {}; - } - - if (!aReq.session.passport.oujsOptions.extended) { - options.sessionControl = true; - } - - aCallback(); + getSessionDataList(aReq, options, aCallback); }); - // UserPage tasks tasks = tasks.concat(getUserPageTasks(options)); diff --git a/libs/modifySessions.js b/libs/modifySessions.js index 006b77c6a..4730625a5 100644 --- a/libs/modifySessions.js +++ b/libs/modifySessions.js @@ -5,15 +5,20 @@ var isPro = require('../libs/debug').isPro; var isDev = require('../libs/debug').isDev; var isDbg = require('../libs/debug').isDbg; -//--- Library inclusions +//--- Dependency inclusions +var _ = require('underscore'); +var async = require('async'); var moment = require('moment'); -var settings = require('../models/settings.json'); +//--- Library inclusions +var modelParser = require('../libs/modelParser'); var findMeta = require('../controllers/scriptStorage').findMeta; +//--- Configuration inclusions +var settings = require('../models/settings.json'); + // // This library allows for the modifications of user sessions -var async = require('async'); exports.init = function (aStore) { return function (aReq, aRes, aNext) { @@ -213,6 +218,62 @@ exports.destroy = function (aReq, aUser, aCallback) { }, aCallback); }; +exports.getSessionDataList = function (aReq, aOptions, aCallback) { + var store = aReq.sessionStore; + var authedUser = aReq.session.user; + + var username = aReq.query.q; + var query = {}; + + if (aOptions.isAdmin && aOptions.isAdminSessionActiveView) { + query = { username: username }; + } else { + query = { username: authedUser.name }; + } + + async.series([ + function (aInnerCallback) { + exports.findSessionData(query, store, aOptions, function (aErr) { + if (aErr) { + aCallback(aErr, null); + return; + } + + aInnerCallback(); + }); + }, + function (aInnerCallback) { + aOptions.sessionList = _.map(aOptions.sessionList, function (aSession) { + var session = modelParser.parseSession(aSession); + var oujsOptions = session.passport.oujsOptions; + + session.showExtend = aReq.sessionID === oujsOptions.sid; + session.canExtend = !oujsOptions.extended; + session.canDestroyOne = true; // TODO: Perhaps do some further conditionals + + oujsOptions.remoteAddressMask = session.name === authedUser.name && !oujsOptions.authFrom + ? oujsOptions.remoteAddressMask + : oujsOptions.authFrom + ? oujsOptions.authFrom + : null; + + return session; + }); + + aInnerCallback(); + }, + function (aInnerCallback) { + aOptions.sessionList = _.sortBy(aOptions.sessionList, function (aSession) { + return -aSession.passport.oujsOptions.since || 0; + }); + + aInnerCallback(); + }], function (aErr) { + aCallback(null); + } + ); +}; + exports.findSessionData = function (aQuery, aStore, aOptions, aCallback) { var sessionColl = aStore.db.collection('sessions'); @@ -264,7 +325,8 @@ exports.findSessionData = function (aQuery, aStore, aOptions, aCallback) { // Very simple query filter search check to start. // Currently only looking in `data.passport.oujsOptions.username`. if (aQuery && aQuery.username) { - rQuery = new RegExp('^' + aQuery.username, 'i'); + rQuery = new RegExp('^' + aQuery.username + + (aOptions.isAdminSessionActiveView ? '' : '$'), 'i'); if (rQuery.test(data.passport.oujsOptions.username)) { aOptions.sessionList.push(data); diff --git a/views/includes/session.html b/views/includes/session.html index 3b10ba2e3..6c22ff414 100644 --- a/views/includes/session.html +++ b/views/includes/session.html @@ -45,7 +45,7 @@ {{#showExtend}}
- +
{{/showExtend}} diff --git a/views/pages/userEditPreferencesPage.html b/views/pages/userEditPreferencesPage.html index 197dad2d8..02c3250e5 100644 --- a/views/pages/userEditPreferencesPage.html +++ b/views/pages/userEditPreferencesPage.html @@ -37,19 +37,21 @@

Authentication

- {{#sessionControl}}
-

Session

-
-
- - {{/sessionControl}}