Skip to content

Commit 22a6d61

Browse files
authored
Add session specific here (#1489)
* Scoot a bunch of code around for reuse Post #1446 ... related to #604 Auto-merge
1 parent 50b8ff4 commit 22a6d61

File tree

5 files changed

+85
-74
lines changed

5 files changed

+85
-74
lines changed

controllers/admin.js

+5-46
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ var loadPassport = require('../libs/passportLoader').loadPassport;
3939
var strategyInstances = require('../libs/passportLoader').strategyInstances;
4040
var statusCodePage = require('../libs/templateHelpers').statusCodePage;
4141
var updateSessions = require('../libs/modifySessions').update;
42-
var findSessionData = require('../libs/modifySessions').findSessionData;
42+
var getSessionDataList = require('../libs/modifySessions').getSessionDataList;
4343
var pageMetadata = require('../libs/templateHelpers').pageMetadata;
4444

4545
//--- Configuration inclusions
@@ -382,6 +382,8 @@ exports.adminSessionActiveView = function (aReq, aRes, aNext) {
382382
options.isFounder = authedUser && authedUser.isFounder;
383383
options.isRoot = authedUser && authedUser.isRoot;
384384

385+
options.isAdminSessionActiveView = true;
386+
385387
if (!options.isAdmin) {
386388
statusCodePage(aReq, aRes, aNext, {
387389
statusCode: 403,
@@ -401,54 +403,11 @@ exports.adminSessionActiveView = function (aReq, aRes, aNext) {
401403
//--- Tasks
402404

403405
tasks.push(function (aCallback) {
404-
findSessionData({ username: username }, store, options, function (aErr) {
405-
if (aErr) {
406-
statusCodePage(aReq, aRes, aNext, {
407-
statusCode: 500,
408-
statusMessage: aErr
409-
});
410-
return;
411-
}
412-
413-
aCallback();
414-
});
415-
});
416-
417-
// Post processing that can't be handled in modelParser
418-
tasks.push(function (aCallback) {
419-
options.sessionList = _.map(options.sessionList, function (aSession) {
420-
var session = modelParser.parseSession(aSession);
421-
422-
var oujsOptions = session.passport.oujsOptions;
423-
424-
session.canDestroyOne = true; // TODO: Perhaps do some further conditionals
425-
426-
oujsOptions.remoteAddressMask = session.name === authedUser.name && !oujsOptions.authFrom
427-
? oujsOptions.remoteAddressMask
428-
: oujsOptions.authFrom
429-
? oujsOptions.authFrom
430-
: null;
431-
432-
session.showExtend = aReq.sessionID === oujsOptions.sid;
433-
session.canExtend = !oujsOptions.extended;
434-
435-
return session;
436-
});
437-
438-
aCallback();
439-
});
440-
441-
// Sort newest to oldest
442-
tasks.push(function (aCallback) {
443-
options.sessionList = _.sortBy(options.sessionList, function (aSession) {
444-
return -aSession.passport.oujsOptions.since || 0;
445-
});
446-
447-
aCallback();
406+
getSessionDataList(aReq, options, aCallback);
448407
});
449408

450409
//---
451-
async.series(tasks, asyncComplete);
410+
async.parallel(tasks, asyncComplete);
452411
};
453412

454413
// View everything about current deployed `./package.json`

controllers/user.js

+2-14
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ var countTask = require('../libs/tasks').countTask;
5353
var pageMetadata = require('../libs/templateHelpers').pageMetadata;
5454
var orderDir = require('../libs/templateHelpers').orderDir;
5555

56+
var getSessionDataList = require('../libs/modifySessions').getSessionDataList;
5657
var extendSession = require('../libs/modifySessions').extend;
5758
var destroyOneSession = require('../libs/modifySessions').destroyOne;
5859

@@ -1031,22 +1032,9 @@ exports.userEditPreferencesPage = function (aReq, aRes, aNext) {
10311032

10321033
// User session control
10331034
tasks.push(function (aCallback) {
1034-
if (!aReq.session.passport) {
1035-
aReq.session.passport = {};
1036-
}
1037-
1038-
if (!aReq.session.passport.oujsOptions) {
1039-
aReq.session.passport.oujsOptions = {};
1040-
}
1041-
1042-
if (!aReq.session.passport.oujsOptions.extended) {
1043-
options.sessionControl = true;
1044-
}
1045-
1046-
aCallback();
1035+
getSessionDataList(aReq, options, aCallback);
10471036
});
10481037

1049-
10501038
// UserPage tasks
10511039
tasks = tasks.concat(getUserPageTasks(options));
10521040

libs/modifySessions.js

+66-4
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,20 @@ var isPro = require('../libs/debug').isPro;
55
var isDev = require('../libs/debug').isDev;
66
var isDbg = require('../libs/debug').isDbg;
77

8-
//--- Library inclusions
8+
//--- Dependency inclusions
9+
var _ = require('underscore');
10+
var async = require('async');
911
var moment = require('moment');
1012

11-
var settings = require('../models/settings.json');
13+
//--- Library inclusions
14+
var modelParser = require('../libs/modelParser');
1215
var findMeta = require('../controllers/scriptStorage').findMeta;
1316

17+
//--- Configuration inclusions
18+
var settings = require('../models/settings.json');
19+
1420
//
1521
// This library allows for the modifications of user sessions
16-
var async = require('async');
1722

1823
exports.init = function (aStore) {
1924
return function (aReq, aRes, aNext) {
@@ -213,6 +218,62 @@ exports.destroy = function (aReq, aUser, aCallback) {
213218
}, aCallback);
214219
};
215220

221+
exports.getSessionDataList = function (aReq, aOptions, aCallback) {
222+
var store = aReq.sessionStore;
223+
var authedUser = aReq.session.user;
224+
225+
var username = aReq.query.q;
226+
var query = {};
227+
228+
if (aOptions.isAdmin && aOptions.isAdminSessionActiveView) {
229+
query = { username: username };
230+
} else {
231+
query = { username: authedUser.name };
232+
}
233+
234+
async.series([
235+
function (aInnerCallback) {
236+
exports.findSessionData(query, store, aOptions, function (aErr) {
237+
if (aErr) {
238+
aCallback(aErr, null);
239+
return;
240+
}
241+
242+
aInnerCallback();
243+
});
244+
},
245+
function (aInnerCallback) {
246+
aOptions.sessionList = _.map(aOptions.sessionList, function (aSession) {
247+
var session = modelParser.parseSession(aSession);
248+
var oujsOptions = session.passport.oujsOptions;
249+
250+
session.showExtend = aReq.sessionID === oujsOptions.sid;
251+
session.canExtend = !oujsOptions.extended;
252+
session.canDestroyOne = true; // TODO: Perhaps do some further conditionals
253+
254+
oujsOptions.remoteAddressMask = session.name === authedUser.name && !oujsOptions.authFrom
255+
? oujsOptions.remoteAddressMask
256+
: oujsOptions.authFrom
257+
? oujsOptions.authFrom
258+
: null;
259+
260+
return session;
261+
});
262+
263+
aInnerCallback();
264+
},
265+
function (aInnerCallback) {
266+
aOptions.sessionList = _.sortBy(aOptions.sessionList, function (aSession) {
267+
return -aSession.passport.oujsOptions.since || 0;
268+
});
269+
270+
aInnerCallback();
271+
}], function (aErr) {
272+
aCallback(null);
273+
}
274+
);
275+
};
276+
216277
exports.findSessionData = function (aQuery, aStore, aOptions, aCallback) {
217278
var sessionColl = aStore.db.collection('sessions');
218279

@@ -264,7 +325,8 @@ exports.findSessionData = function (aQuery, aStore, aOptions, aCallback) {
264325
// Very simple query filter search check to start.
265326
// Currently only looking in `data.passport.oujsOptions.username`.
266327
if (aQuery && aQuery.username) {
267-
rQuery = new RegExp('^' + aQuery.username, 'i');
328+
rQuery = new RegExp('^' + aQuery.username +
329+
(aOptions.isAdminSessionActiveView ? '' : '$'), 'i');
268330

269331
if (rQuery.test(data.passport.oujsOptions.username)) {
270332
aOptions.sessionList.push(data);

views/includes/session.html

+1-1
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@
4545
{{#showExtend}}
4646
<form class="form-inline" action="/api/user/session/extend" method="post">
4747
<div class="input-group">
48-
<button class="btn btn-success" type="submit"{{^canExtend}}disabled="disabled"{{/canExtend}}><i class="fa fa-fw fa-history"></i> Extend</button>
48+
<button class="btn btn-success" type="submit"{{^canExtend}}disabled="disabled"{{/canExtend}}{{#canExtend}} title="Usually the default session timeout is enough but if you need some more time it is available here. Please use responsibly."{{/canExtend}}><i class="fa fa-fw fa-history"></i> Extend</button>
4949
</div>
5050
</form>
5151
{{/showExtend}}

views/pages/userEditPreferencesPage.html

+11-9
Original file line numberDiff line numberDiff line change
@@ -37,19 +37,21 @@ <h2 class="edit-authentication">Authentication</h2>
3737
</div>
3838
</form>
3939
</div>
40-
{{#sessionControl}}
4140
<div class="edit-session-box">
42-
<h2 class="edit-session">Session</h2>
43-
<form method="post" action="/api/user/session/extend">
44-
<div class="input-group col-xs-12">
45-
<div class="alert alert-warning small" role="alert">
46-
<button class="btn btn-success" type="submit"><i class="fa fa-fw fa-history"></i> Extend this session</button>
47-
<i class="fa fa-exclamation-triangle"></i> <strong>NOTICE</strong>: Usually the default session timeout is enough but if you need some more time it is available here. Please use responsibly.
41+
<h2 class="edit-session">Sessions</h2>
42+
<div class="session-area list-group">
43+
{{#sessionList}}
44+
{{> includes/session.html }}
45+
{{/sessionList}}
46+
{{^sessionList}}
47+
<div class="panel">
48+
<div class="panel-body">
49+
<em>This user hasn't added any sessions yet.</em>
4850
</div>
4951
</div>
50-
</form>
52+
{{/sessionList}}
53+
</div>
5154
</div>
52-
{{/sessionControl}}
5355
</div>
5456
</div>
5557
</div>

0 commit comments

Comments
 (0)