Skip to content

Commit 26becec

Browse files
committed
chore: refactor setMfaSettings method
1 parent 764f16d commit 26becec

File tree

1 file changed

+63
-78
lines changed

1 file changed

+63
-78
lines changed

packages/auth/amplify_auth_cognito_dart/lib/src/sdk/sdk_bridge.dart

Lines changed: 63 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -794,92 +794,77 @@ extension MfaSettings on CognitoIdentityProviderClient {
794794

795795
/// Sets the MFA settings for the user.
796796
Future<void> setMfaSettings({
797-
required String accessToken,
798-
MfaPreference? sms,
799-
MfaPreference? totp,
800-
MfaPreference? email,
801-
}) async {
802-
final UserMfaPreference(
803-
enabled: currentEnabled,
804-
preferred: currentPreference
805-
) = await _getRawUserSettings(
806-
accessToken: accessToken,
807-
);
808-
809-
const enabledValues = [
810-
MfaPreference.enabled,
811-
MfaPreference.notPreferred,
812-
MfaPreference.preferred,
813-
];
814-
815-
bool isEnabled(MfaType mfaType) {
816-
final explicitlyDisabled = switch (mfaType) {
817-
MfaType.sms => sms == MfaPreference.disabled,
818-
MfaType.totp => totp == MfaPreference.disabled,
819-
MfaType.email => email == MfaPreference.disabled,
820-
};
821-
if (explicitlyDisabled) {
822-
return false;
797+
required String accessToken,
798+
MfaPreference? sms,
799+
MfaPreference? totp,
800+
MfaPreference? email,
801+
}) async {
802+
final UserMfaPreference(
803+
enabled: currentEnabled,
804+
preferred: currentPreference,
805+
) = await _getRawUserSettings(accessToken: accessToken);
806+
807+
final newPreferredMethods = [
808+
if (sms == MfaPreference.preferred) MfaType.sms,
809+
if (totp == MfaPreference.preferred) MfaType.totp,
810+
if (email == MfaPreference.preferred) MfaType.email,
811+
];
812+
813+
if (newPreferredMethods.length > 1) {
814+
throw const InvalidParameterException(
815+
'Cannot assign multiple MFA methods as preferred',
816+
);
823817
}
824-
final currentlyEnabled = currentEnabled.contains(mfaType);
825-
final requestingEnabled = switch (mfaType) {
826-
MfaType.sms => enabledValues.contains(sms),
827-
MfaType.totp => enabledValues.contains(totp),
828-
MfaType.email => enabledValues.contains(email),
829-
};
830-
return currentlyEnabled || requestingEnabled;
831-
}
832818

833-
// Count the number of MFA methods set to preferred
834-
final preferredMethods = [
835-
if (sms == MfaPreference.preferred) MfaType.sms,
836-
if (totp == MfaPreference.preferred) MfaType.totp,
837-
if (email == MfaPreference.preferred) MfaType.email,
838-
];
819+
var preferred = newPreferredMethods.isNotEmpty
820+
? newPreferredMethods.first
821+
: currentPreference;
839822

840-
if (preferredMethods.length > 1) {
841-
throw const InvalidParameterException(
842-
'Cannot assign multiple MFA methods as preferred',
843-
);
844-
}
845-
846-
MfaType? preferred;
847-
if (preferredMethods.isNotEmpty) {
848-
preferred = preferredMethods.first;
849-
} else {
850-
// Check if the current preference needs to be removed
851823
final isCurrentPreferenceDisabled = switch (currentPreference) {
852-
MfaType.sms => sms == MfaPreference.disabled || sms == MfaPreference.notPreferred,
853-
MfaType.totp => totp == MfaPreference.disabled || totp == MfaPreference.notPreferred,
854-
MfaType.email => email == MfaPreference.disabled || email == MfaPreference.notPreferred,
824+
MfaType.sms =>
825+
sms == MfaPreference.disabled || sms == MfaPreference.notPreferred,
826+
MfaType.totp =>
827+
totp == MfaPreference.disabled || totp == MfaPreference.notPreferred,
828+
MfaType.email =>
829+
email == MfaPreference.disabled || email == MfaPreference.notPreferred,
855830
_ => false,
856831
};
857-
preferred = isCurrentPreferenceDisabled ? null : currentPreference;
858-
}
832+
preferred = isCurrentPreferenceDisabled ? null : preferred;
833+
834+
const enabledValues = [
835+
MfaPreference.enabled,
836+
MfaPreference.notPreferred,
837+
MfaPreference.preferred,
838+
];
839+
840+
bool isMfaEnabled(MfaType mfaType, MfaPreference? preference) {
841+
if (preference == MfaPreference.disabled) return false;
842+
return currentEnabled.contains(mfaType) ||
843+
enabledValues.contains(preference);
844+
}
859845

860-
final smsMfaSettings = SmsMfaSettingsType(
861-
enabled: isEnabled(MfaType.sms),
862-
preferredMfa: preferred == MfaType.sms,
863-
);
864-
final softwareTokenSettings = SoftwareTokenMfaSettingsType(
865-
enabled: isEnabled(MfaType.totp),
866-
preferredMfa: preferred == MfaType.totp,
867-
);
868-
final emailMfaSettings = EmailMfaSettingsType(
869-
enabled: isEnabled(MfaType.email),
870-
preferredMfa: preferred == MfaType.email,
871-
);
872-
873-
await setUserMfaPreference(
874-
SetUserMfaPreferenceRequest(
875-
accessToken: accessToken,
876-
smsMfaSettings: smsMfaSettings,
877-
softwareTokenMfaSettings: softwareTokenSettings,
878-
emailMfaSettings: emailMfaSettings,
879-
),
880-
).result;
881-
}
846+
final smsMfaSettings = SmsMfaSettingsType(
847+
enabled: isMfaEnabled(MfaType.sms, sms),
848+
preferredMfa: preferred == MfaType.sms,
849+
);
850+
final softwareTokenSettings = SoftwareTokenMfaSettingsType(
851+
enabled: isMfaEnabled(MfaType.totp, totp),
852+
preferredMfa: preferred == MfaType.totp,
853+
);
854+
final emailMfaSettings = EmailMfaSettingsType(
855+
enabled: isMfaEnabled(MfaType.email, email),
856+
preferredMfa: preferred == MfaType.email,
857+
);
882858

859+
await setUserMfaPreference(
860+
SetUserMfaPreferenceRequest(
861+
accessToken: accessToken,
862+
smsMfaSettings: smsMfaSettings,
863+
softwareTokenMfaSettings: softwareTokenSettings,
864+
emailMfaSettings: emailMfaSettings,
865+
),
866+
).result;
867+
}
883868
}
884869

885870
extension on String {

0 commit comments

Comments
 (0)