@@ -521,6 +521,82 @@ describe('Email Verification Token Expiration: ', () => {
521
521
} ) ;
522
522
} ) ;
523
523
524
+ it ( 'master key can create users and change the email of a user without triggering a re-verification' , done => {
525
+ const user = new Parse . User ( ) ;
526
+
527
+ let sendEmailCount = 0 ;
528
+ const emailAdapter = {
529
+ sendVerificationEmail : ( ) => {
530
+ sendEmailCount += 1 ;
531
+ } ,
532
+ sendPasswordResetEmail : ( ) => {
533
+ sendEmailCount += 1 ;
534
+ return Promise . resolve ( ) ;
535
+ } ,
536
+ sendMail : ( ) => {
537
+ sendEmailCount += 1 ;
538
+ } ,
539
+ } ;
540
+ const serverConfig = {
541
+ appName : 'emailVerifyToken' ,
542
+ verifyUserEmails : true ,
543
+ preventLoginWithUnverifiedEmail : true ,
544
+ emailAdapter : emailAdapter ,
545
+ emailVerifyTokenValidityDuration : 5 , // 5 seconds
546
+ publicServerURL : 'http://localhost:8378/1' ,
547
+ } ;
548
+
549
+ reconfigureServer ( serverConfig )
550
+ . then ( ( ) => {
551
+ user . setUsername ( 'masterKeyBypassEmailVerification' ) ;
552
+ user . setPassword ( 'expiringToken' ) ;
553
+ user . set ( 'email' , '[email protected] ' ) ;
554
+ user . set ( 'emailVerified' , true ) ;
555
+ return user . save ( null , { useMasterKey : true } ) ;
556
+ } )
557
+ . then ( ( ) => {
558
+ const config = Config . get ( 'test' ) ;
559
+ return config . database
560
+ . find ( '_User' , { username : 'masterKeyBypassEmailVerification' } )
561
+ . then ( results => {
562
+ return results [ 0 ] ;
563
+ } ) ;
564
+ } )
565
+ . then ( userFromDb => {
566
+ expect ( typeof userFromDb ) . toBe ( 'object' ) ;
567
+ expect ( sendEmailCount ) . toBe ( 0 ) ;
568
+ expect ( userFromDb [ 'emailVerified' ] ) . toBe ( true ) ;
569
+ expect ( userFromDb [ 'email' ] ) . toBe ( '[email protected] ' ) ;
570
+ expect ( user . getSessionToken ( ) ) . toBeDefined ( ) ;
571
+
572
+ // change the email
573
+ user . set ( 'email' , '[email protected] ' ) ;
574
+ user . set ( 'emailVerified' , true ) ;
575
+ return new Promise ( resolve => {
576
+ setTimeout ( ( ) => resolve ( user . save ( null , { useMasterKey : true } ) ) , 500 ) ;
577
+ } ) ;
578
+ } )
579
+ . then ( ( ) => {
580
+ const config = Config . get ( 'test' ) ;
581
+ return config . database
582
+ . find ( '_User' , { username : 'masterKeyBypassEmailVerification' } )
583
+ . then ( results => {
584
+ return results [ 0 ] ;
585
+ } ) ;
586
+ } )
587
+ . then ( userAfterEmailReset => {
588
+ expect ( typeof userAfterEmailReset ) . toBe ( 'object' ) ;
589
+ expect ( sendEmailCount ) . toBe ( 0 ) ;
590
+ expect ( userAfterEmailReset [ 'emailVerified' ] ) . toBe ( true ) ;
591
+ expect ( userAfterEmailReset [ 'email' ] ) . toBe ( '[email protected] ' ) ;
592
+ done ( ) ;
593
+ } )
594
+ . catch ( error => {
595
+ jfail ( error ) ;
596
+ done ( ) ;
597
+ } ) ;
598
+ } ) ;
599
+
524
600
it ( 'should send a new verification email when a resend is requested and the user is UNVERIFIED' , done => {
525
601
const user = new Parse . User ( ) ;
526
602
let sendEmailOptions ;
0 commit comments