validateMFACode method

Future<void> validateMFACode(
  1. String code
)

Validates the given multi-factor authentication code

Implementation

Future<void> validateMFACode(
  String code,
) async {
  emit(state.startLoading(validateMFALoading));

  try {
    final authType = await provider.validateMFACode(code);

    final isLoggedIn = authType == AuthType.authDone;
    emit(state.copyWith(
      session: isLoggedIn ? state.session.touch() : null,
      isLoggedIn: isLoggedIn,
      resetAwaitingLogin: isLoggedIn,
      // ignored if resetAwaitingLogin is true
      awaitingLogin: authType,
    ));
  } on InvalidCodeException catch (error, stackTrace) {
    emit(state.addMessage(
      Message.error(_localizations.invalidMFACode),
      error,
      stackTrace,
    ));
  } on ExpiredCodeException catch (error, stackTrace) {
    emit(state.addMessage(
      Message.error(_localizations.expiredVerificationCode),
      error,
      stackTrace,
    ));
  } on MFACodeValidationException catch (error, stackTrace) {
    emit(state.addMessage(
      Message.error(
        _localizations.mfaCodeValidationError(error.message),
      ),
      error,
      stackTrace,
    ));
  } finally {
    emit(state.endLoading(validateMFALoading));
  }
}