@@ -416,6 +416,167 @@ const addAbacAttributesToUserDirectly = async (userId: string, abacAttributes: I
416416 } ) ;
417417 } ) ;
418418
419+ describe ( 'Audit messages by user and ABAC-managed rooms' , ( ) => {
420+ let auditUser : IUser ;
421+ let auditUserCreds : Credentials ;
422+ let auditRoom : IRoom ;
423+ const auditAttrKey = `audit_attr_${ Date . now ( ) } ` ;
424+ let startDate : Date ;
425+ let endDate : Date ;
426+
427+ before ( async ( ) => {
428+ startDate = new Date ( ) ;
429+ endDate = new Date ( startDate . getTime ( ) + 1000 * 60 ) ;
430+
431+ auditUser = await createUser ( ) ;
432+ auditUserCreds = await login ( auditUser . username , password ) ;
433+
434+ await request
435+ . post ( `${ v1 } /abac/attributes` )
436+ . set ( credentials )
437+ . send ( { key : auditAttrKey , values : [ 'v1' ] } )
438+ . expect ( 200 ) ;
439+
440+ await addAbacAttributesToUserDirectly ( auditUser . _id , [ { key : auditAttrKey , values : [ 'v1' ] } ] ) ;
441+ await addAbacAttributesToUserDirectly ( credentials [ 'X-User-Id' ] , [ { key : auditAttrKey , values : [ 'v1' ] } ] ) ;
442+
443+ const roomRes = await createRoom ( { type : 'p' , name : `abac-audit-user-room-${ Date . now ( ) } ` , members : [ auditUser . username ! ] } ) ;
444+ auditRoom = roomRes . body . group as IRoom ;
445+
446+ await request
447+ . post ( `${ v1 } /abac/rooms/${ auditRoom . _id } /attributes/${ auditAttrKey } ` )
448+ . set ( credentials )
449+ . send ( { values : [ 'v1' ] } )
450+ . expect ( 200 ) ;
451+ } ) ;
452+
453+ after ( async ( ) => {
454+ await deleteRoom ( { type : 'p' , roomId : auditRoom . _id } ) ;
455+ await deleteUser ( auditUser ) ;
456+ } ) ;
457+
458+ it ( "should return no messages when auditing a user that's part of an ABAC-managed room" , async ( ) => {
459+ await request
460+ . post ( `${ v1 } /chat.sendMessage` )
461+ . set ( auditUserCreds )
462+ . send ( { message : { rid : auditRoom . _id , msg : 'audit message in abac room' } } )
463+ . expect ( 200 ) ;
464+
465+ await request
466+ . post ( methodCall ( 'auditGetMessages' ) )
467+ . set ( credentials )
468+ . send ( {
469+ message : JSON . stringify ( {
470+ method : 'auditGetMessages' ,
471+ params : [
472+ {
473+ type : 'u' ,
474+ msg : 'audit message in abac room' ,
475+ startDate : { $date : startDate } ,
476+ endDate : { $date : endDate } ,
477+ rid : '' ,
478+ users : [ auditUser . username ] ,
479+ visitor : '' ,
480+ agent : '' ,
481+ } ,
482+ ] ,
483+ id : 'abac-audit-1' ,
484+ msg : 'method' ,
485+ } ) ,
486+ } )
487+ . expect ( 200 )
488+ . expect ( ( res ) => {
489+ const parsed = JSON . parse ( res . body . message ) ;
490+ expect ( parsed ) . to . have . property ( 'result' ) ;
491+ expect ( parsed . result ) . to . be . an ( 'array' ) . that . is . empty ;
492+ } ) ;
493+ } ) ;
494+
495+ it ( 'should return no messages when auditing a user that WAS part of an ABAC-managed room' , async ( ) => {
496+ await request
497+ . post ( `${ v1 } /chat.sendMessage` )
498+ . set ( auditUserCreds )
499+ . send ( { message : { rid : auditRoom . _id , msg : 'audit message before removal' } } )
500+ . expect ( 200 ) ;
501+
502+ await request . post ( `${ v1 } /groups.kick` ) . set ( credentials ) . send ( { roomId : auditRoom . _id , username : auditUser . username } ) . expect ( 200 ) ;
503+
504+ await request
505+ . post ( methodCall ( 'auditGetMessages' ) )
506+ . set ( credentials )
507+ . send ( {
508+ message : JSON . stringify ( {
509+ method : 'auditGetMessages' ,
510+ params : [
511+ {
512+ type : 'u' ,
513+ msg : 'audit message before removal' ,
514+ startDate : { $date : startDate } ,
515+ endDate : { $date : endDate } ,
516+ rid : '' ,
517+ users : [ auditUser . username ] ,
518+ visitor : '' ,
519+ agent : '' ,
520+ } ,
521+ ] ,
522+ id : 'abac-audit-2' ,
523+ msg : 'method' ,
524+ } ) ,
525+ } )
526+ . expect ( 200 )
527+ . expect ( ( res ) => {
528+ const parsed = JSON . parse ( res . body . message ) ;
529+ expect ( parsed ) . to . have . property ( 'result' ) ;
530+ expect ( parsed . result ) . to . be . an ( 'array' ) . that . is . empty ;
531+ } ) ;
532+ } ) ;
533+
534+ it ( "should return messages when auditing a user that is part of a room that's no longer ABAC-managed" , async ( ) => {
535+ await request
536+ . post ( `${ v1 } /groups.invite` )
537+ . set ( credentials )
538+ . send ( { roomId : auditRoom . _id , usernames : [ auditUser . username ] } )
539+ . expect ( 200 ) ;
540+
541+ await request . delete ( `${ v1 } /abac/rooms/${ auditRoom . _id } /attributes/${ auditAttrKey } ` ) . set ( credentials ) . expect ( 200 ) ;
542+
543+ await request
544+ . post ( `${ v1 } /chat.sendMessage` )
545+ . set ( auditUserCreds )
546+ . send ( { message : { rid : auditRoom . _id , msg : 'audit message after room no longer abac' } } )
547+ . expect ( 200 ) ;
548+
549+ await request
550+ . post ( methodCall ( 'auditGetMessages' ) )
551+ . set ( credentials )
552+ . send ( {
553+ message : JSON . stringify ( {
554+ method : 'auditGetMessages' ,
555+ params : [
556+ {
557+ type : 'u' ,
558+ msg : 'audit message after room no longer abac' ,
559+ startDate : { $date : startDate } ,
560+ endDate : { $date : endDate } ,
561+ rid : '' ,
562+ users : [ auditUser . username ] ,
563+ visitor : '' ,
564+ agent : '' ,
565+ } ,
566+ ] ,
567+ id : 'abac-audit-3' ,
568+ msg : 'method' ,
569+ } ) ,
570+ } )
571+ . expect ( 200 )
572+ . expect ( ( res ) => {
573+ const parsed = JSON . parse ( res . body . message ) ;
574+ expect ( parsed ) . to . have . property ( 'result' ) ;
575+ expect ( parsed . result ) . to . be . an ( 'array' ) . with . lengthOf . greaterThan ( 0 ) ;
576+ } ) ;
577+ } ) ;
578+ } ) ;
579+
419580 it ( 'PUT room attribute should replace values and keep inUse=true' , async ( ) => {
420581 await request
421582 . put ( `${ v1 } /abac/rooms/${ testRoom . _id } /attributes/${ updatedKey } ` )
0 commit comments