From 0e5569cc43a3817a9bc8aab131c24ebaf682f407 Mon Sep 17 00:00:00 2001 From: Vinzent Date: Wed, 11 Sep 2024 00:10:21 +0200 Subject: [PATCH 1/4] fix: support all mfa auth methods --- packages/gotrue/lib/src/types/mfa.dart | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/packages/gotrue/lib/src/types/mfa.dart b/packages/gotrue/lib/src/types/mfa.dart index cfdd2f05..7b7d49c7 100644 --- a/packages/gotrue/lib/src/types/mfa.dart +++ b/packages/gotrue/lib/src/types/mfa.dart @@ -257,7 +257,24 @@ class AuthMFAGetAuthenticatorAssuranceLevelResponse { }); } -enum AMRMethod { password, otp, oauth, totp, magiclink } +enum AMRMethod { + password('password'), + otp('otp'), + oauth('oauth'), + totp('totp'), + magiclink('magiclink'), + recovery('recovery'), + invite('invite'), + ssoSaml('sso/saml'), + emailSignUp('email/signup'), + emailChange('email_change'), + tokenRefresh('token_refresh'), + anonymous('anonymous'), + mfaPhone('mfa/phone'); + + final String code; + const AMRMethod(this.code); +} /// An authentication method reference (AMR) entry. /// @@ -278,7 +295,7 @@ class AMREntry { factory AMREntry.fromJson(Map json) { return AMREntry( method: AMRMethod.values.firstWhere( - (e) => e.name == json['method'], + (e) => e.code == json['method'], ), timestamp: DateTime.fromMillisecondsSinceEpoch(json['timestamp'] * 1000), ); From 15c3f53927bf9f8ffa81c68ace3094a540a82424 Mon Sep 17 00:00:00 2001 From: Vinzent Date: Sun, 15 Sep 2024 21:18:50 +0200 Subject: [PATCH 2/4] fix: add unknown mfa type --- packages/gotrue/lib/src/types/mfa.dart | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/packages/gotrue/lib/src/types/mfa.dart b/packages/gotrue/lib/src/types/mfa.dart index 7b7d49c7..5cbbd82e 100644 --- a/packages/gotrue/lib/src/types/mfa.dart +++ b/packages/gotrue/lib/src/types/mfa.dart @@ -1,3 +1,4 @@ +import 'package:collection/collection.dart'; import 'package:gotrue/gotrue.dart'; class AuthMFAEnrollResponse { @@ -270,7 +271,8 @@ enum AMRMethod { emailChange('email_change'), tokenRefresh('token_refresh'), anonymous('anonymous'), - mfaPhone('mfa/phone'); + mfaPhone('mfa/phone'), + unknown('unknown'); final String code; const AMRMethod(this.code); @@ -294,9 +296,10 @@ class AMREntry { factory AMREntry.fromJson(Map json) { return AMREntry( - method: AMRMethod.values.firstWhere( - (e) => e.code == json['method'], - ), + method: AMRMethod.values.firstWhereOrNull( + (e) => e.code == json['method'], + ) ?? + AMRMethod.unknown, timestamp: DateTime.fromMillisecondsSinceEpoch(json['timestamp'] * 1000), ); } From 8179e139e0ad528b8aeb25d7f802c82ac8fabfcf Mon Sep 17 00:00:00 2001 From: Vinzent Date: Mon, 16 Sep 2024 14:28:09 +0200 Subject: [PATCH 3/4] style: use orElse instead of firstWhereOrNull --- packages/gotrue/lib/src/types/mfa.dart | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/gotrue/lib/src/types/mfa.dart b/packages/gotrue/lib/src/types/mfa.dart index 5cbbd82e..06bf1909 100644 --- a/packages/gotrue/lib/src/types/mfa.dart +++ b/packages/gotrue/lib/src/types/mfa.dart @@ -296,10 +296,10 @@ class AMREntry { factory AMREntry.fromJson(Map json) { return AMREntry( - method: AMRMethod.values.firstWhereOrNull( - (e) => e.code == json['method'], - ) ?? - AMRMethod.unknown, + method: AMRMethod.values.firstWhere( + (e) => e.code == json['method'], + orElse: () => AMRMethod.unknown, + ), timestamp: DateTime.fromMillisecondsSinceEpoch(json['timestamp'] * 1000), ); } From cd5f27eb9098586defa3d250b3b744e8ad1b26da Mon Sep 17 00:00:00 2001 From: Vinzent Date: Mon, 16 Sep 2024 14:36:02 +0200 Subject: [PATCH 4/4] style: remove import --- packages/gotrue/lib/src/types/mfa.dart | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/gotrue/lib/src/types/mfa.dart b/packages/gotrue/lib/src/types/mfa.dart index 06bf1909..148f3b1f 100644 --- a/packages/gotrue/lib/src/types/mfa.dart +++ b/packages/gotrue/lib/src/types/mfa.dart @@ -1,4 +1,3 @@ -import 'package:collection/collection.dart'; import 'package:gotrue/gotrue.dart'; class AuthMFAEnrollResponse {