1
1
import * as mongodb from 'mongodb' ;
2
2
// tslint:disable-next-line
3
3
import { ObjectID } from 'mongodb' ;
4
+ import { randomBytes } from 'crypto' ;
4
5
import Mongo from '../src' ;
5
6
6
- let mongo ;
7
+ const generateRandomToken = ( length : number = 43 ) : string =>
8
+ randomBytes ( length ) . toString ( 'hex' ) ;
9
+
10
+ let mongo : Mongo ;
7
11
let db : mongodb . Db ;
8
12
let client : mongodb . MongoClient ;
9
13
const user = {
@@ -549,17 +553,18 @@ describe('Mongo', () => {
549
553
550
554
describe ( 'createSession' , ( ) => {
551
555
it ( 'should create session' , async ( ) => {
552
- const sessionId = await mongo . createSession (
553
- session . userId ,
554
- session . ip ,
555
- session . userAgent
556
- ) ;
556
+ const token = generateRandomToken ( ) ;
557
+ const sessionId = await mongo . createSession ( session . userId , token , {
558
+ ip : session . ip ,
559
+ userAgent : session . userAgent ,
560
+ } ) ;
557
561
const ret = await mongo . findSessionById ( sessionId ) ;
558
562
expect ( ret ) . toBeTruthy ( ) ;
559
563
expect ( ret . _id ) . toBeTruthy ( ) ;
560
564
expect ( ret . userId ) . toEqual ( session . userId ) ;
561
565
expect ( ret . ip ) . toEqual ( session . ip ) ;
562
566
expect ( ret . userAgent ) . toEqual ( session . userAgent ) ;
567
+ expect ( ret . token ) . toEqual ( token ) ;
563
568
expect ( ret . valid ) . toEqual ( true ) ;
564
569
expect ( ret . createdAt ) . toBeTruthy ( ) ;
565
570
expect ( ret . createdAt ) . toEqual ( new Date ( ret . createdAt ) . getTime ( ) ) ;
@@ -568,10 +573,11 @@ describe('Mongo', () => {
568
573
569
574
it ( 'should create session with extra data' , async ( ) => {
570
575
const impersonatorUserId = '789' ;
576
+ const token = generateRandomToken ( ) ;
571
577
const sessionId = await mongo . createSession (
572
578
session . userId ,
573
- session . ip ,
574
- session . userAgent ,
579
+ token ,
580
+ { ip : session . ip , userAgent : session . userAgent } ,
575
581
{ impersonatorUserId }
576
582
) ;
577
583
const ret = await mongo . findSessionById ( sessionId ) ;
@@ -581,6 +587,7 @@ describe('Mongo', () => {
581
587
expect ( ret . ip ) . toEqual ( session . ip ) ;
582
588
expect ( ret . userAgent ) . toEqual ( session . userAgent ) ;
583
589
expect ( ret . valid ) . toEqual ( true ) ;
590
+ expect ( ret . token ) . toEqual ( token ) ;
584
591
expect ( ret . createdAt ) . toEqual ( new Date ( ret . createdAt ) . getTime ( ) ) ;
585
592
expect ( ret . updatedAt ) . toBeTruthy ( ) ;
586
593
expect ( ret . extraData ) . toEqual ( { impersonatorUserId } ) ;
@@ -618,6 +625,23 @@ describe('Mongo', () => {
618
625
} ) ;
619
626
} ) ;
620
627
628
+ describe ( 'findSessionByToken' , ( ) => {
629
+ it ( 'should return null for not found session' , async ( ) => {
630
+ const ret = await mongo . findSessionByToken ( '589871d1c9393d445745a57c' ) ;
631
+ expect ( ret ) . not . toBeTruthy ( ) ;
632
+ } ) ;
633
+
634
+ it ( 'should find session' , async ( ) => {
635
+ const token = generateRandomToken ( ) ;
636
+ const sessionId = await mongo . createSession ( session . userId , token , {
637
+ ip : session . ip ,
638
+ userAgent : session . userAgent ,
639
+ } ) ;
640
+ const ret = await mongo . findSessionByToken ( token ) ;
641
+ expect ( ret ) . toBeTruthy ( ) ;
642
+ } ) ;
643
+ } ) ;
644
+
621
645
describe ( 'findSessionById' , ( ) => {
622
646
it ( 'should return null for not found session' , async ( ) => {
623
647
const ret = await mongo . findSessionById ( '589871d1c9393d445745a57c' ) ;
@@ -640,18 +664,22 @@ describe('Mongo', () => {
640
664
} ) ;
641
665
642
666
it ( 'should update session' , async ( ) => {
643
- const sessionId = await mongo . createSession (
644
- session . userId ,
645
- session . ip ,
646
- session . userAgent
647
- ) ;
667
+ const token = generateRandomToken ( ) ;
668
+ const sessionId = await mongo . createSession ( session . userId , token , {
669
+ ip : session . ip ,
670
+ userAgent : session . userAgent ,
671
+ } ) ;
648
672
await delay ( 10 ) ;
649
- await mongo . updateSession ( sessionId , 'new ip' , 'new user agent' ) ;
673
+ await mongo . updateSession ( sessionId , {
674
+ ip : 'new ip' ,
675
+ userAgent : 'new user agent' ,
676
+ } ) ;
650
677
const ret = await mongo . findSessionById ( sessionId ) ;
651
678
expect ( ret . userId ) . toEqual ( session . userId ) ;
652
679
expect ( ret . ip ) . toEqual ( 'new ip' ) ;
653
680
expect ( ret . userAgent ) . toEqual ( 'new user agent' ) ;
654
681
expect ( ret . valid ) . toEqual ( true ) ;
682
+ expect ( ret . token ) . toEqual ( token ) ;
655
683
expect ( ret . createdAt ) . toBeTruthy ( ) ;
656
684
expect ( ret . updatedAt ) . toBeTruthy ( ) ;
657
685
expect ( ret . createdAt ) . not . toEqual ( ret . updatedAt ) ;
@@ -667,11 +695,11 @@ describe('Mongo', () => {
667
695
} ) ;
668
696
669
697
it ( 'invalidates a session' , async ( ) => {
670
- const sessionId = await mongo . createSession (
671
- session . userId ,
672
- session . ip ,
673
- session . userAgent
674
- ) ;
698
+ const token = generateRandomToken ( ) ;
699
+ const sessionId = await mongo . createSession ( session . userId , token , {
700
+ ip : session . ip ,
701
+ userAgent : session . userAgent ,
702
+ } ) ;
675
703
await delay ( 10 ) ;
676
704
await mongo . invalidateSession ( sessionId ) ;
677
705
const ret = await mongo . findSessionById ( sessionId ) ;
@@ -684,13 +712,13 @@ describe('Mongo', () => {
684
712
it ( 'invalidates all sessions' , async ( ) => {
685
713
const sessionId1 = await mongo . createSession (
686
714
session . userId ,
687
- session . ip ,
688
- session . userAgent
715
+ generateRandomToken ( ) ,
716
+ { ip : session . ip , userAgent : session . userAgent }
689
717
) ;
690
718
const sessionId2 = await mongo . createSession (
691
719
session . userId ,
692
- session . ip ,
693
- session . userAgent
720
+ generateRandomToken ( ) ,
721
+ { ip : session . ip , userAgent : session . userAgent }
694
722
) ;
695
723
await delay ( 10 ) ;
696
724
await mongo . invalidateAllSessions ( session . userId ) ;
0 commit comments