TF-607 Delete authority oidc when logout
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
import 'package:core/data/network/config/dynamic_url_interceptors.dart';
|
||||
import 'package:core/presentation/state/failure.dart';
|
||||
import 'package:core/presentation/state/success.dart';
|
||||
import 'package:core/utils/app_logger.dart';
|
||||
import 'package:dartz/dartz.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/session/session.dart';
|
||||
@@ -9,8 +10,10 @@ import 'package:tmail_ui_user/features/base/base_controller.dart';
|
||||
import 'package:tmail_ui_user/features/caching/caching_manager.dart';
|
||||
import 'package:tmail_ui_user/features/login/data/network/config/authorization_interceptors.dart';
|
||||
import 'package:tmail_ui_user/features/login/domain/state/get_credential_state.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/get_credential_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/domain/state/log_out_oidc_state.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';
|
||||
@@ -26,8 +29,11 @@ abstract class ReloadableController extends BaseController {
|
||||
final CachingManager _cachingManager = Get.find<CachingManager>();
|
||||
|
||||
final LogoutOidcInteractor _logoutOidcInteractor;
|
||||
final DeleteAuthorityOidcInteractor _deleteAuthorityOidcInteractor;
|
||||
|
||||
ReloadableController(this._logoutOidcInteractor);
|
||||
ReloadableController(
|
||||
this._logoutOidcInteractor,
|
||||
this._deleteAuthorityOidcInteractor);
|
||||
|
||||
@override
|
||||
void onData(Either<Failure, Success> newState) {
|
||||
@@ -38,6 +44,8 @@ abstract class ReloadableController extends BaseController {
|
||||
goToLogin();
|
||||
} else if (failure is GetSessionFailure) {
|
||||
_handleGetSessionFailure();
|
||||
} else if (failure is LogoutOidcFailure) {
|
||||
log('ReloadableController::onData(): LogoutOidcFailure: $failure');
|
||||
}
|
||||
},
|
||||
(success) {
|
||||
@@ -45,6 +53,8 @@ abstract class ReloadableController extends BaseController {
|
||||
_handleGetCredentialSuccess(success);
|
||||
} else if (success is GetSessionSuccess) {
|
||||
_handleGetSessionSuccess(success);
|
||||
} else if (success is LogoutOidcSuccess) {
|
||||
handleLogoutOidcSuccess(success);
|
||||
}
|
||||
}
|
||||
);
|
||||
@@ -100,19 +110,26 @@ abstract class ReloadableController extends BaseController {
|
||||
void logoutAction() async {
|
||||
final authenticationType = _authorizationInterceptors.authenticationType;
|
||||
if (authenticationType == AuthenticationType.oidc) {
|
||||
await _logoutOidcInteractor.execute()
|
||||
.then((value) async {
|
||||
await Future.wait([
|
||||
_deleteCredentialInteractor.execute(),
|
||||
_cachingManager.clearAll(),
|
||||
]);
|
||||
});
|
||||
consumeState(_logoutOidcInteractor.execute());
|
||||
} else {
|
||||
await Future.wait([
|
||||
_deleteCredentialInteractor.execute(),
|
||||
_cachingManager.clearAll(),
|
||||
]);
|
||||
|
||||
_authorizationInterceptors.clear();
|
||||
goToLogin();
|
||||
}
|
||||
}
|
||||
|
||||
void handleLogoutOidcSuccess(LogoutOidcSuccess success) async {
|
||||
log('ReloadableController::handleLogoutOidcSuccess(): $success');
|
||||
await Future.wait([
|
||||
_deleteCredentialInteractor.execute(),
|
||||
_deleteAuthorityOidcInteractor.execute(),
|
||||
_cachingManager.clearAll(),
|
||||
]);
|
||||
|
||||
_authorizationInterceptors.clear();
|
||||
goToLogin();
|
||||
}
|
||||
|
||||
@@ -14,6 +14,8 @@ abstract class AuthenticationOIDCDataSource {
|
||||
|
||||
Future<void> persistAuthorityOidc(String authority);
|
||||
|
||||
Future<void> deleteAuthorityOidc();
|
||||
|
||||
Future<OIDCConfiguration> getStoredOidcConfiguration();
|
||||
|
||||
Future<TokenOIDC> refreshingTokensOIDC(
|
||||
|
||||
@@ -78,4 +78,9 @@ class AuthenticationOIDCDataSourceImpl extends AuthenticationOIDCDataSource {
|
||||
throw error;
|
||||
});
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> deleteAuthorityOidc() {
|
||||
return _oidcConfigurationCacheManager.deleteAuthorityOidc();
|
||||
}
|
||||
}
|
||||
@@ -25,4 +25,9 @@ class OidcConfigurationCacheManager {
|
||||
log('OidcConfigurationCacheManager::persistAuthorityOidc(): $authority');
|
||||
await _sharedPreferences.setString(OIDCConstant.keyAuthorityOidc, authority);
|
||||
}
|
||||
|
||||
Future<void> deleteAuthorityOidc() async {
|
||||
log('OidcConfigurationCacheManager::deleteAuthorityOidc()');
|
||||
await _sharedPreferences.remove(OIDCConstant.keyAuthorityOidc);
|
||||
}
|
||||
}
|
||||
@@ -66,4 +66,9 @@ class AuthenticationOIDCRepositoryImpl extends AuthenticationOIDCRepository {
|
||||
Future<bool> logout(TokenId tokenId, OIDCConfiguration config) {
|
||||
return _oidcDataSource.logout(tokenId, config);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> deleteAuthorityOidc() {
|
||||
return _oidcDataSource.deleteAuthorityOidc();
|
||||
}
|
||||
}
|
||||
@@ -14,6 +14,8 @@ abstract class AuthenticationOIDCRepository {
|
||||
|
||||
Future<void> persistAuthorityOidc(String authority);
|
||||
|
||||
Future<void> deleteAuthorityOidc();
|
||||
|
||||
Future<OIDCConfiguration> getStoredOidcConfiguration();
|
||||
|
||||
Future<TokenOIDC> refreshingTokensOIDC(
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
import 'package:core/core.dart';
|
||||
|
||||
class DeleteAuthorityOidcSuccess extends UIState {
|
||||
DeleteAuthorityOidcSuccess();
|
||||
|
||||
@override
|
||||
List<Object> get props => [];
|
||||
}
|
||||
|
||||
class DeleteAuthorityOidcFailure extends FeatureFailure {
|
||||
final dynamic exception;
|
||||
|
||||
DeleteAuthorityOidcFailure(this.exception);
|
||||
|
||||
@override
|
||||
List<Object> get props => [exception];
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
import 'dart:core';
|
||||
|
||||
import 'package:core/presentation/state/failure.dart';
|
||||
import 'package:core/presentation/state/success.dart';
|
||||
import 'package:dartz/dartz.dart';
|
||||
import 'package:tmail_ui_user/features/login/domain/repository/authentication_oidc_repository.dart';
|
||||
import 'package:tmail_ui_user/features/login/domain/state/delete_authority_oidc_state.dart';
|
||||
|
||||
class DeleteAuthorityOidcInteractor {
|
||||
final AuthenticationOIDCRepository _authenticationOIDCRepository;
|
||||
|
||||
DeleteAuthorityOidcInteractor(this._authenticationOIDCRepository);
|
||||
|
||||
Future<Either<Failure, Success>> execute() async {
|
||||
try {
|
||||
await _authenticationOIDCRepository.deleteAuthorityOidc();
|
||||
return Right(DeleteAuthorityOidcSuccess());
|
||||
} catch (exception) {
|
||||
return Left(DeleteAuthorityOidcFailure(exception));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -27,6 +27,7 @@ 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/delete_authority_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';
|
||||
@@ -72,6 +73,7 @@ class MailboxDashBoardBindings extends BaseBindings {
|
||||
void bindingsController() {
|
||||
Get.put(MailboxDashBoardController(
|
||||
Get.find<LogoutOidcInteractor>(),
|
||||
Get.find<DeleteAuthorityOidcInteractor>(),
|
||||
Get.find<MoveToMailboxInteractor>(),
|
||||
Get.find<DeleteEmailPermanentlyInteractor>(),
|
||||
Get.find<SaveRecentSearchInteractor>(),
|
||||
@@ -128,6 +130,7 @@ class MailboxDashBoardBindings extends BaseBindings {
|
||||
Get.find<AccountRepository>(),
|
||||
Get.find<AuthenticationOIDCRepository>(),
|
||||
));
|
||||
Get.lazyPut(() => DeleteAuthorityOidcInteractor(Get.find<AuthenticationOIDCRepository>()));
|
||||
}
|
||||
|
||||
@override
|
||||
|
||||
@@ -35,6 +35,7 @@ import 'package:tmail_ui_user/features/email/domain/state/move_to_mailbox_state.
|
||||
import 'package:tmail_ui_user/features/email/domain/usecases/delete_email_permanently_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/usecases/move_to_mailbox_interactor.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/mailbox_dashboard/domain/model/recent_search.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/state/get_all_recent_search_latest_state.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/state/mark_as_mailbox_read_state.dart';
|
||||
@@ -105,13 +106,14 @@ class MailboxDashBoardController extends ReloadableController {
|
||||
|
||||
MailboxDashBoardController(
|
||||
LogoutOidcInteractor logoutOidcInteractor,
|
||||
DeleteAuthorityOidcInteractor deleteAuthorityOidcInteractor,
|
||||
this._moveToMailboxInteractor,
|
||||
this._deleteEmailPermanentlyInteractor,
|
||||
this._saveRecentSearchInteractor,
|
||||
this._getAllRecentSearchLatestInteractor,
|
||||
this._quickSearchEmailInteractor,
|
||||
this._markAsMailboxReadInteractor,
|
||||
) : super(logoutOidcInteractor);
|
||||
) : super(logoutOidcInteractor, deleteAuthorityOidcInteractor);
|
||||
|
||||
@override
|
||||
void onInit() {
|
||||
|
||||
@@ -18,7 +18,7 @@ class LogoutOidcInteractor {
|
||||
|
||||
LogoutOidcInteractor(this._accountRepository, this._authenticationOIDCRepository);
|
||||
|
||||
Future<Either<Failure, Success>> execute() async {
|
||||
Stream<Either<Failure, Success>> execute() async* {
|
||||
try {
|
||||
final currentAccount = await _accountRepository.getCurrentAccount();
|
||||
|
||||
@@ -33,16 +33,16 @@ class LogoutOidcInteractor {
|
||||
});
|
||||
log('LogoutOidcInteractor::execute(): statusSuccess: $result');
|
||||
if (result) {
|
||||
return Right<Failure, Success>(LogoutOidcSuccess());
|
||||
yield Right<Failure, Success>(LogoutOidcSuccess());
|
||||
} else {
|
||||
return Left<Failure, Success>(LogoutOidcFailure(null));
|
||||
yield Left<Failure, Success>(LogoutOidcFailure(null));
|
||||
}
|
||||
} else {
|
||||
return Left<Failure, Success>(LogoutOidcFailure(NotFoundAuthenticatedAccountException()));
|
||||
yield Left<Failure, Success>(LogoutOidcFailure(NotFoundAuthenticatedAccountException()));
|
||||
}
|
||||
} catch (e) {
|
||||
log('LogoutOidcInteractor::execute(): EXCEPTION: $e');
|
||||
return Left<Failure, Success>(LogoutOidcFailure(e));
|
||||
yield Left<Failure, Success>(LogoutOidcFailure(e));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -13,6 +13,7 @@ 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/delete_authority_oidc_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/get_user_profile_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/presentation/manage_account_dashboard_controller.dart';
|
||||
@@ -30,7 +31,10 @@ class ManageAccountDashBoardBindings extends BaseBindings {
|
||||
|
||||
@override
|
||||
void bindingsController() {
|
||||
Get.lazyPut(() => ManageAccountDashBoardController(Get.find<LogoutOidcInteractor>()));
|
||||
Get.lazyPut(() => ManageAccountDashBoardController(
|
||||
Get.find<LogoutOidcInteractor>(),
|
||||
Get.find<DeleteAuthorityOidcInteractor>()
|
||||
));
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -56,6 +60,7 @@ class ManageAccountDashBoardBindings extends BaseBindings {
|
||||
Get.find<AccountRepository>(),
|
||||
Get.find<AuthenticationOIDCRepository>(),
|
||||
));
|
||||
Get.lazyPut(() => DeleteAuthorityOidcInteractor(Get.find<AuthenticationOIDCRepository>()));
|
||||
}
|
||||
|
||||
@override
|
||||
|
||||
@@ -8,6 +8,7 @@ import 'package:jmap_dart_client/jmap/core/session/session.dart';
|
||||
import 'package:model/model.dart';
|
||||
import 'package:package_info_plus/package_info_plus.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/mailbox_dashboard/domain/state/get_user_profile_state.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/domain/usecases/log_out_oidc_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/presentation/model/account_menu_item.dart';
|
||||
@@ -29,8 +30,9 @@ class ManageAccountDashBoardController extends ReloadableController {
|
||||
Session? sessionCurrent;
|
||||
|
||||
ManageAccountDashBoardController(
|
||||
LogoutOidcInteractor logoutOidcInteractor
|
||||
) : super(logoutOidcInteractor);
|
||||
LogoutOidcInteractor logoutOidcInteractor,
|
||||
DeleteAuthorityOidcInteractor deleteAuthorityOidcInteractor
|
||||
) : super(logoutOidcInteractor, deleteAuthorityOidcInteractor);
|
||||
|
||||
@override
|
||||
void onReady() {
|
||||
|
||||
@@ -47,7 +47,7 @@ class LocalBindings extends Bindings {
|
||||
Get.find<EmailCacheClient>(),
|
||||
Get.find<RecentSearchCacheClient>(),
|
||||
Get.find<TokenOidcCacheClient>(),
|
||||
Get.find<AccountCacheClient>()
|
||||
Get.find<AccountCacheClient>(),
|
||||
));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user