TF-1317 Update authentication account to store AccountId

This commit is contained in:
dab246
2023-01-04 19:00:53 +07:00
committed by Dat H. Pham
parent eadc0c4ddc
commit 6566372337
21 changed files with 193 additions and 71 deletions
@@ -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_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/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/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/login_form_type.dart';
import 'package:tmail_ui_user/features/login/presentation/model/login_arguments.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'; 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 LogoutOidcInteractor _logoutOidcInteractor;
final DeleteAuthorityOidcInteractor _deleteAuthorityOidcInteractor; final DeleteAuthorityOidcInteractor _deleteAuthorityOidcInteractor;
final GetAuthenticatedAccountInteractor _getAuthenticatedAccountInteractor; final GetAuthenticatedAccountInteractor _getAuthenticatedAccountInteractor;
final UpdateAuthenticationAccountInteractor _updateAuthenticationAccountInteractor;
final _fcmReceiver = FcmReceiver.instance; final _fcmReceiver = FcmReceiver.instance;
GetFCMSubscriptionLocalInteractor? _getSubscriptionLocalInteractor; GetFCMSubscriptionLocalInteractor? _getSubscriptionLocalInteractor;
@@ -59,6 +61,7 @@ abstract class ReloadableController extends BaseController {
this._logoutOidcInteractor, this._logoutOidcInteractor,
this._deleteAuthorityOidcInteractor, this._deleteAuthorityOidcInteractor,
this._getAuthenticatedAccountInteractor, this._getAuthenticatedAccountInteractor,
this._updateAuthenticationAccountInteractor
); );
@override @override
@@ -158,6 +161,7 @@ abstract class ReloadableController extends BaseController {
final apiUrl = success.session.apiUrl.toString(); final apiUrl = success.session.apiUrl.toString();
if (apiUrl.isNotEmpty) { if (apiUrl.isNotEmpty) {
_dynamicUrlInterceptors.changeBaseUrl(apiUrl); _dynamicUrlInterceptors.changeBaseUrl(apiUrl);
updateAuthenticationAccount(success.session, success.session.accounts.keys.first);
handleReloaded(success.session); handleReloaded(success.session);
} else { } else {
_handleGetSessionFailure(); _handleGetSessionFailure();
@@ -276,4 +280,12 @@ abstract class ReloadableController extends BaseController {
logoutAction(); 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));
}
}
} }
@@ -96,9 +96,12 @@ class DownloadAttachmentsInteractor {
_authenticationOIDCRepository.persistTokenOIDC(newTokenOIDC), _authenticationOIDCRepository.persistTokenOIDC(newTokenOIDC),
_accountRepository.deleteCurrentAccount(accountCurrent.id), _accountRepository.deleteCurrentAccount(accountCurrent.id),
_accountRepository.setCurrentAccount(Account( _accountRepository.setCurrentAccount(Account(
newTokenOIDC.tokenIdHash, newTokenOIDC.tokenIdHash,
AuthenticationType.oidc, AuthenticationType.oidc,
isSelected: true)) isSelected: true,
accountId: accountId,
apiUrl: accountCurrent.apiUrl
))
]); ]);
_authorizationInterceptors.setTokenAndAuthorityOidc( _authorizationInterceptors.setTokenAndAuthorityOidc(
@@ -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/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/authentication_oidc_repository.dart';
import 'package:tmail_ui_user/features/login/domain/repository/credential_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/mailbox_datasource.dart';
import 'package:tmail_ui_user/features/mailbox/data/datasource/state_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'; 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<CredentialRepository>(), Get.find<CredentialRepository>(),
Get.find<AccountRepository>(), Get.find<AccountRepository>(),
Get.find<AuthenticationOIDCRepository>())); Get.find<AuthenticationOIDCRepository>()));
Get.lazyPut(() => RefreshTokenOIDCInteractor(
Get.find<AuthenticationOIDCRepository>(),
Get.find<AccountRepository>(),
));
Get.lazyPut(() => GetStoredEmailStateInteractor(Get.find<EmailRepository>())); Get.lazyPut(() => GetStoredEmailStateInteractor(Get.find<EmailRepository>()));
IdentityInteractorsBindings().dependencies(); IdentityInteractorsBindings().dependencies();
} }
@@ -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/account.dart';
import 'package:model/account/authentication_type.dart'; import 'package:model/account/authentication_type.dart';
import 'package:tmail_ui_user/features/login/data/model/account_cache.dart'; import 'package:tmail_ui_user/features/login/data/model/account_cache.dart';
@@ -15,6 +17,12 @@ extension AccountCacheExtension on AccountCache {
Account toAccount() { Account toAccount() {
final authenticationType = fromAuthenticationTypeString(); final authenticationType = fromAuthenticationTypeString();
return Account(id, authenticationType, isSelected: isSelected); return Account(
id,
authenticationType,
isSelected: isSelected,
accountId: accountId != null ? AccountId(Id(accountId!)) : null,
apiUrl: apiUrl
);
} }
} }
@@ -4,6 +4,12 @@ import 'package:tmail_ui_user/features/login/data/model/account_cache.dart';
extension AccountExtensions on Account { extension AccountExtensions on Account {
AccountCache toCache() { AccountCache toCache() {
return AccountCache(id, authenticationType.asString(), isSelected: isSelected); return AccountCache(
id,
authenticationType.asString(),
isSelected: isSelected,
accountId: accountId?.id.value,
apiUrl: apiUrl
);
} }
} }
@@ -15,8 +15,28 @@ class AccountCache extends HiveObject with EquatableMixin {
@HiveField(2) @HiveField(2)
final bool isSelected; 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 @override
List<Object?> get props => [id, authenticationType, isSelected]; List<Object?> get props => [
id,
authenticationType,
isSelected,
accountId,
apiUrl
];
} }
@@ -88,13 +88,18 @@ class AuthorizationInterceptors extends InterceptorsWrapper {
_configOIDC!.scopes, _configOIDC!.scopes,
_token!.refreshToken); _token!.refreshToken);
final accountCurrent = await _accountCacheManager.getSelectedAccount();
await Future.wait([ await Future.wait([
_tokenOidcCacheManager.persistOneTokenOidc(newToken), _tokenOidcCacheManager.persistOneTokenOidc(newToken),
_accountCacheManager.deleteSelectedAccount(_token!.tokenIdHash), _accountCacheManager.deleteSelectedAccount(_token!.tokenIdHash),
_accountCacheManager.setSelectedAccount(Account( _accountCacheManager.setSelectedAccount(Account(
newToken.tokenIdHash, newToken.tokenIdHash,
AuthenticationType.oidc, AuthenticationType.oidc,
isSelected: true)), isSelected: true,
accountId: accountCurrent.accountId,
apiUrl: accountCurrent.apiUrl
)),
]); ]);
log('AuthorizationInterceptors::onError(): refreshToken: $newToken'); log('AuthorizationInterceptors::onError(): refreshToken: $newToken');
@@ -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<Object> get props => [];
}
class UpdateAuthenticationAccountFailure extends FeatureFailure {
final dynamic exception;
UpdateAuthenticationAccountFailure(this.exception);
@override
List<Object?> get props => [exception];
}
@@ -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<Either<Failure, Success>> 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<Failure, Success>(RefreshTokenOIDCSuccess(newTokenOIDC));
} catch (e) {
logError('RefreshTokenOIDCInteractor::execute(): $e');
return Left<Failure, Success>(RefreshTokenOIDCFailure(e));
}
}
}
@@ -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<Either<Failure, Success>> 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));
}
}
}
@@ -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/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_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/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/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/features/manage_account/domain/usecases/log_out_oidc_interactor.dart';
import 'package:tmail_ui_user/main/bindings/network/binding_tag.dart'; import 'package:tmail_ui_user/main/bindings/network/binding_tag.dart';
@@ -60,6 +61,7 @@ class LoginBindings extends BaseBindings {
Get.find<LogoutOidcInteractor>(), Get.find<LogoutOidcInteractor>(),
Get.find<DeleteAuthorityOidcInteractor>(), Get.find<DeleteAuthorityOidcInteractor>(),
Get.find<GetAuthenticatedAccountInteractor>(), Get.find<GetAuthenticatedAccountInteractor>(),
Get.find<UpdateAuthenticationAccountInteractor>(),
Get.find<AuthenticationInteractor>(), Get.find<AuthenticationInteractor>(),
Get.find<DynamicUrlInterceptors>(), Get.find<DynamicUrlInterceptors>(),
Get.find<AuthorizationInterceptors>(), Get.find<AuthorizationInterceptors>(),
@@ -166,6 +168,7 @@ class LoginBindings extends BaseBindings {
Get.lazyPut(() => GetAllRecentLoginUsernameOnMobileInteractor( Get.lazyPut(() => GetAllRecentLoginUsernameOnMobileInteractor(
Get.find<LoginUsernameRepository>() Get.find<LoginUsernameRepository>()
)); ));
Get.lazyPut(() => UpdateAuthenticationAccountInteractor(Get.find<AccountRepository>()));
} }
@override @override
@@ -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/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_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/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/login_form_type.dart';
import 'package:tmail_ui_user/features/login/presentation/model/login_arguments.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'; import 'package:tmail_ui_user/features/login/presentation/state/login_state.dart';
@@ -81,6 +82,7 @@ class LoginController extends ReloadableController {
LogoutOidcInteractor logoutOidcInteractor, LogoutOidcInteractor logoutOidcInteractor,
DeleteAuthorityOidcInteractor deleteAuthorityOidcInteractor, DeleteAuthorityOidcInteractor deleteAuthorityOidcInteractor,
GetAuthenticatedAccountInteractor getAuthenticatedAccountInteractor, GetAuthenticatedAccountInteractor getAuthenticatedAccountInteractor,
UpdateAuthenticationAccountInteractor updateAuthenticationAccountInteractor,
this._authenticationInteractor, this._authenticationInteractor,
this._dynamicUrlInterceptors, this._dynamicUrlInterceptors,
this._authorizationInterceptors, this._authorizationInterceptors,
@@ -96,9 +98,12 @@ class LoginController extends ReloadableController {
this._getAllRecentLoginUrlOnMobileInteractor, this._getAllRecentLoginUrlOnMobileInteractor,
this._saveLoginUsernameOnMobileInteractor, this._saveLoginUsernameOnMobileInteractor,
this._getAllRecentLoginUsernameOnMobileInteractor, this._getAllRecentLoginUsernameOnMobileInteractor,
) : super(logoutOidcInteractor, ) : super(
deleteAuthorityOidcInteractor, logoutOidcInteractor,
getAuthenticatedAccountInteractor); deleteAuthorityOidcInteractor,
getAuthenticatedAccountInteractor,
updateAuthenticationAccountInteractor
);
var loginState = LoginState(Right(LoginInitAction())).obs; var loginState = LoginState(Right(LoginInitAction())).obs;
final loginFormType = LoginFormType.baseUrlForm.obs; final loginFormType = LoginFormType.baseUrlForm.obs;
@@ -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_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_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/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/mailbox_datasource.dart';
import 'package:tmail_ui_user/features/mailbox/data/datasource/state_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'; 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<LogoutOidcInteractor>(), Get.find<LogoutOidcInteractor>(),
Get.find<DeleteAuthorityOidcInteractor>(), Get.find<DeleteAuthorityOidcInteractor>(),
Get.find<GetAuthenticatedAccountInteractor>(), Get.find<GetAuthenticatedAccountInteractor>(),
Get.find<UpdateAuthenticationAccountInteractor>(),
Get.find<MoveToMailboxInteractor>(), Get.find<MoveToMailboxInteractor>(),
Get.find<DeleteEmailPermanentlyInteractor>(), Get.find<DeleteEmailPermanentlyInteractor>(),
Get.find<MarkAsMailboxReadInteractor>(), Get.find<MarkAsMailboxReadInteractor>(),
@@ -256,6 +258,7 @@ class MailboxDashBoardBindings extends BaseBindings {
Get.find<AppConfigLoader>())); Get.find<AppConfigLoader>()));
Get.lazyPut(() => GetEmailByIdInteractor( Get.lazyPut(() => GetEmailByIdInteractor(
Get.find<ThreadRepository>())); Get.find<ThreadRepository>()));
Get.lazyPut(() => UpdateAuthenticationAccountInteractor(Get.find<AccountRepository>()));
} }
@override @override
@@ -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/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/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/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/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/domain/usecases/mark_as_mailbox_read_interactor.dart';
import 'package:tmail_ui_user/features/mailbox/presentation/action/mailbox_ui_action.dart'; import 'package:tmail_ui_user/features/mailbox/presentation/action/mailbox_ui_action.dart';
@@ -176,6 +177,7 @@ class MailboxDashBoardController extends ReloadableController {
LogoutOidcInteractor logoutOidcInteractor, LogoutOidcInteractor logoutOidcInteractor,
DeleteAuthorityOidcInteractor deleteAuthorityOidcInteractor, DeleteAuthorityOidcInteractor deleteAuthorityOidcInteractor,
GetAuthenticatedAccountInteractor getAuthenticatedAccountInteractor, GetAuthenticatedAccountInteractor getAuthenticatedAccountInteractor,
UpdateAuthenticationAccountInteractor updateAuthenticationAccountInteractor,
this._moveToMailboxInteractor, this._moveToMailboxInteractor,
this._deleteEmailPermanentlyInteractor, this._deleteEmailPermanentlyInteractor,
this._markAsMailboxReadInteractor, this._markAsMailboxReadInteractor,
@@ -188,9 +190,12 @@ class MailboxDashBoardController extends ReloadableController {
this._emptyTrashFolderInteractor, this._emptyTrashFolderInteractor,
this._deleteMultipleEmailsPermanentlyInteractor, this._deleteMultipleEmailsPermanentlyInteractor,
this._getEmailByIdInteractor, this._getEmailByIdInteractor,
) : super(logoutOidcInteractor, ) : super(
deleteAuthorityOidcInteractor, logoutOidcInteractor,
getAuthenticatedAccountInteractor); deleteAuthorityOidcInteractor,
getAuthenticatedAccountInteractor,
updateAuthenticationAccountInteractor
);
@override @override
void onInit() { void onInit() {
@@ -405,6 +410,7 @@ class MailboxDashBoardController extends ReloadableController {
sessionCurrent = arguments; sessionCurrent = arguments;
accountId.value = sessionCurrent?.accounts.keys.first; accountId.value = sessionCurrent?.accounts.keys.first;
_getUserProfile(); _getUserProfile();
updateAuthenticationAccount(sessionCurrent, accountId.value);
injectAutoCompleteBindings(sessionCurrent, accountId.value); injectAutoCompleteBindings(sessionCurrent, accountId.value);
injectRuleFilterBindings(sessionCurrent, accountId.value); injectRuleFilterBindings(sessionCurrent, accountId.value);
injectVacationBindings(sessionCurrent, accountId.value); injectVacationBindings(sessionCurrent, accountId.value);
@@ -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_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_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/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/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/datasource_impl/manage_account_datasource_impl.dart';
import 'package:tmail_ui_user/features/manage_account/data/local/language_cache_manager.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.lazyPut(() => ManageAccountDashBoardController(
Get.find<LogoutOidcInteractor>(), Get.find<LogoutOidcInteractor>(),
Get.find<DeleteAuthorityOidcInteractor>(), Get.find<DeleteAuthorityOidcInteractor>(),
Get.find<GetAuthenticatedAccountInteractor>() Get.find<GetAuthenticatedAccountInteractor>(),
Get.find<UpdateAuthenticationAccountInteractor>()
)); ));
} }
@@ -94,6 +96,7 @@ class ManageAccountDashBoardBindings extends BaseBindings {
Get.find<GetCredentialInteractor>(), Get.find<GetCredentialInteractor>(),
Get.find<GetStoredTokenOidcInteractor>(), Get.find<GetStoredTokenOidcInteractor>(),
)); ));
Get.lazyPut(() => UpdateAuthenticationAccountInteractor(Get.find<AccountRepository>()));
} }
@override @override
@@ -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/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/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/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/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/get_all_vacation_state.dart';
import 'package:tmail_ui_user/features/manage_account/domain/state/update_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, LogoutOidcInteractor logoutOidcInteractor,
DeleteAuthorityOidcInteractor deleteAuthorityOidcInteractor, DeleteAuthorityOidcInteractor deleteAuthorityOidcInteractor,
GetAuthenticatedAccountInteractor getAuthenticatedAccountInteractor, GetAuthenticatedAccountInteractor getAuthenticatedAccountInteractor,
UpdateAuthenticationAccountInteractor updateAuthenticationAccountInteractor
) : super( ) : super(
logoutOidcInteractor, logoutOidcInteractor,
deleteAuthorityOidcInteractor, deleteAuthorityOidcInteractor,
getAuthenticatedAccountInteractor); getAuthenticatedAccountInteractor,
updateAuthenticationAccountInteractor
);
@override @override
void onReady() { void onReady() {
@@ -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_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/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/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/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/state/get_session_state.dart';
import 'package:tmail_ui_user/features/session/domain/usecases/get_session_interactor.dart'; import 'package:tmail_ui_user/features/session/domain/usecases/get_session_interactor.dart';
@@ -33,6 +34,7 @@ class SessionController extends ReloadableController {
LogoutOidcInteractor logoutOidcInteractor, LogoutOidcInteractor logoutOidcInteractor,
DeleteAuthorityOidcInteractor deleteAuthorityOidcInteractor, DeleteAuthorityOidcInteractor deleteAuthorityOidcInteractor,
GetAuthenticatedAccountInteractor getAuthenticatedAccountInteractor, GetAuthenticatedAccountInteractor getAuthenticatedAccountInteractor,
UpdateAuthenticationAccountInteractor updateAuthenticationAccountInteractor,
this._getSessionInteractor, this._getSessionInteractor,
this._deleteCredentialInteractor, this._deleteCredentialInteractor,
this._cachingManager, this._cachingManager,
@@ -40,9 +42,12 @@ class SessionController extends ReloadableController {
this._authorizationInterceptors, this._authorizationInterceptors,
this._appToast, this._appToast,
this._dynamicUrlInterceptors, this._dynamicUrlInterceptors,
) : super(logoutOidcInteractor, ) : super(
deleteAuthorityOidcInteractor, logoutOidcInteractor,
getAuthenticatedAccountInteractor); deleteAuthorityOidcInteractor,
getAuthenticatedAccountInteractor,
updateAuthenticationAccountInteractor
);
@override @override
void onReady() { void onReady() {
@@ -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_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_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/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/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/domain/usecases/get_session_interactor.dart';
import 'package:tmail_ui_user/features/session/presentation/session_controller.dart'; import 'package:tmail_ui_user/features/session/presentation/session_controller.dart';
@@ -37,6 +38,7 @@ class SessionPageBindings extends BaseBindings {
Get.find<LogoutOidcInteractor>(), Get.find<LogoutOidcInteractor>(),
Get.find<DeleteAuthorityOidcInteractor>(), Get.find<DeleteAuthorityOidcInteractor>(),
Get.find<GetAuthenticatedAccountInteractor>(), Get.find<GetAuthenticatedAccountInteractor>(),
Get.find<UpdateAuthenticationAccountInteractor>(),
Get.find<GetSessionInteractor>(), Get.find<GetSessionInteractor>(),
Get.find<DeleteCredentialInteractor>(), Get.find<DeleteCredentialInteractor>(),
Get.find<CachingManager>(), Get.find<CachingManager>(),
@@ -85,6 +87,7 @@ class SessionPageBindings extends BaseBindings {
Get.find<GetCredentialInteractor>(), Get.find<GetCredentialInteractor>(),
Get.find<GetStoredTokenOidcInteractor>(), Get.find<GetStoredTokenOidcInteractor>(),
)); ));
Get.lazyPut(() => UpdateAuthenticationAccountInteractor(Get.find<AccountRepository>()));
} }
@override @override
+19 -2
View File
@@ -1,13 +1,30 @@
import 'package:equatable/equatable.dart'; import 'package:equatable/equatable.dart';
import 'package:jmap_dart_client/jmap/account_id.dart';
import 'package:model/account/authentication_type.dart'; import 'package:model/account/authentication_type.dart';
class Account with EquatableMixin { class Account with EquatableMixin {
final String id; final String id;
final AuthenticationType authenticationType; final AuthenticationType authenticationType;
final bool isSelected; 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 @override
List<Object?> get props => [id, authenticationType, isSelected]; List<Object?> get props => [
id,
authenticationType,
isSelected,
accountId,
apiUrl
];
} }
@@ -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
);
}
}
+1
View File
@@ -52,6 +52,7 @@ export 'extensions/user_profile_extension.dart';
export 'extensions/utc_date_extension.dart'; export 'extensions/utc_date_extension.dart';
export 'extensions/email_filter_condition_extension.dart'; export 'extensions/email_filter_condition_extension.dart';
export 'extensions/list_email_header_extension.dart'; export 'extensions/list_email_header_extension.dart';
export 'extensions/account_extension.dart';
// Identity // Identity
export 'identity/identity_request_dto.dart'; export 'identity/identity_request_dto.dart';
export 'mailbox/expand_mode.dart'; export 'mailbox/expand_mode.dart';