[HOT-FIX] Webfinger is recalled many times

(cherry picked from commit 1873e0f199c29965543a7504f30308e0024c725c)
This commit is contained in:
dab246
2023-06-29 16:45:29 +07:00
committed by Dat Vu
parent 7c1f8cc2c7
commit bc8a03cbce
5 changed files with 75 additions and 69 deletions
+10 -6
View File
@@ -143,16 +143,20 @@ abstract class BaseController extends GetxController
currentOverlayContext!,
AppLocalizations.of(currentContext!).badCredentials);
}
performInvokeLogoutAction();
if (authorizationInterceptors.isAppRunning) {
performInvokeLogoutAction();
}
return error;
} else if (error is ConnectionError) {
logError('BaseController::_performFilterExceptionInError(): ConnectionError');
if (currentOverlayContext != null && currentContext != null) {
_appToast.showToastErrorMessage(
currentOverlayContext!,
AppLocalizations.of(currentContext!).connectionError);
if (authorizationInterceptors.isAppRunning) {
if (currentOverlayContext != null && currentContext != null) {
_appToast.showToastErrorMessage(
currentOverlayContext!,
AppLocalizations.of(currentContext!).connectionError);
}
performInvokeLogoutAction();
}
performInvokeLogoutAction();
return error;
}
@@ -143,6 +143,17 @@ class AuthorizationInterceptors extends InterceptorsWrapper {
String _getTokenAsBearerHeader(String token) => 'Bearer $token';
bool get isAppRunning {
switch(_authenticationType) {
case AuthenticationType.basic:
return _authorization != null;
case AuthenticationType.oidc:
return _configOIDC != null && _token != null;
case AuthenticationType.none:
return false;
}
}
void clear() {
_authorization = null;
_token = null;
@@ -47,7 +47,6 @@ import 'package:tmail_ui_user/features/login/domain/usecases/save_login_url_on_m
import 'package:tmail_ui_user/features/login/domain/usecases/save_login_username_on_mobile_interactor.dart';
import 'package:tmail_ui_user/features/login/domain/usecases/update_authentication_account_interactor.dart';
import 'package:tmail_ui_user/features/login/presentation/login_controller.dart';
import 'package:tmail_ui_user/features/manage_account/domain/usecases/log_out_oidc_interactor.dart';
import 'package:tmail_ui_user/main/exceptions/cache_exception_thrower.dart';
import 'package:tmail_ui_user/main/exceptions/remote_exception_thrower.dart';
@@ -56,23 +55,20 @@ class LoginBindings extends BaseBindings {
@override
void bindingsController() {
Get.lazyPut(() => LoginController(
Get.find<LogoutOidcInteractor>(),
Get.find<DeleteAuthorityOidcInteractor>(),
Get.find<GetAuthenticatedAccountInteractor>(),
Get.find<UpdateAuthenticationAccountInteractor>(),
Get.find<AuthenticationInteractor>(),
Get.find<DynamicUrlInterceptors>(),
Get.find<CheckOIDCIsAvailableInteractor>(),
Get.find<GetOIDCIsAvailableInteractor>(),
Get.find<GetOIDCConfigurationInteractor>(),
Get.find<GetTokenOIDCInteractor>(),
Get.find<AuthenticateOidcOnBrowserInteractor>(),
Get.find<GetAuthenticationInfoInteractor>(),
Get.find<GetStoredOidcConfigurationInteractor>(),
Get.find<SaveLoginUrlOnMobileInteractor>(),
Get.find<GetAllRecentLoginUrlOnMobileInteractor>(),
Get.find<SaveLoginUsernameOnMobileInteractor>(),
Get.find<GetAllRecentLoginUsernameOnMobileInteractor>(),
Get.find<AuthenticationInteractor>(),
Get.find<DynamicUrlInterceptors>(),
Get.find<CheckOIDCIsAvailableInteractor>(),
Get.find<GetOIDCIsAvailableInteractor>(),
Get.find<GetOIDCConfigurationInteractor>(),
Get.find<GetTokenOIDCInteractor>(),
Get.find<AuthenticateOidcOnBrowserInteractor>(),
Get.find<GetAuthenticationInfoInteractor>(),
Get.find<GetStoredOidcConfigurationInteractor>(),
Get.find<SaveLoginUrlOnMobileInteractor>(),
Get.find<GetAllRecentLoginUrlOnMobileInteractor>(),
Get.find<SaveLoginUsernameOnMobileInteractor>(),
Get.find<GetAllRecentLoginUsernameOnMobileInteractor>(),
Get.find<GetAuthenticatedAccountInteractor>(),
));
}
@@ -8,14 +8,13 @@ import 'package:dartz/dartz.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/services.dart';
import 'package:get/get.dart';
import 'package:jmap_dart_client/jmap/core/session/session.dart';
import 'package:jmap_dart_client/jmap/core/user_name.dart';
import 'package:model/account/password.dart';
import 'package:model/oidc/oidc_configuration.dart';
import 'package:model/oidc/request/oidc_request.dart';
import 'package:model/oidc/response/oidc_response.dart';
import 'package:model/oidc/token_oidc.dart';
import 'package:tmail_ui_user/features/base/reloadable/reloadable_controller.dart';
import 'package:tmail_ui_user/features/base/base_controller.dart';
import 'package:tmail_ui_user/features/login/data/network/oidc_error.dart';
import 'package:tmail_ui_user/features/login/domain/exceptions/authentication_exception.dart';
import 'package:tmail_ui_user/features/login/domain/model/login_constants.dart';
@@ -26,6 +25,7 @@ import 'package:tmail_ui_user/features/login/domain/state/authentication_user_st
import 'package:tmail_ui_user/features/login/domain/state/check_oidc_is_available_state.dart';
import 'package:tmail_ui_user/features/login/domain/state/get_all_recent_login_url_latest_state.dart';
import 'package:tmail_ui_user/features/login/domain/state/get_all_recent_login_username_state.dart';
import 'package:tmail_ui_user/features/login/domain/state/get_authenticated_account_state.dart';
import 'package:tmail_ui_user/features/login/domain/state/get_authentication_info_state.dart';
import 'package:tmail_ui_user/features/login/domain/state/get_oidc_configuration_state.dart';
import 'package:tmail_ui_user/features/login/domain/state/get_oidc_is_available_state.dart';
@@ -34,7 +34,6 @@ import 'package:tmail_ui_user/features/login/domain/state/get_token_oidc_state.d
import 'package:tmail_ui_user/features/login/domain/usecases/authenticate_oidc_on_browser_interactor.dart';
import 'package:tmail_ui_user/features/login/domain/usecases/authentication_user_interactor.dart';
import 'package:tmail_ui_user/features/login/domain/usecases/check_oidc_is_available_interactor.dart';
import 'package:tmail_ui_user/features/login/domain/usecases/delete_authority_oidc_interactor.dart';
import 'package:tmail_ui_user/features/login/domain/usecases/get_all_recent_login_url_on_mobile_interactor.dart';
import 'package:tmail_ui_user/features/login/domain/usecases/get_all_recent_login_username_on_mobile_interactor.dart';
import 'package:tmail_ui_user/features/login/domain/usecases/get_authenticated_account_interactor.dart';
@@ -45,18 +44,14 @@ import 'package:tmail_ui_user/features/login/domain/usecases/get_stored_oidc_con
import 'package:tmail_ui_user/features/login/domain/usecases/get_token_oidc_interactor.dart';
import 'package:tmail_ui_user/features/login/domain/usecases/save_login_url_on_mobile_interactor.dart';
import 'package:tmail_ui_user/features/login/domain/usecases/save_login_username_on_mobile_interactor.dart';
import 'package:tmail_ui_user/features/login/domain/usecases/update_authentication_account_interactor.dart';
import 'package:tmail_ui_user/features/login/presentation/login_form_type.dart';
import 'package:tmail_ui_user/features/login/presentation/model/login_arguments.dart';
import 'package:tmail_ui_user/features/manage_account/domain/usecases/log_out_oidc_interactor.dart';
import 'package:tmail_ui_user/main/routes/app_routes.dart';
import 'package:tmail_ui_user/main/routes/navigation_router.dart';
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
import 'package:tmail_ui_user/main/routes/route_utils.dart';
import 'package:tmail_ui_user/main/utils/app_config.dart';
import 'package:universal_html/html.dart' as html;
class LoginController extends ReloadableController {
class LoginController extends BaseController {
final AuthenticationInteractor _authenticationInteractor;
final DynamicUrlInterceptors _dynamicUrlInterceptors;
@@ -71,15 +66,12 @@ class LoginController extends ReloadableController {
final GetAllRecentLoginUrlOnMobileInteractor _getAllRecentLoginUrlOnMobileInteractor;
final SaveLoginUsernameOnMobileInteractor _saveLoginUsernameOnMobileInteractor;
final GetAllRecentLoginUsernameOnMobileInteractor _getAllRecentLoginUsernameOnMobileInteractor;
final GetAuthenticatedAccountInteractor _getAuthenticatedAccountInteractor;
final TextEditingController urlInputController = TextEditingController();
final TextEditingController usernameInputController = TextEditingController();
LoginController(
LogoutOidcInteractor logoutOidcInteractor,
DeleteAuthorityOidcInteractor deleteAuthorityOidcInteractor,
GetAuthenticatedAccountInteractor getAuthenticatedAccountInteractor,
UpdateAuthenticationAccountInteractor updateAuthenticationAccountInteractor,
this._authenticationInteractor,
this._dynamicUrlInterceptors,
this._checkOIDCIsAvailableInteractor,
@@ -93,9 +85,7 @@ class LoginController extends ReloadableController {
this._getAllRecentLoginUrlOnMobileInteractor,
this._saveLoginUsernameOnMobileInteractor,
this._getAllRecentLoginUsernameOnMobileInteractor,
) : super(
getAuthenticatedAccountInteractor,
updateAuthenticationAccountInteractor
this._getAuthenticatedAccountInteractor,
);
final loginFormType = LoginFormType.baseUrlForm.obs;
@@ -141,10 +131,12 @@ class LoginController extends ReloadableController {
void handleFailureViewState(Failure failure) {
super.handleFailureViewState(failure);
if (failure is GetAuthenticationInfoFailure) {
getAuthenticatedAccountAction();
_getAuthenticatedAccountAction();
} else if (failure is CheckOIDCIsAvailableFailure ||
failure is GetStoredOidcConfigurationFailure ||
failure is GetOIDCIsAvailableFailure) {
failure is GetOIDCIsAvailableFailure ||
failure is GetAuthenticatedAccountFailure ||
failure is NoAuthenticatedAccountFailure) {
_showFormLoginWithCredentialAction();
}
}
@@ -173,14 +165,11 @@ class LoginController extends ReloadableController {
@override
void handleExceptionAction({Failure? failure, Exception? exception}) {
super.handleExceptionAction(failure: failure, exception: exception);
clearState();
}
@override
void handleReloaded(Session session) {
pushAndPop(
RouteUtils.generateNavigationRoute(AppRoutes.dashboard, NavigationRouter()),
arguments: session);
if (failure is CheckOIDCIsAvailableFailure || failure is GetOIDCIsAvailableFailure) {
_showFormLoginWithCredentialAction();
} else {
clearState();
}
}
void _getAuthenticationInfo() {
@@ -191,6 +180,10 @@ class LoginController extends ReloadableController {
consumeState(_getStoredOidcConfigurationInteractor.execute());
}
void _getAuthenticatedAccountAction() {
consumeState(_getAuthenticatedAccountInteractor.execute());
}
void handleNextInUrlInputFormPress() {
_saveRecentLoginUrl();
_checkOIDCIsAvailable();
@@ -23,31 +23,33 @@ class RemoteExceptionThrower extends ExceptionThrower {
} else {
if (error is DioError) {
logError('RemoteExceptionThrower::throwException():type: ${error.type} | response: ${error.response} | error: ${error.error}');
switch (error.type) {
case DioErrorType.connectionTimeout:
throw ConnectionTimeout(message: error.message);
case DioErrorType.connectionError:
throw ConnectionError(message: error.message);
default:
if (error.response?.statusCode == HttpStatus.internalServerError) {
throw const InternalServerError();
} else if (error.response?.statusCode == HttpStatus.badGateway) {
throw BadGateway();
} else if (error.response?.statusCode == HttpStatus.unauthorized) {
throw const BadCredentialsException();
} else if (error.error is SocketException) {
throw const SocketError();
} else {
if (error.response != null) {
throw UnknownError(
code: error.response!.statusCode,
message: error.response!.statusMessage);
if (error.response != null) {
if (error.response!.statusCode == HttpStatus.internalServerError) {
throw const InternalServerError();
} else if (error.response!.statusCode == HttpStatus.badGateway) {
throw BadGateway();
} else if (error.response!.statusCode == HttpStatus.unauthorized) {
throw const BadCredentialsException();
} else {
throw UnknownError(
code: error.response!.statusCode,
message: error.response!.statusMessage);
}
} else {
switch (error.type) {
case DioErrorType.connectionTimeout:
throw ConnectionTimeout(message: error.message);
case DioErrorType.connectionError:
throw ConnectionError(message: error.message);
default:
if (error.error is SocketException) {
throw const SocketError();
} else if (error.error != null) {
throw UnknownError(message: error.error!.toString());
} else {
throw const UnknownError();
}
}
}
}
} else if (error is ErrorMethodResponseException) {
final errorResponse = error.errorResponse as ErrorMethodResponse;