@@ -330,55 +330,8 @@ final class SignInStateMachine
330
330
createEmailMfaRequest (event),
331
331
ChallengeNameType .selectMfaType when hasUserResponse =>
332
332
createSelectMfaRequest (event),
333
- ChallengeNameType .mfaSetup => (() async {
334
- final allowedMfaTypes = _allowedMfaTypes;
335
- if (allowedMfaTypes == null || allowedMfaTypes.isEmpty) {
336
- throw const InvalidUserPoolConfigurationException (
337
- 'No MFA types are allowed for setup.' ,
338
- recoverySuggestion: 'Check your user pool MFA configuration.' ,
339
- );
340
- }
341
- // Exclude MfaType.sms from consideration
342
- final mfaTypesForSetup = allowedMfaTypes.difference ({MfaType .sms});
343
- if (mfaTypesForSetup.isEmpty) {
344
- throw const InvalidUserPoolConfigurationException (
345
- 'No eligible MFA types are available for setup.' ,
346
- recoverySuggestion: 'Check your user pool MFA configuration.' ,
347
- );
348
- }
349
- if (mfaTypesForSetup.length == 1 ) {
350
- final mfaType = mfaTypesForSetup.first;
351
- if (mfaType == MfaType .totp) {
352
- _enableMfaType = MfaType .totp;
353
- _totpSetupResult ?? = await associateSoftwareToken ();
354
- if (hasUserResponse) {
355
- return createMfaSetupRequest (event);
356
- } else {
357
- // Need to prompt user for the TOTP code
358
- return null ;
359
- }
360
- } else if (mfaType == MfaType .email) {
361
- _enableMfaType = MfaType .email;
362
- if (hasUserResponse) {
363
- return createEmailMfaSetupRequest (event);
364
- } else {
365
- // Need to prompt user for the email verification code
366
- return null ;
367
- }
368
- } else {
369
- throw InvalidUserPoolConfigurationException (
370
- 'Unsupported MFA type: ${mfaType .name }' ,
371
- recoverySuggestion: 'Check your user pool MFA configuration.' ,
372
- );
373
- }
374
- } else if (hasUserResponse) {
375
- // Handle user's selection
376
- return createMfaSetupRequest (event);
377
- } else {
378
- // Need to prompt user to select an MFA type
379
- return null ;
380
- }
381
- })(),
333
+ ChallengeNameType .mfaSetup =>
334
+ handleMfaSetup (event: event, hasUserResponse: hasUserResponse),
382
335
ChallengeNameType .newPasswordRequired when hasUserResponse =>
383
336
createNewPasswordRequest (event),
384
337
_ => null ,
@@ -698,6 +651,63 @@ final class SignInStateMachine
698
651
}
699
652
}
700
653
654
+ /// Handles the MFA setup challenge.
655
+ @protected
656
+ Future <RespondToAuthChallengeRequest ?> handleMfaSetup ({
657
+ SignInEvent ? event,
658
+ required bool hasUserResponse,
659
+ }) async {
660
+ final allowedMfaTypes = _allowedMfaTypes;
661
+ if (allowedMfaTypes == null || allowedMfaTypes.isEmpty) {
662
+ throw const InvalidUserPoolConfigurationException (
663
+ 'No MFA types are allowed for setup.' ,
664
+ recoverySuggestion: 'Check your user pool MFA configuration.' ,
665
+ );
666
+ }
667
+
668
+ // Exclude MfaType.sms from consideration
669
+ final mfaTypesForSetup = allowedMfaTypes.difference ({MfaType .sms});
670
+ if (mfaTypesForSetup.isEmpty) {
671
+ throw const InvalidUserPoolConfigurationException (
672
+ 'No eligible MFA types are available for setup.' ,
673
+ recoverySuggestion: 'Check your user pool MFA configuration.' ,
674
+ );
675
+ }
676
+
677
+ if (mfaTypesForSetup.length == 1 ) {
678
+ final mfaType = mfaTypesForSetup.first;
679
+ if (mfaType == MfaType .totp) {
680
+ _enableMfaType = MfaType .totp;
681
+ _totpSetupResult ?? = await associateSoftwareToken ();
682
+ if (hasUserResponse) {
683
+ return createMfaSetupRequest (event as SignInRespondToChallenge );
684
+ } else {
685
+ // Need to prompt user for the TOTP code
686
+ return null ;
687
+ }
688
+ } else if (mfaType == MfaType .email) {
689
+ _enableMfaType = MfaType .email;
690
+ if (hasUserResponse) {
691
+ return createEmailMfaSetupRequest (event as SignInRespondToChallenge );
692
+ } else {
693
+ // Need to prompt user for the email verification code
694
+ return null ;
695
+ }
696
+ } else {
697
+ throw InvalidUserPoolConfigurationException (
698
+ 'Unsupported MFA type: ${mfaType .name }' ,
699
+ recoverySuggestion: 'Check your user pool MFA configuration.' ,
700
+ );
701
+ }
702
+ } else if (hasUserResponse) {
703
+ // Handle user's selection
704
+ return createMfaSetupRequest (event as SignInRespondToChallenge );
705
+ } else {
706
+ // Need to prompt user to select an MFA type
707
+ return null ;
708
+ }
709
+ }
710
+
701
711
/// Completes set up of a TOTP MFA.
702
712
@protected
703
713
Future <RespondToAuthChallengeRequest > createMfaSetupRequest (
0 commit comments