Skip to content

Commit 66097f2

Browse files
committed
chore: moved ChallengeNameType.mfaSetup switch statement logic to a helper method
1 parent 7b901af commit 66097f2

File tree

1 file changed

+59
-49
lines changed

1 file changed

+59
-49
lines changed

packages/auth/amplify_auth_cognito_dart/lib/src/state/machines/sign_in_state_machine.dart

Lines changed: 59 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -330,55 +330,8 @@ final class SignInStateMachine
330330
createEmailMfaRequest(event),
331331
ChallengeNameType.selectMfaType when hasUserResponse =>
332332
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),
382335
ChallengeNameType.newPasswordRequired when hasUserResponse =>
383336
createNewPasswordRequest(event),
384337
_ => null,
@@ -698,6 +651,63 @@ final class SignInStateMachine
698651
}
699652
}
700653

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+
701711
/// Completes set up of a TOTP MFA.
702712
@protected
703713
Future<RespondToAuthChallengeRequest> createMfaSetupRequest(

0 commit comments

Comments
 (0)