@@ -794,92 +794,77 @@ extension MfaSettings on CognitoIdentityProviderClient {
794
794
795
795
/// Sets the MFA settings for the user.
796
796
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
+ );
823
817
}
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
- }
832
818
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;
839
822
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
851
823
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,
855
830
_ => false ,
856
831
};
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
+ }
859
845
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
+ );
882
858
859
+ await setUserMfaPreference (
860
+ SetUserMfaPreferenceRequest (
861
+ accessToken: accessToken,
862
+ smsMfaSettings: smsMfaSettings,
863
+ softwareTokenMfaSettings: softwareTokenSettings,
864
+ emailMfaSettings: emailMfaSettings,
865
+ ),
866
+ ).result;
867
+ }
883
868
}
884
869
885
870
extension on String {
0 commit comments