TF-2311 Remove session page view

(cherry picked from commit 557d67b816c91076d8cafc9aa680e62d5b012f5b)
This commit is contained in:
dab246
2023-11-14 17:29:22 +07:00
committed by Dat Vu
parent 00bfadbfe7
commit 4ff601b4fc
42 changed files with 220 additions and 470 deletions
@@ -1,14 +1,13 @@
import 'package:core/presentation/extensions/color_extension.dart';
import 'package:core/presentation/resources/image_paths.dart';
import 'package:core/presentation/state/failure.dart';
import 'package:core/presentation/state/success.dart';
import 'package:core/presentation/utils/responsive_utils.dart';
import 'package:core/presentation/views/text/type_ahead_form_field_builder.dart';
import 'package:dartz/dartz.dart';
import 'package:flutter/material.dart';
import 'package:flutter_typeahead/flutter_typeahead.dart';
import 'package:get/get.dart';
import 'package:tmail_ui_user/features/base/widget/recent_item_tile_widget.dart';
import 'package:tmail_ui_user/features/home/domain/state/get_session_state.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/recent_login_username.dart';
@@ -25,16 +24,13 @@ import 'package:tmail_ui_user/features/login/presentation/widgets/login_text_inp
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
abstract class BaseLoginView extends GetWidget<LoginController> {
BaseLoginView({Key? key}) : super(key: key);
final responsiveUtils = Get.find<ResponsiveUtils>();
final imagePaths = Get.find<ImagePaths>();
const BaseLoginView({Key? key}) : super(key: key);
Widget buildLoginMessage(BuildContext context, Either<Failure, Success> viewState) {
return Padding(
padding: const EdgeInsets.only(top: 11, bottom: 36, left: 58, right: 58),
child: SizedBox(
width: responsiveUtils.getWidthLoginTextField(context),
width: controller.responsiveUtils.getWidthLoginTextField(context),
child: Text(
viewState.fold(
(failure) {
@@ -50,6 +46,12 @@ abstract class BaseLoginView extends GetWidget<LoginController> {
return _getMessageFailure(context, failure.exception);
} else if (failure is GetOIDCConfigurationFailure) {
return AppLocalizations.of(context).canNotVerifySSOConfiguration;
} else if (failure is GetSessionFailure) {
return controller.getErrorMessageFromSessionFailure(
context: context,
sessionRemoteException: failure.remoteException,
sessionCacheException: failure.exception
);
} else {
return AppLocalizations.of(context).unknownError;
}
@@ -93,7 +95,7 @@ abstract class BaseLoginView extends GetWidget<LoginController> {
Widget buildLoginButton(BuildContext context) {
return Container(
margin: const EdgeInsets.only(bottom: 16, left: 24, right: 24),
width: responsiveUtils.getDeviceWidth(context),height: 48,
width: controller.responsiveUtils.getDeviceWidth(context),height: 48,
child: ElevatedButton(
key: const Key('loginSubmitForm'),
style: ButtonStyle(
@@ -144,7 +146,7 @@ abstract class BaseLoginView extends GetWidget<LoginController> {
.build(),
debounceDuration: const Duration(milliseconds: 300),
suggestionsCallback: controller.getAllRecentLoginUsernameAction,
itemBuilder: (context, loginUsername) => RecentItemTileWidget(loginUsername, imagePath: imagePaths),
itemBuilder: (context, loginUsername) => RecentItemTileWidget(loginUsername, imagePath: controller.imagePaths),
onSuggestionSelected: (recentUsername) {
controller.setUsername(recentUsername.username);
controller.passFocusNode.requestFocus();
@@ -1,4 +1,3 @@
import 'package:core/core.dart';
import 'package:get/get.dart';
import 'package:tmail_ui_user/features/base/base_bindings.dart';
import 'package:tmail_ui_user/features/caching/clients/recent_login_url_cache_client.dart';
@@ -19,7 +18,6 @@ import 'package:tmail_ui_user/features/login/domain/usecases/authentication_user
import 'package:tmail_ui_user/features/login/domain/usecases/check_oidc_is_available_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';
import 'package:tmail_ui_user/features/login/domain/usecases/get_authentication_info_interactor.dart';
import 'package:tmail_ui_user/features/login/domain/usecases/get_oidc_configuration_interactor.dart';
import 'package:tmail_ui_user/features/login/domain/usecases/get_oidc_is_available_interactor.dart';
@@ -27,7 +25,6 @@ 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_controller.dart';
import 'package:tmail_ui_user/main/exceptions/cache_exception_thrower.dart';
@@ -36,10 +33,7 @@ class LoginBindings extends BaseBindings {
@override
void bindingsController() {
Get.create(() => LoginController(
Get.find<GetAuthenticatedAccountInteractor>(),
Get.find<UpdateAuthenticationAccountInteractor>(),
Get.find<AuthenticationInteractor>(),
Get.find<DynamicUrlInterceptors>(),
Get.find<CheckOIDCIsAvailableInteractor>(),
Get.find<GetOIDCIsAvailableInteractor>(),
Get.find<GetOIDCConfigurationInteractor>(),
@@ -106,7 +100,6 @@ class LoginBindings extends BaseBindings {
Get.lazyPut(() => GetAllRecentLoginUsernameOnMobileInteractor(
Get.find<LoginUsernameRepository>()
));
Get.lazyPut(() => UpdateAuthenticationAccountInteractor(Get.find<AccountRepository>()));
}
@override
@@ -1,4 +1,3 @@
import 'package:core/data/network/config/dynamic_url_interceptors.dart';
import 'package:core/presentation/extensions/url_extension.dart';
import 'package:core/presentation/state/failure.dart';
import 'package:core/presentation/state/success.dart';
@@ -16,6 +15,7 @@ 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/home/domain/state/get_session_state.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';
@@ -37,7 +37,6 @@ import 'package:tmail_ui_user/features/login/domain/usecases/authentication_user
import 'package:tmail_ui_user/features/login/domain/usecases/check_oidc_is_available_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';
import 'package:tmail_ui_user/features/login/domain/usecases/get_authentication_info_interactor.dart';
import 'package:tmail_ui_user/features/login/domain/usecases/get_oidc_configuration_interactor.dart';
import 'package:tmail_ui_user/features/login/domain/usecases/get_oidc_is_available_interactor.dart';
@@ -45,7 +44,6 @@ 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/main/routes/app_routes.dart';
@@ -58,7 +56,6 @@ import 'package:universal_html/html.dart' as html;
class LoginController extends ReloadableController {
final AuthenticationInteractor _authenticationInteractor;
final DynamicUrlInterceptors _dynamicUrlInterceptors;
final CheckOIDCIsAvailableInteractor _checkOIDCIsAvailableInteractor;
final GetOIDCIsAvailableInteractor _getOIDCIsAvailableInteractor;
final GetOIDCConfigurationInteractor _getOIDCConfigurationInteractor;
@@ -77,10 +74,7 @@ class LoginController extends ReloadableController {
final FocusNode passFocusNode = FocusNode();
LoginController(
GetAuthenticatedAccountInteractor getAuthenticatedAccountInteractor,
UpdateAuthenticationAccountInteractor updateAuthenticationAccountInteractor,
this._authenticationInteractor,
this._dynamicUrlInterceptors,
this._checkOIDCIsAvailableInteractor,
this._getOIDCIsAvailableInteractor,
this._getOIDCConfigurationInteractor,
@@ -92,9 +86,6 @@ class LoginController extends ReloadableController {
this._getAllRecentLoginUrlOnMobileInteractor,
this._saveLoginUsernameOnMobileInteractor,
this._getAllRecentLoginUsernameOnMobileInteractor,
) : super(
getAuthenticatedAccountInteractor,
updateAuthenticationAccountInteractor
);
final loginFormType = LoginFormType.baseUrlForm.obs;
@@ -138,21 +129,24 @@ class LoginController extends ReloadableController {
@override
void handleFailureViewState(Failure failure) {
super.handleFailureViewState(failure);
if (failure is GetAuthenticationInfoFailure) {
getAuthenticatedAccountAction();
} else if (failure is CheckOIDCIsAvailableFailure ||
failure is GetStoredOidcConfigurationFailure ||
failure is GetOIDCIsAvailableFailure) {
failure is GetOIDCIsAvailableFailure ||
failure is GetTokenOIDCFailure) {
_showFormLoginWithCredentialAction();
} else if (failure is GetAuthenticatedAccountFailure) {
_checkOIDCIsAvailable();
} else if (failure is GetSessionFailure) {
clearAllData();
} else {
super.handleFailureViewState(failure);
}
}
@override
void handleSuccessViewState(Success success) {
super.handleSuccessViewState(success);
if (success is GetAuthenticationInfoSuccess) {
_getStoredOidcConfiguration();
} else if (success is GetStoredOidcConfigurationSuccess) {
@@ -168,13 +162,18 @@ class LoginController extends ReloadableController {
_getTokenOIDCSuccess(success);
} else if (success is AuthenticationUserSuccess) {
_loginSuccessAction(success);
} else {
super.handleSuccessViewState(success);
}
}
@override
void handleExceptionAction({Failure? failure, Exception? exception}) {
super.handleExceptionAction(failure: failure, exception: exception);
if (failure is CheckOIDCIsAvailableFailure || failure is GetOIDCIsAvailableFailure) {
if (failure is CheckOIDCIsAvailableFailure ||
failure is GetStoredOidcConfigurationFailure ||
failure is GetOIDCIsAvailableFailure ||
failure is GetTokenOIDCFailure) {
_showFormLoginWithCredentialAction();
} else {
clearState();
@@ -307,15 +306,15 @@ class LoginController extends ReloadableController {
void _getTokenOIDCSuccess(GetTokenOIDCSuccess success) {
log('LoginController::_getTokenOIDCSuccess(): ${success.tokenOIDC.toString()}');
_dynamicUrlInterceptors.setJmapUrl(_getBaseUrl().toString());
_dynamicUrlInterceptors.changeBaseUrl(_getBaseUrl().toString());
dynamicUrlInterceptors.setJmapUrl(_getBaseUrl().toString());
dynamicUrlInterceptors.changeBaseUrl(_getBaseUrl().toString());
authorizationInterceptors.setTokenAndAuthorityOidc(
newToken: success.tokenOIDC.toToken(),
newConfig: success.configuration);
authorizationIsolateInterceptors.setTokenAndAuthorityOidc(
newToken: success.tokenOIDC.toToken(),
newConfig: success.configuration);
popAndPush(AppRoutes.session, arguments: _dynamicUrlInterceptors.baseUrl);
getSessionAction();
}
void _loginAction({Uri? baseUrl, UserName? userName, Password? password}) {
@@ -327,11 +326,11 @@ class LoginController extends ReloadableController {
}
void _loginSuccessAction(AuthenticationUserSuccess success) {
_dynamicUrlInterceptors.setJmapUrl(_getBaseUrl().toString());
_dynamicUrlInterceptors.changeBaseUrl(_getBaseUrl().toString());
dynamicUrlInterceptors.setJmapUrl(_getBaseUrl().toString());
dynamicUrlInterceptors.changeBaseUrl(_getBaseUrl().toString());
authorizationInterceptors.setBasicAuthorization(_userNameText, _passwordText);
authorizationIsolateInterceptors.setBasicAuthorization(_userNameText, _passwordText);
popAndPush(AppRoutes.session, arguments: _dynamicUrlInterceptors.baseUrl);
getSessionAction();
}
void formatUrl(String url) {