diff --git a/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart b/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart index 07a3101f1..d6f41d416 100644 --- a/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart +++ b/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart @@ -78,6 +78,12 @@ import 'package:tmail_ui_user/features/home/domain/usecases/store_session_intera import 'package:tmail_ui_user/features/identity_creator/domain/state/get_identity_cache_on_web_state.dart'; import 'package:tmail_ui_user/features/identity_creator/domain/usecase/get_identity_cache_on_web_interactor.dart'; import 'package:tmail_ui_user/features/login/domain/exceptions/logout_exception.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_stored_oidc_configuration_state.dart'; +import 'package:tmail_ui_user/features/login/domain/state/get_token_oidc_state.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_stored_oidc_configuration_interactor.dart'; +import 'package:tmail_ui_user/features/login/domain/usecases/get_token_oidc_interactor.dart'; import 'package:tmail_ui_user/features/login/presentation/model/login_navigate_arguments.dart'; import 'package:tmail_ui_user/features/mailbox/domain/exceptions/mailbox_exception.dart'; import 'package:tmail_ui_user/features/mailbox/domain/model/create_new_mailbox_request.dart'; @@ -114,6 +120,7 @@ import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/extensions import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/extensions/set_error_extension.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/extensions/update_current_emails_flags_extension.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/extensions/update_own_email_address_extension.dart'; +import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/extensions/web_auth_redirect_processor_extension.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/dashboard_routes.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/download/download_task_state.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/draggable_app_state.dart'; @@ -196,6 +203,11 @@ class MailboxDashBoardController extends ReloadableController final SpamReportController spamReportController = Get.find(); final NetworkConnectionController networkConnectionController = Get.find(); final ComposerManager composerManager = Get.find(); + final getAuthenticationInfoInteractor = + Get.find(); + final getStoredOidcConfigurationInteractor = + Get.find(); + final getTokenOIDCInteractor = Get.find(); final MoveToMailboxInteractor _moveToMailboxInteractor; final DeleteEmailPermanentlyInteractor _deleteEmailPermanentlyInteractor; @@ -370,7 +382,6 @@ class MailboxDashBoardController extends ReloadableController @override void handleSuccessViewState(Success success) { - super.handleSuccessViewState(success); if (success is SendEmailLoading) { if (currentOverlayContext != null && currentContext != null) { appToast.showToastMessage( @@ -459,12 +470,23 @@ class MailboxDashBoardController extends ReloadableController clearMailboxSuccess(success); } else if (success is CreateNewRuleFilterSuccess) { handleCreateNewRuleFilterSuccess(success); + } else if (success is GetAuthenticationInfoSuccess) { + getStoredOidcConfiguration(); + } else if (success is GetStoredOidcConfigurationSuccess) { + getTokenOIDCAction(success.oidcConfiguration); + } else if (success is GetTokenOIDCSuccess) { + synchronizeTokenAndGetSession( + baseUri: success.baseUri, + tokenOIDC: success.tokenOIDC, + oidcConfiguration: success.configuration, + ); + } else { + super.handleSuccessViewState(success); } } @override void handleFailureViewState(Failure failure) { - super.handleFailureViewState(failure); if (failure is SendEmailFailure) { _handleSendEmailFailure(failure); } else if (failure is SaveEmailAsDraftsFailure) { @@ -499,6 +521,12 @@ class MailboxDashBoardController extends ReloadableController clearMailboxFailure(failure); } else if (failure is CreateNewRuleFilterFailure) { handleCreateNewRuleFilterFailure(failure); + } else if (failure is GetAuthenticationInfoFailure) { + tryGetAuthenticatedAccountToUseApp(); + } else if (isGetTokenOIDCFailure(failure)) { + backToHomeScreen(); + } else { + super.handleFailureViewState(failure); } } @@ -711,6 +739,9 @@ class MailboxDashBoardController extends ReloadableController _handleSessionFromArguments(arguments); } else if (arguments is MailtoArguments) { _handleMailtoURL(arguments); + } else if (PlatformInfo.isWeb) { + dispatchRoute(DashboardRoutes.thread); + getAuthenticationInfoRedirect(); } else { dispatchRoute(DashboardRoutes.thread); reload(); @@ -3103,7 +3134,7 @@ class MailboxDashBoardController extends ReloadableController void _handleGetAllIdentitiesSuccess(GetAllIdentitiesSuccess success) { log('MailboxDashBoardController::_handleGetAllIdentitiesSuccess: IDENTITIES_SIZE = ${_identities?.length}'); final listIdentities = success.identities ?? []; - + final listIdentitiesMayDeleted = listIdentities.toListMayDeleted(); _identities = listIdentitiesMayDeleted; diff --git a/lib/features/mailbox_dashboard/presentation/extensions/web_auth_redirect_processor_extension.dart b/lib/features/mailbox_dashboard/presentation/extensions/web_auth_redirect_processor_extension.dart new file mode 100644 index 000000000..1892235f2 --- /dev/null +++ b/lib/features/mailbox_dashboard/presentation/extensions/web_auth_redirect_processor_extension.dart @@ -0,0 +1,45 @@ +import 'package:core/presentation/state/failure.dart'; +import 'package:dartz/dartz.dart'; +import 'package:model/oidc/oidc_configuration.dart'; +import 'package:tmail_ui_user/features/login/domain/exceptions/authentication_exception.dart'; +import 'package:tmail_ui_user/features/login/domain/state/get_stored_oidc_configuration_state.dart'; +import 'package:tmail_ui_user/features/login/domain/state/get_token_oidc_state.dart'; +import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart'; +import 'package:tmail_ui_user/main/routes/app_routes.dart'; +import 'package:tmail_ui_user/main/routes/route_navigation.dart'; +import 'package:tmail_ui_user/main/utils/app_config.dart'; + +extension WebAuthRedirectProcessorExtension on MailboxDashBoardController { + void getAuthenticationInfoRedirect() { + consumeState(getAuthenticationInfoInteractor.execute()); + } + + void getStoredOidcConfiguration() { + consumeState(getStoredOidcConfigurationInteractor.execute()); + } + + void getTokenOIDCAction(OIDCConfiguration oidcConfig) { + final baseUri = Uri.tryParse(AppConfig.baseUrl); + + if (baseUri == null) { + consumeState( + Stream.value(Left(GetTokenOIDCFailure(CanNotFoundBaseUrl()))), + ); + } else { + consumeState(getTokenOIDCInteractor.execute(baseUri, oidcConfig)); + } + } + + bool isGetTokenOIDCFailure(Failure? failure) { + return failure is GetStoredOidcConfigurationFailure || + failure is GetTokenOIDCFailure; + } + + void tryGetAuthenticatedAccountToUseApp() { + getAuthenticatedAccountAction(); + } + + void backToHomeScreen() { + pushAndPopAll(AppRoutes.home); + } +} diff --git a/web/login-callback.html b/web/login-callback.html index 8c2dd7db1..6f388e533 100644 --- a/web/login-callback.html +++ b/web/login-callback.html @@ -1,31 +1,38 @@ - - + - + + // Perform redirection + location.assign(redirectUrl); + } catch (error) { + console.error("[Auth Redirect] Redirection failed:", error); + location.assign("/"); + } + }; + + Twake Mail - - - - - \ No newline at end of file + + diff --git a/web/logout-callback.html b/web/logout-callback.html index 9c902ba9b..02ee8f81d 100644 --- a/web/logout-callback.html +++ b/web/logout-callback.html @@ -1,11 +1,12 @@ - + - + } + + Twake Mail