TF-2810 Handle crashed when no browser available for OIDC

This commit is contained in:
Dat PHAM HOANG
2024-04-19 16:33:45 +07:00
committed by Dat H. Pham
parent 5a22ea0509
commit d2fdbfab0f
9 changed files with 286 additions and 19 deletions
@@ -1,4 +1,21 @@
import 'package:flutter/services.dart';
class NotFoundDataResourceRecordException implements Exception {}
class NotFoundUrlException implements Exception {}
class NotFoundUrlException implements Exception {}
class NoSuitableBrowserForOIDCException implements Exception {
static const noBrowserAvailableCode = 'no_browser_available';
static bool verifyException(dynamic exception) {
if (exception is PlatformException) {
if (exception.code == noBrowserAvailableCode) {
return true;
}
}
return false;
}
}
@@ -3,10 +3,12 @@ import 'package:core/presentation/state/failure.dart';
import 'package:core/presentation/state/success.dart';
import 'package:core/utils/app_logger.dart';
import 'package:dartz/dartz.dart';
import 'package:flutter/services.dart';
import 'package:model/account/authentication_type.dart';
import 'package:model/account/personal_account.dart';
import 'package:model/oidc/oidc_configuration.dart';
import 'package:model/oidc/token_oidc.dart';
import 'package:tmail_ui_user/features/login/domain/exceptions/login_exception.dart';
import 'package:tmail_ui_user/features/login/domain/extensions/oidc_configuration_extensions.dart';
import 'package:tmail_ui_user/features/login/domain/repository/account_repository.dart';
import 'package:tmail_ui_user/features/login/domain/repository/authentication_oidc_repository.dart';
@@ -44,6 +46,13 @@ class GetTokenOIDCInteractor {
)
);
yield Right<Failure, Success>(GetTokenOIDCSuccess(tokenOIDC, config));
} on PlatformException catch (e) {
logError('GetTokenOIDCInteractor::execute(): PlatformException ${e.message} - ${e.stacktrace}');
if (NoSuitableBrowserForOIDCException.verifyException(e)) {
yield Left<Failure, Success>(GetTokenOIDCFailure(NoSuitableBrowserForOIDCException()));
} else {
yield Left<Failure, Success>(GetTokenOIDCFailure(e));
}
} catch (e) {
logError('GetTokenOIDCInteractor::execute(): $e');
yield Left<Failure, Success>(GetTokenOIDCFailure(e));