@@ -8,10 +8,11 @@ var isDbg = require('../libs/debug').isDbg;
8
8
//
9
9
10
10
//--- Dependency inclusions
11
- var async = require ( 'async' ) ;
12
11
var exec = require ( 'child_process' ) . exec ;
13
- var git = require ( 'git-rev' ) ;
12
+
13
+ var async = require ( 'async' ) ;
14
14
var _ = require ( 'underscore' ) ;
15
+ var git = require ( 'git-rev' ) ;
15
16
16
17
//--- Model inclusions
17
18
var Comment = require ( '../models/comment' ) . Comment ;
@@ -345,86 +346,120 @@ exports.adminProcessCloneView = function (aReq, aRes, aNext) {
345
346
}
346
347
347
348
exports . adminSessionActiveView = function ( aReq , aRes , aNext ) {
348
- if ( ! userIsAdmin ( aReq ) ) {
349
+ function preRender ( ) {
350
+ }
351
+
352
+ function render ( ) {
353
+ aRes . render ( 'pages/adminSessionListPage' , options ) ;
354
+ }
355
+
356
+ function asyncComplete ( aErr ) {
357
+ if ( aErr ) {
358
+ aNext ( ) ;
359
+ return ;
360
+ }
361
+
362
+ preRender ( ) ;
363
+ render ( ) ;
364
+ }
365
+
366
+ //
367
+ var options = { } ;
368
+ var authedUser = aReq . session . user ;
369
+ var tasks = [ ] ;
370
+
371
+ var store = aReq . sessionStore ;
372
+ var sessionColl = store . db . collection ( 'sessions' ) ;
373
+
374
+ // Session
375
+ options . authedUser = authedUser = modelParser . parseUser ( authedUser ) ;
376
+ options . isMod = authedUser && authedUser . isMod ;
377
+ options . isAdmin = authedUser && authedUser . isAdmin ;
378
+
379
+ if ( ! options . isAdmin ) {
349
380
statusCodePage ( aReq , aRes , aNext , {
350
381
statusCode : 403 ,
351
382
statusMessage : 'This page is only accessible by admins.'
352
383
} ) ;
353
384
return ;
354
385
}
355
386
356
- var store = aReq . sessionStore ;
357
- var sessionColl = store . db . collection ( 'sessions' ) ;
358
387
359
- sessionColl . find ( {
360
- } , function ( aErr , aUserSessions ) {
361
- if ( aErr ) {
362
- statusCodePage ( aReq , aRes , aNext , {
363
- statusCode : 520 ,
364
- statusMessage : 'Unknown error with `sessionColl.find`.'
365
- } ) ;
366
- return ;
367
- }
388
+ // Page metadata
389
+ pageMetadata ( options , [ 'Sessions' , 'Admin' ] ) ;
368
390
369
- if ( ! aUserSessions ) {
370
- statusCodePage ( aReq , aRes , aNext , {
371
- statusCode : 200 ,
372
- statusMessage : 'No sessions'
373
- } ) ;
374
- return ;
375
- }
391
+ //--- Tasks
376
392
377
- aUserSessions . toArray ( function ( aErr , aSessionsData ) {
378
- var options = { } ;
379
- options . namedCount = 0 ;
380
- options . rawCount = 0 ;
381
- options . session = [ ] ;
393
+ tasks . push ( function ( aCallback ) {
382
394
395
+ sessionColl . find ( {
396
+ } , function ( aErr , aUserSessions ) {
383
397
if ( aErr ) {
384
- // We want to know what the error value is in logging review
385
- console . error ( 'Unknown error with `toArray`.\n' + aErr ) ;
386
-
387
398
statusCodePage ( aReq , aRes , aNext , {
388
399
statusCode : 520 ,
389
- statusMessage : 'Unknown error with `toArray `.'
400
+ statusMessage : 'Unknown error with `sessionColl.find `.'
390
401
} ) ;
391
402
return ;
392
403
}
393
404
394
- aSessionsData . forEach ( function ( aElement , aIndex ) {
395
- var data = JSON . parse ( aElement . session ) ;
405
+ if ( ! aUserSessions ) {
406
+ statusCodePage ( aReq , aRes , aNext , {
407
+ statusCode : 200 ,
408
+ statusMessage : 'No sessions'
409
+ } ) ;
410
+ return ;
411
+ }
396
412
397
- if ( data && data . user ) {
398
- options . session . push ( {
399
- _id : aElement . _id ,
400
- name : data . user . name ,
401
- cookie : data . cookie
402
- } ) ;
413
+ aUserSessions . toArray ( function ( aErr , aSessionsData ) {
414
+ options . sessionList = [ ] ;
403
415
404
- options . namedCount ++ ;
416
+ if ( aErr ) {
417
+ // We want to know what the error value is in logging review
418
+ console . error ( 'Unknown error with `toArray`.\n' + aErr ) ;
405
419
406
- } else if ( data && ! data . user ) {
407
- options . session . push ( {
408
- _id : aElement . _id ,
409
- expires : data . cookie . expires ,
410
- data : data
420
+ statusCodePage ( aReq , aRes , aNext , {
421
+ statusCode : 520 ,
422
+ statusMessage : 'Unknown error with `toArray`.'
411
423
} ) ;
424
+ return ;
412
425
}
413
- options . rawCount ++ ;
414
- } ) ;
415
426
416
- // Sort the sessions
417
- options . session = _ . sortBy ( options . session , function ( aSession ) {
418
- return ( aSession . name ) ? aSession . name . toLowerCase ( ) : aSession . name ;
419
- } ) ;
427
+ aSessionsData . forEach ( function ( aElement , aIndex ) {
428
+ var data = JSON . parse ( aElement . session ) ;
429
+ var obj = null ;
430
+
431
+ if ( data ) {
432
+ obj = {
433
+ _id : aElement . _id ,
434
+ name : ( data . user ? data . user . name : data . username ) ,
435
+ userPageUrl : ( data . user ? data . user . userPageUrl : null ) ,
436
+ cookie : {
437
+ expires : ( data . cookie . expires ? new Date ( data . cookie . expires ) : false ) ,
438
+ secure : data . cookie . secure ,
439
+ httpOnly : data . cookie . httpOnly ,
440
+ sameSite : data . cookie . sameSite ,
441
+ sameSiteStrict : data . cookie . sameSite === 'strict' ,
442
+ sameSiteLax : data . cookie . sameSite === 'lax' ,
443
+ }
444
+ } ;
445
+ modelParser . parseDateProperty ( obj . cookie , 'expires' ) ;
446
+ options . sessionList . push ( obj ) ;
447
+ }
448
+ } ) ;
420
449
421
- // Currently output in simplified JSON
422
- aRes . set ( 'Content-Type' , 'application/json; charset=UTF-8' ) ;
423
- aRes . write ( JSON . stringify ( options , null , isPro ? '' : ' ' ) ) ;
424
- aRes . end ( ) ;
450
+ // Sort the sessions for now
451
+ options . sessionList = _ . sortBy ( options . sessionList , function ( aSession ) {
452
+ return ( aSession . name ) ? aSession . name . toLowerCase ( ) : aSession . name ;
453
+ } ) ;
425
454
455
+ aCallback ( ) ;
456
+ } ) ;
426
457
} ) ;
458
+
427
459
} ) ;
460
+
461
+ //---
462
+ async . parallel ( tasks , asyncComplete ) ;
428
463
} ;
429
464
430
465
// View everything about current deployed `./package.json`
0 commit comments