[HOT-FIX] Webfinger is recalled many times
(cherry picked from commit 1873e0f199c29965543a7504f30308e0024c725c)
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user