From 89774972f8dbce2795bf99011838ca2090447a79 Mon Sep 17 00:00:00 2001 From: Neeraj Gupta <254676+ua741@users.noreply.github.com> Date: Wed, 2 Aug 2023 13:16:48 +0530 Subject: [PATCH] Handle emailMFA flag during login --- lib/models/api/user/srp.dart | 3 +++ lib/ui/account/login_page.dart | 20 +++++++++++++------- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/lib/models/api/user/srp.dart b/lib/models/api/user/srp.dart index 0bea9dbfb..30a72dfd5 100644 --- a/lib/models/api/user/srp.dart +++ b/lib/models/api/user/srp.dart @@ -87,6 +87,7 @@ class SrpAttributes { final int memLimit; final int opsLimit; final String kekSalt; + final bool emailMFA; SrpAttributes({ required this.srpUserID, @@ -94,6 +95,7 @@ class SrpAttributes { required this.memLimit, required this.opsLimit, required this.kekSalt, + required this.emailMFA, }); factory SrpAttributes.fromMap(Map map) { @@ -103,6 +105,7 @@ class SrpAttributes { memLimit: map['attributes']['memLimit'], opsLimit: map['attributes']['opsLimit'], kekSalt: map['attributes']['kekSalt'], + emailMFA: map['attributes']['emailMFA'], ); } } diff --git a/lib/ui/account/login_page.dart b/lib/ui/account/login_page.dart index 3a5f37634..204082c16 100644 --- a/lib/ui/account/login_page.dart +++ b/lib/ui/account/login_page.dart @@ -2,6 +2,7 @@ import 'package:email_validator/email_validator.dart'; import 'package:ente_auth/core/configuration.dart'; import 'package:ente_auth/core/errors.dart'; import "package:ente_auth/l10n/l10n.dart"; +import 'package:ente_auth/models/api/user/srp.dart'; import 'package:ente_auth/services/user_service.dart'; import 'package:ente_auth/ui/account/login_pwd_verification_page.dart'; import 'package:ente_auth/ui/common/dynamic_fab.dart'; @@ -61,22 +62,27 @@ class _LoginPageState extends State { buttonText: context.l10n.logInLabel, onPressedFunction: () async { UserService.instance.setEmail(_email!); + SrpAttributes? attr; + bool isEmailVerificationEnabled = true; try { - final attr = await UserService.instance.getSrpAttributes(_email!); + attr = await UserService.instance.getSrpAttributes(_email!); + isEmailVerificationEnabled = attr.emailMFA; + } catch (e) { + if (e is! SrpSetupNotCompleteError) { + _logger.severe('Error getting SRP attributes', e); + } + } + if (attr != null && !isEmailVerificationEnabled) { Navigator.of(context).push( MaterialPageRoute( builder: (BuildContext context) { return LoginPasswordVerificationPage( - srpAttributes: attr, + srpAttributes: attr!, ); }, ), ); - } - catch (e) { - if(e is! SrpSetupNotCompleteError) { - _logger.warning('Error getting SRP attributes', e); - } + } else { await UserService.instance .sendOtt(context, _email!, isCreateAccountScreen: false); }