From 6566372337ea5b2667105d4d145969929a52744d Mon Sep 17 00:00:00 2001 From: dab246 Date: Wed, 4 Jan 2023 19:00:53 +0700 Subject: [PATCH] TF-1317 Update authentication account to store AccountId --- .../reloadable/reloadable_controller.dart | 12 ++++++ .../download_attachments_interactor.dart | 9 ++-- .../email/presentation/email_bindings.dart | 5 --- .../extensions/account_cache_extensions.dart | 10 ++++- .../data/extensions/account_extensions.dart | 8 +++- .../login/data/model/account_cache.dart | 24 ++++++++++- .../config/authorization_interceptors.dart | 11 +++-- .../update_authentication_account_state.dart | 21 ++++++++++ .../refresh_token_oidc_interactor.dart | 41 ------------------- ...ate_authentication_account_interactor.dart | 27 ++++++++++++ .../login/presentation/login_bindings.dart | 3 ++ .../login/presentation/login_controller.dart | 11 +++-- .../bindings/mailbox_dashboard_bindings.dart | 3 ++ .../mailbox_dashboard_controller.dart | 12 ++++-- .../manage_account_dashboard_bindings.dart | 5 ++- .../manage_account_dashboard_controller.dart | 10 +++-- .../presentation/session_controller.dart | 11 +++-- .../presentation/session_page_bindings.dart | 3 ++ model/lib/account/account.dart | 21 +++++++++- model/lib/extensions/account_extension.dart | 16 ++++++++ model/lib/model.dart | 1 + 21 files changed, 193 insertions(+), 71 deletions(-) create mode 100644 lib/features/login/domain/state/update_authentication_account_state.dart delete mode 100644 lib/features/login/domain/usecases/refresh_token_oidc_interactor.dart create mode 100644 lib/features/login/domain/usecases/update_authentication_account_interactor.dart create mode 100644 model/lib/extensions/account_extension.dart diff --git a/lib/features/base/reloadable/reloadable_controller.dart b/lib/features/base/reloadable/reloadable_controller.dart index 5a5d3dfb9..2790dfc02 100644 --- a/lib/features/base/reloadable/reloadable_controller.dart +++ b/lib/features/base/reloadable/reloadable_controller.dart @@ -19,6 +19,7 @@ import 'package:tmail_ui_user/features/login/domain/state/get_stored_token_oidc_ import 'package:tmail_ui_user/features/login/domain/usecases/delete_authority_oidc_interactor.dart'; import 'package:tmail_ui_user/features/login/domain/usecases/delete_credential_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/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/data/local/language_cache_manager.dart'; @@ -50,6 +51,7 @@ abstract class ReloadableController extends BaseController { final LogoutOidcInteractor _logoutOidcInteractor; final DeleteAuthorityOidcInteractor _deleteAuthorityOidcInteractor; final GetAuthenticatedAccountInteractor _getAuthenticatedAccountInteractor; + final UpdateAuthenticationAccountInteractor _updateAuthenticationAccountInteractor; final _fcmReceiver = FcmReceiver.instance; GetFCMSubscriptionLocalInteractor? _getSubscriptionLocalInteractor; @@ -59,6 +61,7 @@ abstract class ReloadableController extends BaseController { this._logoutOidcInteractor, this._deleteAuthorityOidcInteractor, this._getAuthenticatedAccountInteractor, + this._updateAuthenticationAccountInteractor ); @override @@ -158,6 +161,7 @@ abstract class ReloadableController extends BaseController { final apiUrl = success.session.apiUrl.toString(); if (apiUrl.isNotEmpty) { _dynamicUrlInterceptors.changeBaseUrl(apiUrl); + updateAuthenticationAccount(success.session, success.session.accounts.keys.first); handleReloaded(success.session); } else { _handleGetSessionFailure(); @@ -276,4 +280,12 @@ abstract class ReloadableController extends BaseController { logoutAction(); } } + + void updateAuthenticationAccount(Session? session, AccountId? accountId) { + final apiUrl = session?.apiUrl.toString() ?? ''; + log('ReloadableController::updateAuthenticationAccount():apiUrl: $apiUrl'); + if (accountId != null && apiUrl.isNotEmpty) { + consumeState(_updateAuthenticationAccountInteractor.execute(accountId, apiUrl)); + } + } } \ No newline at end of file diff --git a/lib/features/email/domain/usecases/download_attachments_interactor.dart b/lib/features/email/domain/usecases/download_attachments_interactor.dart index 312a09359..fa15f9b7c 100644 --- a/lib/features/email/domain/usecases/download_attachments_interactor.dart +++ b/lib/features/email/domain/usecases/download_attachments_interactor.dart @@ -96,9 +96,12 @@ class DownloadAttachmentsInteractor { _authenticationOIDCRepository.persistTokenOIDC(newTokenOIDC), _accountRepository.deleteCurrentAccount(accountCurrent.id), _accountRepository.setCurrentAccount(Account( - newTokenOIDC.tokenIdHash, - AuthenticationType.oidc, - isSelected: true)) + newTokenOIDC.tokenIdHash, + AuthenticationType.oidc, + isSelected: true, + accountId: accountId, + apiUrl: accountCurrent.apiUrl + )) ]); _authorizationInterceptors.setTokenAndAuthorityOidc( diff --git a/lib/features/email/presentation/email_bindings.dart b/lib/features/email/presentation/email_bindings.dart index 0d4a1479d..03c3db6b1 100644 --- a/lib/features/email/presentation/email_bindings.dart +++ b/lib/features/email/presentation/email_bindings.dart @@ -35,7 +35,6 @@ import 'package:tmail_ui_user/features/login/data/repository/authentication_oidc 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'; import 'package:tmail_ui_user/features/login/domain/repository/credential_repository.dart'; -import 'package:tmail_ui_user/features/login/domain/usecases/refresh_token_oidc_interactor.dart'; import 'package:tmail_ui_user/features/mailbox/data/datasource/mailbox_datasource.dart'; import 'package:tmail_ui_user/features/mailbox/data/datasource/state_datasource.dart'; import 'package:tmail_ui_user/features/mailbox/data/datasource_impl/mailbox_cache_datasource_impl.dart'; @@ -136,10 +135,6 @@ class EmailBindings extends BaseBindings { Get.find(), Get.find(), Get.find())); - Get.lazyPut(() => RefreshTokenOIDCInteractor( - Get.find(), - Get.find(), - )); Get.lazyPut(() => GetStoredEmailStateInteractor(Get.find())); IdentityInteractorsBindings().dependencies(); } diff --git a/lib/features/login/data/extensions/account_cache_extensions.dart b/lib/features/login/data/extensions/account_cache_extensions.dart index 215d4ee44..21e83dc5f 100644 --- a/lib/features/login/data/extensions/account_cache_extensions.dart +++ b/lib/features/login/data/extensions/account_cache_extensions.dart @@ -1,3 +1,5 @@ +import 'package:jmap_dart_client/jmap/account_id.dart'; +import 'package:jmap_dart_client/jmap/core/id.dart'; import 'package:model/account/account.dart'; import 'package:model/account/authentication_type.dart'; import 'package:tmail_ui_user/features/login/data/model/account_cache.dart'; @@ -15,6 +17,12 @@ extension AccountCacheExtension on AccountCache { Account toAccount() { final authenticationType = fromAuthenticationTypeString(); - return Account(id, authenticationType, isSelected: isSelected); + return Account( + id, + authenticationType, + isSelected: isSelected, + accountId: accountId != null ? AccountId(Id(accountId!)) : null, + apiUrl: apiUrl + ); } } \ No newline at end of file diff --git a/lib/features/login/data/extensions/account_extensions.dart b/lib/features/login/data/extensions/account_extensions.dart index 5ba311f7a..8486f2b2b 100644 --- a/lib/features/login/data/extensions/account_extensions.dart +++ b/lib/features/login/data/extensions/account_extensions.dart @@ -4,6 +4,12 @@ import 'package:tmail_ui_user/features/login/data/model/account_cache.dart'; extension AccountExtensions on Account { AccountCache toCache() { - return AccountCache(id, authenticationType.asString(), isSelected: isSelected); + return AccountCache( + id, + authenticationType.asString(), + isSelected: isSelected, + accountId: accountId?.id.value, + apiUrl: apiUrl + ); } } \ No newline at end of file diff --git a/lib/features/login/data/model/account_cache.dart b/lib/features/login/data/model/account_cache.dart index a5823a4bd..c211790cb 100644 --- a/lib/features/login/data/model/account_cache.dart +++ b/lib/features/login/data/model/account_cache.dart @@ -15,8 +15,28 @@ class AccountCache extends HiveObject with EquatableMixin { @HiveField(2) final bool isSelected; - AccountCache(this.id, this.authenticationType, {required this.isSelected}); + @HiveField(3) + final String? accountId; + + @HiveField(4) + final String? apiUrl; + + AccountCache( + this.id, + this.authenticationType, + { + required this.isSelected, + this.accountId, + this.apiUrl + } + ); @override - List get props => [id, authenticationType, isSelected]; + List get props => [ + id, + authenticationType, + isSelected, + accountId, + apiUrl + ]; } \ No newline at end of file diff --git a/lib/features/login/data/network/config/authorization_interceptors.dart b/lib/features/login/data/network/config/authorization_interceptors.dart index 23c0c1b77..a122e2bf2 100644 --- a/lib/features/login/data/network/config/authorization_interceptors.dart +++ b/lib/features/login/data/network/config/authorization_interceptors.dart @@ -88,13 +88,18 @@ class AuthorizationInterceptors extends InterceptorsWrapper { _configOIDC!.scopes, _token!.refreshToken); + final accountCurrent = await _accountCacheManager.getSelectedAccount(); + await Future.wait([ _tokenOidcCacheManager.persistOneTokenOidc(newToken), _accountCacheManager.deleteSelectedAccount(_token!.tokenIdHash), _accountCacheManager.setSelectedAccount(Account( - newToken.tokenIdHash, - AuthenticationType.oidc, - isSelected: true)), + newToken.tokenIdHash, + AuthenticationType.oidc, + isSelected: true, + accountId: accountCurrent.accountId, + apiUrl: accountCurrent.apiUrl + )), ]); log('AuthorizationInterceptors::onError(): refreshToken: $newToken'); diff --git a/lib/features/login/domain/state/update_authentication_account_state.dart b/lib/features/login/domain/state/update_authentication_account_state.dart new file mode 100644 index 000000000..b0aa0540f --- /dev/null +++ b/lib/features/login/domain/state/update_authentication_account_state.dart @@ -0,0 +1,21 @@ +import 'package:core/presentation/state/failure.dart'; +import 'package:core/presentation/state/success.dart'; + +class UpdateAuthenticationAccountLoading extends LoadingState {} + +class UpdateAuthenticationAccountSuccess extends UIState { + + UpdateAuthenticationAccountSuccess(); + + @override + List get props => []; +} + +class UpdateAuthenticationAccountFailure extends FeatureFailure { + final dynamic exception; + + UpdateAuthenticationAccountFailure(this.exception); + + @override + List get props => [exception]; +} \ No newline at end of file diff --git a/lib/features/login/domain/usecases/refresh_token_oidc_interactor.dart b/lib/features/login/domain/usecases/refresh_token_oidc_interactor.dart deleted file mode 100644 index 83ea9359b..000000000 --- a/lib/features/login/domain/usecases/refresh_token_oidc_interactor.dart +++ /dev/null @@ -1,41 +0,0 @@ - -import 'package:core/core.dart'; -import 'package:dartz/dartz.dart'; -import 'package:model/model.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'; -import 'package:tmail_ui_user/features/login/domain/state/refresh_token_oidc_state.dart'; - -class RefreshTokenOIDCInteractor { - - final AuthenticationOIDCRepository authenticationOIDCRepository; - final AccountRepository _accountRepository; - - RefreshTokenOIDCInteractor(this.authenticationOIDCRepository, this._accountRepository); - - Future> execute( - OIDCConfiguration config, - String refreshToken) async { - try { - final newTokenOIDC = await authenticationOIDCRepository.refreshingTokensOIDC( - config.clientId, - config.redirectUrl, - config.discoveryUrl, - config.scopes, - refreshToken); - - await Future.wait([ - _accountRepository.setCurrentAccount(Account( - newTokenOIDC.tokenId.hashCode.toString(), - AuthenticationType.oidc, - isSelected: true)), - authenticationOIDCRepository.persistTokenOIDC(newTokenOIDC), - ]); - return Right(RefreshTokenOIDCSuccess(newTokenOIDC)); - } catch (e) { - logError('RefreshTokenOIDCInteractor::execute(): $e'); - return Left(RefreshTokenOIDCFailure(e)); - } - } -} \ No newline at end of file diff --git a/lib/features/login/domain/usecases/update_authentication_account_interactor.dart b/lib/features/login/domain/usecases/update_authentication_account_interactor.dart new file mode 100644 index 000000000..18c663268 --- /dev/null +++ b/lib/features/login/domain/usecases/update_authentication_account_interactor.dart @@ -0,0 +1,27 @@ +import 'package:core/presentation/state/failure.dart'; +import 'package:core/presentation/state/success.dart'; +import 'package:dartz/dartz.dart'; +import 'package:jmap_dart_client/jmap/account_id.dart'; +import 'package:model/extensions/account_extension.dart'; +import 'package:tmail_ui_user/features/login/domain/repository/account_repository.dart'; +import 'package:tmail_ui_user/features/login/domain/state/update_authentication_account_state.dart'; + +class UpdateAuthenticationAccountInteractor { + final AccountRepository _accountRepository; + + UpdateAuthenticationAccountInteractor(this._accountRepository); + + Stream> execute(AccountId accountId, String apiUrl) async* { + try{ + yield Right(UpdateAuthenticationAccountLoading()); + final currentAccount = await _accountRepository.getCurrentAccount(); + await _accountRepository.setCurrentAccount(currentAccount.fromAccountId( + accountId: accountId, + apiUrl: apiUrl + )); + yield Right(UpdateAuthenticationAccountSuccess()); + } catch(e) { + yield Left(UpdateAuthenticationAccountFailure(e)); + } + } +} \ No newline at end of file diff --git a/lib/features/login/presentation/login_bindings.dart b/lib/features/login/presentation/login_bindings.dart index 5befc6b2f..af3979e0d 100644 --- a/lib/features/login/presentation/login_bindings.dart +++ b/lib/features/login/presentation/login_bindings.dart @@ -46,6 +46,7 @@ import 'package:tmail_ui_user/features/login/domain/usecases/get_stored_token_oi 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/features/manage_account/domain/usecases/log_out_oidc_interactor.dart'; import 'package:tmail_ui_user/main/bindings/network/binding_tag.dart'; @@ -60,6 +61,7 @@ class LoginBindings extends BaseBindings { Get.find(), Get.find(), Get.find(), + Get.find(), Get.find(), Get.find(), Get.find(), @@ -166,6 +168,7 @@ class LoginBindings extends BaseBindings { Get.lazyPut(() => GetAllRecentLoginUsernameOnMobileInteractor( Get.find() )); + Get.lazyPut(() => UpdateAuthenticationAccountInteractor(Get.find())); } @override diff --git a/lib/features/login/presentation/login_controller.dart b/lib/features/login/presentation/login_controller.dart index c9382b85b..56ffa5c9a 100644 --- a/lib/features/login/presentation/login_controller.dart +++ b/lib/features/login/presentation/login_controller.dart @@ -43,6 +43,7 @@ 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/login/presentation/state/login_state.dart'; @@ -81,6 +82,7 @@ class LoginController extends ReloadableController { LogoutOidcInteractor logoutOidcInteractor, DeleteAuthorityOidcInteractor deleteAuthorityOidcInteractor, GetAuthenticatedAccountInteractor getAuthenticatedAccountInteractor, + UpdateAuthenticationAccountInteractor updateAuthenticationAccountInteractor, this._authenticationInteractor, this._dynamicUrlInterceptors, this._authorizationInterceptors, @@ -96,9 +98,12 @@ class LoginController extends ReloadableController { this._getAllRecentLoginUrlOnMobileInteractor, this._saveLoginUsernameOnMobileInteractor, this._getAllRecentLoginUsernameOnMobileInteractor, - ) : super(logoutOidcInteractor, - deleteAuthorityOidcInteractor, - getAuthenticatedAccountInteractor); + ) : super( + logoutOidcInteractor, + deleteAuthorityOidcInteractor, + getAuthenticatedAccountInteractor, + updateAuthenticationAccountInteractor + ); var loginState = LoginState(Right(LoginInitAction())).obs; final loginFormType = LoginFormType.baseUrlForm.obs; diff --git a/lib/features/mailbox_dashboard/presentation/bindings/mailbox_dashboard_bindings.dart b/lib/features/mailbox_dashboard/presentation/bindings/mailbox_dashboard_bindings.dart index 7b50d4dcf..962033367 100644 --- a/lib/features/mailbox_dashboard/presentation/bindings/mailbox_dashboard_bindings.dart +++ b/lib/features/mailbox_dashboard/presentation/bindings/mailbox_dashboard_bindings.dart @@ -41,6 +41,7 @@ import 'package:tmail_ui_user/features/login/domain/usecases/delete_authority_oi import 'package:tmail_ui_user/features/login/domain/usecases/get_authenticated_account_interactor.dart'; import 'package:tmail_ui_user/features/login/domain/usecases/get_credential_interactor.dart'; import 'package:tmail_ui_user/features/login/domain/usecases/get_stored_token_oidc_interactor.dart'; +import 'package:tmail_ui_user/features/login/domain/usecases/update_authentication_account_interactor.dart'; import 'package:tmail_ui_user/features/mailbox/data/datasource/mailbox_datasource.dart'; import 'package:tmail_ui_user/features/mailbox/data/datasource/state_datasource.dart'; import 'package:tmail_ui_user/features/mailbox/data/datasource_impl/mailbox_cache_datasource_impl.dart'; @@ -124,6 +125,7 @@ class MailboxDashBoardBindings extends BaseBindings { Get.find(), Get.find(), Get.find(), + Get.find(), Get.find(), Get.find(), Get.find(), @@ -256,6 +258,7 @@ class MailboxDashBoardBindings extends BaseBindings { Get.find())); Get.lazyPut(() => GetEmailByIdInteractor( Get.find())); + Get.lazyPut(() => UpdateAuthenticationAccountInteractor(Get.find())); } @override 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 be5ad3281..bd6c082a6 100644 --- a/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart +++ b/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart @@ -42,6 +42,7 @@ import 'package:tmail_ui_user/features/email/presentation/action/email_ui_action import 'package:tmail_ui_user/features/email/presentation/model/composer_arguments.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_authenticated_account_interactor.dart'; +import 'package:tmail_ui_user/features/login/domain/usecases/update_authentication_account_interactor.dart'; import 'package:tmail_ui_user/features/mailbox/domain/state/mark_as_mailbox_read_state.dart'; import 'package:tmail_ui_user/features/mailbox/domain/usecases/mark_as_mailbox_read_interactor.dart'; import 'package:tmail_ui_user/features/mailbox/presentation/action/mailbox_ui_action.dart'; @@ -176,6 +177,7 @@ class MailboxDashBoardController extends ReloadableController { LogoutOidcInteractor logoutOidcInteractor, DeleteAuthorityOidcInteractor deleteAuthorityOidcInteractor, GetAuthenticatedAccountInteractor getAuthenticatedAccountInteractor, + UpdateAuthenticationAccountInteractor updateAuthenticationAccountInteractor, this._moveToMailboxInteractor, this._deleteEmailPermanentlyInteractor, this._markAsMailboxReadInteractor, @@ -188,9 +190,12 @@ class MailboxDashBoardController extends ReloadableController { this._emptyTrashFolderInteractor, this._deleteMultipleEmailsPermanentlyInteractor, this._getEmailByIdInteractor, - ) : super(logoutOidcInteractor, - deleteAuthorityOidcInteractor, - getAuthenticatedAccountInteractor); + ) : super( + logoutOidcInteractor, + deleteAuthorityOidcInteractor, + getAuthenticatedAccountInteractor, + updateAuthenticationAccountInteractor + ); @override void onInit() { @@ -405,6 +410,7 @@ class MailboxDashBoardController extends ReloadableController { sessionCurrent = arguments; accountId.value = sessionCurrent?.accounts.keys.first; _getUserProfile(); + updateAuthenticationAccount(sessionCurrent, accountId.value); injectAutoCompleteBindings(sessionCurrent, accountId.value); injectRuleFilterBindings(sessionCurrent, accountId.value); injectVacationBindings(sessionCurrent, accountId.value); diff --git a/lib/features/manage_account/presentation/manage_account_dashboard_bindings.dart b/lib/features/manage_account/presentation/manage_account_dashboard_bindings.dart index 53191d1ce..fb55c1fbd 100644 --- a/lib/features/manage_account/presentation/manage_account_dashboard_bindings.dart +++ b/lib/features/manage_account/presentation/manage_account_dashboard_bindings.dart @@ -18,6 +18,7 @@ import 'package:tmail_ui_user/features/login/domain/usecases/delete_authority_oi import 'package:tmail_ui_user/features/login/domain/usecases/get_authenticated_account_interactor.dart'; import 'package:tmail_ui_user/features/login/domain/usecases/get_credential_interactor.dart'; import 'package:tmail_ui_user/features/login/domain/usecases/get_stored_token_oidc_interactor.dart'; +import 'package:tmail_ui_user/features/login/domain/usecases/update_authentication_account_interactor.dart'; import 'package:tmail_ui_user/features/manage_account/data/datasource/manage_account_datasource.dart'; import 'package:tmail_ui_user/features/manage_account/data/datasource_impl/manage_account_datasource_impl.dart'; import 'package:tmail_ui_user/features/manage_account/data/local/language_cache_manager.dart'; @@ -48,7 +49,8 @@ class ManageAccountDashBoardBindings extends BaseBindings { Get.lazyPut(() => ManageAccountDashBoardController( Get.find(), Get.find(), - Get.find() + Get.find(), + Get.find() )); } @@ -94,6 +96,7 @@ class ManageAccountDashBoardBindings extends BaseBindings { Get.find(), Get.find(), )); + Get.lazyPut(() => UpdateAuthenticationAccountInteractor(Get.find())); } @override diff --git a/lib/features/manage_account/presentation/manage_account_dashboard_controller.dart b/lib/features/manage_account/presentation/manage_account_dashboard_controller.dart index 20b2a1d31..5f2a3d00f 100644 --- a/lib/features/manage_account/presentation/manage_account_dashboard_controller.dart +++ b/lib/features/manage_account/presentation/manage_account_dashboard_controller.dart @@ -15,6 +15,7 @@ import 'package:tmail_ui_user/features/base/action/ui_action.dart'; import 'package:tmail_ui_user/features/base/reloadable/reloadable_controller.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_authenticated_account_interactor.dart'; +import 'package:tmail_ui_user/features/login/domain/usecases/update_authentication_account_interactor.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/domain/state/get_user_profile_state.dart'; import 'package:tmail_ui_user/features/manage_account/domain/state/get_all_vacation_state.dart'; import 'package:tmail_ui_user/features/manage_account/domain/state/update_vacation_state.dart'; @@ -60,10 +61,13 @@ class ManageAccountDashBoardController extends ReloadableController { LogoutOidcInteractor logoutOidcInteractor, DeleteAuthorityOidcInteractor deleteAuthorityOidcInteractor, GetAuthenticatedAccountInteractor getAuthenticatedAccountInteractor, + UpdateAuthenticationAccountInteractor updateAuthenticationAccountInteractor ) : super( - logoutOidcInteractor, - deleteAuthorityOidcInteractor, - getAuthenticatedAccountInteractor); + logoutOidcInteractor, + deleteAuthorityOidcInteractor, + getAuthenticatedAccountInteractor, + updateAuthenticationAccountInteractor + ); @override void onReady() { diff --git a/lib/features/session/presentation/session_controller.dart b/lib/features/session/presentation/session_controller.dart index a5d295aa3..2c0802d89 100644 --- a/lib/features/session/presentation/session_controller.dart +++ b/lib/features/session/presentation/session_controller.dart @@ -10,6 +10,7 @@ import 'package:tmail_ui_user/features/login/domain/exceptions/authentication_ex import 'package:tmail_ui_user/features/login/domain/usecases/delete_authority_oidc_interactor.dart'; import 'package:tmail_ui_user/features/login/domain/usecases/delete_credential_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/update_authentication_account_interactor.dart'; import 'package:tmail_ui_user/features/manage_account/domain/usecases/log_out_oidc_interactor.dart'; import 'package:tmail_ui_user/features/session/domain/state/get_session_state.dart'; import 'package:tmail_ui_user/features/session/domain/usecases/get_session_interactor.dart'; @@ -33,6 +34,7 @@ class SessionController extends ReloadableController { LogoutOidcInteractor logoutOidcInteractor, DeleteAuthorityOidcInteractor deleteAuthorityOidcInteractor, GetAuthenticatedAccountInteractor getAuthenticatedAccountInteractor, + UpdateAuthenticationAccountInteractor updateAuthenticationAccountInteractor, this._getSessionInteractor, this._deleteCredentialInteractor, this._cachingManager, @@ -40,9 +42,12 @@ class SessionController extends ReloadableController { this._authorizationInterceptors, this._appToast, this._dynamicUrlInterceptors, - ) : super(logoutOidcInteractor, - deleteAuthorityOidcInteractor, - getAuthenticatedAccountInteractor); + ) : super( + logoutOidcInteractor, + deleteAuthorityOidcInteractor, + getAuthenticatedAccountInteractor, + updateAuthenticationAccountInteractor + ); @override void onReady() { diff --git a/lib/features/session/presentation/session_page_bindings.dart b/lib/features/session/presentation/session_page_bindings.dart index 7b58cbea5..a9b791d57 100644 --- a/lib/features/session/presentation/session_page_bindings.dart +++ b/lib/features/session/presentation/session_page_bindings.dart @@ -23,6 +23,7 @@ import 'package:tmail_ui_user/features/login/domain/usecases/delete_credential_i import 'package:tmail_ui_user/features/login/domain/usecases/get_authenticated_account_interactor.dart'; import 'package:tmail_ui_user/features/login/domain/usecases/get_credential_interactor.dart'; import 'package:tmail_ui_user/features/login/domain/usecases/get_stored_token_oidc_interactor.dart'; +import 'package:tmail_ui_user/features/login/domain/usecases/update_authentication_account_interactor.dart'; import 'package:tmail_ui_user/features/manage_account/domain/usecases/log_out_oidc_interactor.dart'; import 'package:tmail_ui_user/features/session/domain/usecases/get_session_interactor.dart'; import 'package:tmail_ui_user/features/session/presentation/session_controller.dart'; @@ -37,6 +38,7 @@ class SessionPageBindings extends BaseBindings { Get.find(), Get.find(), Get.find(), + Get.find(), Get.find(), Get.find(), Get.find(), @@ -85,6 +87,7 @@ class SessionPageBindings extends BaseBindings { Get.find(), Get.find(), )); + Get.lazyPut(() => UpdateAuthenticationAccountInteractor(Get.find())); } @override diff --git a/model/lib/account/account.dart b/model/lib/account/account.dart index eea63a456..f66b9c41c 100644 --- a/model/lib/account/account.dart +++ b/model/lib/account/account.dart @@ -1,13 +1,30 @@ import 'package:equatable/equatable.dart'; +import 'package:jmap_dart_client/jmap/account_id.dart'; import 'package:model/account/authentication_type.dart'; class Account with EquatableMixin { final String id; final AuthenticationType authenticationType; final bool isSelected; + final AccountId? accountId; + final String? apiUrl; - Account(this.id, this.authenticationType, {required this.isSelected}); + Account( + this.id, + this.authenticationType, + { + required this.isSelected, + this.accountId, + this.apiUrl, + } + ); @override - List get props => [id, authenticationType, isSelected]; + List get props => [ + id, + authenticationType, + isSelected, + accountId, + apiUrl + ]; } \ No newline at end of file diff --git a/model/lib/extensions/account_extension.dart b/model/lib/extensions/account_extension.dart new file mode 100644 index 000000000..b84177346 --- /dev/null +++ b/model/lib/extensions/account_extension.dart @@ -0,0 +1,16 @@ + +import 'package:jmap_dart_client/jmap/account_id.dart'; +import 'package:model/account/account.dart'; + +extension AccountExtension on Account { + + Account fromAccountId({required AccountId accountId, required String apiUrl}) { + return Account( + id, + authenticationType, + isSelected: isSelected, + accountId: accountId, + apiUrl: apiUrl + ); + } +} \ No newline at end of file diff --git a/model/lib/model.dart b/model/lib/model.dart index ba0e84a59..d6dd6e2be 100644 --- a/model/lib/model.dart +++ b/model/lib/model.dart @@ -52,6 +52,7 @@ export 'extensions/user_profile_extension.dart'; export 'extensions/utc_date_extension.dart'; export 'extensions/email_filter_condition_extension.dart'; export 'extensions/list_email_header_extension.dart'; +export 'extensions/account_extension.dart'; // Identity export 'identity/identity_request_dto.dart'; export 'mailbox/expand_mode.dart';