TF-1074 Handle go to path /login

This commit is contained in:
dab246
2022-10-25 14:25:12 +07:00
committed by Dat H. Pham
parent a32bfe35de
commit 0ee990262f
21 changed files with 315 additions and 171 deletions
@@ -86,10 +86,10 @@ abstract class ReloadableController extends BaseController {
* trigger reload by getting Credential again then setting up Interceptor and retrieving session * trigger reload by getting Credential again then setting up Interceptor and retrieving session
* */ * */
void reload() { void reload() {
_getAuthenticatedAccountAction(); getAuthenticatedAccountAction();
} }
void _getAuthenticatedAccountAction() { void getAuthenticatedAccountAction() {
consumeState(_getAuthenticatedAccountInteractor.execute()); consumeState(_getAuthenticatedAccountInteractor.execute());
} }
@@ -144,7 +144,11 @@ class HomeController extends BaseController {
void _handleFailureViewState(Failure failure) async { void _handleFailureViewState(Failure failure) async {
logError('HomeController::_handleFailureViewState(): ${failure.toString()}'); logError('HomeController::_handleFailureViewState(): ${failure.toString()}');
_clearAllCacheAndCredential(); if (failure is CheckOIDCIsAvailableFailure) {
_goToLogin(arguments: LoginArguments(LoginFormType.credentialForm));
} else {
_clearAllCacheAndCredential();
}
} }
void _handleSuccessViewState(Success success) { void _handleSuccessViewState(Success success) {
@@ -153,6 +157,8 @@ class HomeController extends BaseController {
_goToSessionWithTokenOidc(success); _goToSessionWithTokenOidc(success);
} else if (success is GetCredentialViewState) { } else if (success is GetCredentialViewState) {
_goToSessionWithBasicAuth(success); _goToSessionWithBasicAuth(success);
} else if (success is CheckOIDCIsAvailableSuccess) {
_goToLogin(arguments: LoginArguments(LoginFormType.ssoForm));
} }
} }
@@ -176,15 +182,10 @@ class HomeController extends BaseController {
void _checkOIDCIsAvailable() async { void _checkOIDCIsAvailable() async {
final baseUri = _parseUri(AppConfig.baseUrl); final baseUri = _parseUri(AppConfig.baseUrl);
log('LoginController::_checkOIDCIsAvailable(): baseUri: $baseUri');
if (baseUri != null) { if (baseUri != null) {
await _checkOIDCIsAvailableInteractor consumeState(_checkOIDCIsAvailableInteractor.execute(OIDCRequest(
.execute(OIDCRequest(baseUrl: baseUri.toString(), resourceUrl: baseUri.origin)) baseUrl: baseUri.toString(),
.then((response) => response.fold( resourceUrl: baseUri.origin)));
(failure) => _goToLogin(arguments: LoginArguments(LoginFormType.credentialForm)),
(success) => success is CheckOIDCIsAvailableSuccess
? _goToLogin(arguments: LoginArguments(LoginFormType.ssoForm))
: _goToLogin(arguments: LoginArguments(LoginFormType.credentialForm))));
} else { } else {
_goToLogin(arguments: LoginArguments(LoginFormType.credentialForm)); _goToLogin(arguments: LoginArguments(LoginFormType.credentialForm));
} }
@@ -2,6 +2,14 @@
import 'package:core/presentation/state/failure.dart'; import 'package:core/presentation/state/failure.dart';
import 'package:core/presentation/state/success.dart'; import 'package:core/presentation/state/success.dart';
class AuthenticateOidcOnBrowserLoading extends LoadingState {
AuthenticateOidcOnBrowserLoading();
@override
List<Object> get props => [];
}
class AuthenticateOidcOnBrowserSuccess extends UIState { class AuthenticateOidcOnBrowserSuccess extends UIState {
AuthenticateOidcOnBrowserSuccess(); AuthenticateOidcOnBrowserSuccess();
@@ -1,17 +1,24 @@
import 'package:core/core.dart'; import 'package:core/core.dart';
import 'package:model/model.dart'; import 'package:model/model.dart';
class AuthenticationUserViewState extends UIState { class AuthenticationUserLoading extends LoadingState {
AuthenticationUserLoading();
@override
List<Object> get props => [];
}
class AuthenticationUserSuccess extends UIState {
final UserProfile userProfile; final UserProfile userProfile;
AuthenticationUserViewState(this.userProfile); AuthenticationUserSuccess(this.userProfile);
@override @override
List<Object> get props => [userProfile]; List<Object> get props => [userProfile];
} }
class AuthenticationUserFailure extends FeatureFailure { class AuthenticationUserFailure extends FeatureFailure {
final exception; final dynamic exception;
AuthenticationUserFailure(this.exception); AuthenticationUserFailure(this.exception);
@@ -1,6 +1,15 @@
import 'package:core/core.dart'; import 'package:core/presentation/state/failure.dart';
import 'package:core/presentation/state/success.dart';
import 'package:model/oidc/response/oidc_response.dart'; import 'package:model/oidc/response/oidc_response.dart';
class CheckOIDCIsAvailableLoading extends LoadingState {
CheckOIDCIsAvailableLoading();
@override
List<Object> get props => [];
}
class CheckOIDCIsAvailableSuccess extends UIState { class CheckOIDCIsAvailableSuccess extends UIState {
final OIDCResponse oidcResponse; final OIDCResponse oidcResponse;
@@ -2,6 +2,14 @@
import 'package:core/presentation/state/failure.dart'; import 'package:core/presentation/state/failure.dart';
import 'package:core/presentation/state/success.dart'; import 'package:core/presentation/state/success.dart';
class GetAuthenticationInfoLoading extends LoadingState {
GetAuthenticationInfoLoading();
@override
List<Object> get props => [];
}
class GetAuthenticationInfoSuccess extends UIState { class GetAuthenticationInfoSuccess extends UIState {
GetAuthenticationInfoSuccess(); GetAuthenticationInfoSuccess();
@@ -1,6 +1,14 @@
import 'package:core/core.dart'; import 'package:core/core.dart';
import 'package:model/model.dart'; import 'package:model/model.dart';
class GetOIDCConfigurationLoading extends LoadingState {
GetOIDCConfigurationLoading();
@override
List<Object> get props => [];
}
class GetOIDCConfigurationSuccess extends UIState { class GetOIDCConfigurationSuccess extends UIState {
final OIDCConfiguration oidcConfiguration; final OIDCConfiguration oidcConfiguration;
@@ -0,0 +1,29 @@
import 'package:core/presentation/state/failure.dart';
import 'package:core/presentation/state/success.dart';
import 'package:model/oidc/response/oidc_response.dart';
class GetOIDCIsAvailableLoading extends LoadingState {
GetOIDCIsAvailableLoading();
@override
List<Object> get props => [];
}
class GetOIDCIsAvailableSuccess extends UIState {
final OIDCResponse oidcResponse;
GetOIDCIsAvailableSuccess(this.oidcResponse);
@override
List<Object> get props => [oidcResponse];
}
class GetOIDCIsAvailableFailure extends FeatureFailure {
final dynamic exception;
GetOIDCIsAvailableFailure(this.exception);
@override
List<Object> get props => [exception];
}
@@ -2,6 +2,14 @@ import 'package:core/presentation/state/failure.dart';
import 'package:core/presentation/state/success.dart'; import 'package:core/presentation/state/success.dart';
import 'package:model/oidc/oidc_configuration.dart'; import 'package:model/oidc/oidc_configuration.dart';
class GetStoredOidcConfigurationLoading extends LoadingState {
GetStoredOidcConfigurationLoading();
@override
List<Object?> get props => [];
}
class GetStoredOidcConfigurationSuccess extends UIState { class GetStoredOidcConfigurationSuccess extends UIState {
final OIDCConfiguration oidcConfiguration; final OIDCConfiguration oidcConfiguration;
@@ -1,14 +1,23 @@
import 'package:core/core.dart'; import 'package:core/core.dart';
import 'package:model/model.dart'; import 'package:model/model.dart';
class GetTokenOIDCLoading extends LoadingState {
GetTokenOIDCLoading();
@override
List<Object> get props => [];
}
class GetTokenOIDCSuccess extends UIState { class GetTokenOIDCSuccess extends UIState {
final TokenOIDC tokenOIDC; final TokenOIDC tokenOIDC;
final OIDCConfiguration configuration;
GetTokenOIDCSuccess(this.tokenOIDC); GetTokenOIDCSuccess(this.tokenOIDC, this.configuration);
@override @override
List<Object> get props => [tokenOIDC]; List<Object> get props => [tokenOIDC, configuration];
} }
class GetTokenOIDCFailure extends FeatureFailure { class GetTokenOIDCFailure extends FeatureFailure {
@@ -14,17 +14,18 @@ class AuthenticateOidcOnBrowserInteractor {
AuthenticateOidcOnBrowserInteractor(this.authenticationOIDCRepository); AuthenticateOidcOnBrowserInteractor(this.authenticationOIDCRepository);
Future<Either<Failure, Success>> execute(Uri baseUrl, OIDCConfiguration config) async { Stream<Either<Failure, Success>> execute(Uri baseUrl, OIDCConfiguration config) async* {
try { try {
yield Right<Failure, Success>(AuthenticateOidcOnBrowserLoading());
await authenticationOIDCRepository.authenticateOidcOnBrowser( await authenticationOIDCRepository.authenticateOidcOnBrowser(
config.clientId, config.clientId,
config.redirectUrl, config.redirectUrl,
config.discoveryUrl, config.discoveryUrl,
config.scopes); config.scopes);
return Right<Failure, Success>(AuthenticateOidcOnBrowserSuccess()); yield Right<Failure, Success>(AuthenticateOidcOnBrowserSuccess());
} catch (e) { } catch (e) {
logError('AuthenticateOidcOnBrowserInteractor::execute(): $e'); logError('AuthenticateOidcOnBrowserInteractor::execute(): $e');
return Left<Failure, Success>(AuthenticateOidcOnBrowserFailure(e)); yield Left<Failure, Success>(AuthenticateOidcOnBrowserFailure(e));
} }
} }
} }
@@ -12,11 +12,15 @@ class AuthenticationInteractor {
final CredentialRepository credentialRepository; final CredentialRepository credentialRepository;
final AccountRepository _accountRepository; final AccountRepository _accountRepository;
AuthenticationInteractor(this.authenticationRepository, this.credentialRepository, this._accountRepository); AuthenticationInteractor(
this.authenticationRepository,
this.credentialRepository,
this._accountRepository
);
Future<Either<Failure, Success>> execute(Uri baseUrl, UserName userName, Password password) async { Stream<Either<Failure, Success>> execute(Uri baseUrl, UserName userName, Password password) async* {
try { try {
log('AuthenticationInteractor::execute(): $_accountRepository'); yield Right(AuthenticationUserLoading());
final user = await authenticationRepository.authenticationUser(baseUrl, userName, password); final user = await authenticationRepository.authenticationUser(baseUrl, userName, password);
await Future.wait([ await Future.wait([
credentialRepository.saveBaseUrl(baseUrl), credentialRepository.saveBaseUrl(baseUrl),
@@ -28,10 +32,10 @@ class AuthenticationInteractor {
isSelected: true isSelected: true
)) ))
]); ]);
return Right(AuthenticationUserViewState(user)); yield Right(AuthenticationUserSuccess(user));
} catch (e) { } catch (e) {
logError('AuthenticationInteractor::execute(): $e'); logError('AuthenticationInteractor::execute(): $e');
return Left(AuthenticationUserFailure(e)); yield Left(AuthenticationUserFailure(e));
} }
} }
} }
@@ -1,6 +1,7 @@
import 'package:core/core.dart'; import 'package:core/presentation/state/failure.dart';
import 'package:core/presentation/state/success.dart';
import 'package:dartz/dartz.dart'; import 'package:dartz/dartz.dart';
import 'package:model/model.dart'; import 'package:model/oidc/request/oidc_request.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/state/check_oidc_is_available_state.dart'; import 'package:tmail_ui_user/features/login/domain/state/check_oidc_is_available_state.dart';
@@ -9,14 +10,13 @@ class CheckOIDCIsAvailableInteractor {
CheckOIDCIsAvailableInteractor(this._oidcRepository); CheckOIDCIsAvailableInteractor(this._oidcRepository);
Future<Either<Failure, Success>> execute(OIDCRequest oidcRequest) async { Stream<Either<Failure, Success>> execute(OIDCRequest oidcRequest) async* {
try { try {
yield Right<Failure, Success>(CheckOIDCIsAvailableLoading());
final result = await _oidcRepository.checkOIDCIsAvailable(oidcRequest); final result = await _oidcRepository.checkOIDCIsAvailable(oidcRequest);
log('CheckOIDCIsAvailableInteractor::execute(): result: $result'); yield Right<Failure, Success>(CheckOIDCIsAvailableSuccess(result));
return Right<Failure, Success>(CheckOIDCIsAvailableSuccess(result));
} catch (e) { } catch (e) {
log('CheckOIDCIsAvailableInteractor::execute(): ERROR: $e'); yield Left<Failure, Success>(CheckOIDCIsAvailableFailure(e));
return Left<Failure, Success>(CheckOIDCIsAvailableFailure(e));
} }
} }
} }
@@ -10,18 +10,19 @@ class GetAuthenticationInfoInteractor {
GetAuthenticationInfoInteractor(this._oidcRepository); GetAuthenticationInfoInteractor(this._oidcRepository);
Future<Either<Failure, Success>> execute() async { Stream<Either<Failure, Success>> execute() async* {
try { try {
yield Right<Failure, Success>(GetAuthenticationInfoLoading());
final result = await _oidcRepository.getAuthenticationInfo(); final result = await _oidcRepository.getAuthenticationInfo();
log('GetAuthenticationInfoInteractor::execute(): result: $result'); log('GetAuthenticationInfoInteractor::execute(): result: $result');
if (result?.isNotEmpty == true) { if (result?.isNotEmpty == true) {
return Right<Failure, Success>(GetAuthenticationInfoSuccess()); yield Right<Failure, Success>(GetAuthenticationInfoSuccess());
} else { } else {
return Left<Failure, Success>(GetAuthenticationInfoFailure(null)); yield Left<Failure, Success>(GetAuthenticationInfoFailure(null));
} }
} catch (e) { } catch (e) {
log('GetAuthenticationInfoInteractor::execute(): ERROR: $e'); log('GetAuthenticationInfoInteractor::execute(): ERROR: $e');
return Left<Failure, Success>(GetAuthenticationInfoFailure(e)); yield Left<Failure, Success>(GetAuthenticationInfoFailure(e));
} }
} }
} }
@@ -1,6 +1,8 @@
import 'package:core/core.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:dartz/dartz.dart';
import 'package:model/model.dart'; import 'package:model/oidc/response/oidc_response.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/state/get_oidc_configuration_state.dart'; import 'package:tmail_ui_user/features/login/domain/state/get_oidc_configuration_state.dart';
@@ -9,15 +11,15 @@ class GetOIDCConfigurationInteractor {
GetOIDCConfigurationInteractor(this._oidcRepository); GetOIDCConfigurationInteractor(this._oidcRepository);
Future<Either<Failure, Success>> execute(OIDCResponse oidcResponse) async { Stream<Either<Failure, Success>> execute(OIDCResponse oidcResponse) async* {
try { try {
yield Right<Failure, Success>(GetOIDCConfigurationLoading());
final oidcConfiguration = await _oidcRepository.getOIDCConfiguration(oidcResponse); final oidcConfiguration = await _oidcRepository.getOIDCConfiguration(oidcResponse);
log('GetOIDCConfigurationInteractor::execute(): oidcConfiguration: $oidcConfiguration');
await _oidcRepository.persistAuthorityOidc(oidcConfiguration.authority); await _oidcRepository.persistAuthorityOidc(oidcConfiguration.authority);
return Right<Failure, Success>(GetOIDCConfigurationSuccess(oidcConfiguration)); yield Right<Failure, Success>(GetOIDCConfigurationSuccess(oidcConfiguration));
} catch (e) { } catch (e) {
log('GetOIDCConfigurationInteractor::execute(): ERROR: $e'); log('GetOIDCConfigurationInteractor::execute(): ERROR: $e');
return Left<Failure, Success>(GetOIDCConfigurationFailure(e)); yield Left<Failure, Success>(GetOIDCConfigurationFailure(e));
} }
} }
} }
@@ -0,0 +1,22 @@
import 'package:core/presentation/state/failure.dart';
import 'package:core/presentation/state/success.dart';
import 'package:dartz/dartz.dart';
import 'package:model/oidc/request/oidc_request.dart';
import 'package:tmail_ui_user/features/login/domain/repository/authentication_oidc_repository.dart';
import 'package:tmail_ui_user/features/login/domain/state/get_oidc_is_available_state.dart';
class GetOIDCIsAvailableInteractor {
final AuthenticationOIDCRepository _oidcRepository;
GetOIDCIsAvailableInteractor(this._oidcRepository);
Stream<Either<Failure, Success>> execute(OIDCRequest oidcRequest) async* {
try {
yield Right<Failure, Success>(GetOIDCIsAvailableLoading());
final result = await _oidcRepository.checkOIDCIsAvailable(oidcRequest);
yield Right<Failure, Success>(GetOIDCIsAvailableSuccess(result));
} catch (e) {
yield Left<Failure, Success>(GetOIDCIsAvailableFailure(e));
}
}
}
@@ -10,14 +10,14 @@ class GetStoredOidcConfigurationInteractor {
GetStoredOidcConfigurationInteractor(this._authenticationOIDCRepository); GetStoredOidcConfigurationInteractor(this._authenticationOIDCRepository);
Future<Either<Failure, Success>> execute() async { Stream<Either<Failure, Success>> execute() async* {
try { try {
yield Right(GetStoredOidcConfigurationLoading());
final config = await _authenticationOIDCRepository.getStoredOidcConfiguration(); final config = await _authenticationOIDCRepository.getStoredOidcConfiguration();
log('GetStoredOidcConfigurationInteractor::execute(): oidcConfiguration: $config'); yield Right(GetStoredOidcConfigurationSuccess(config));
return Right(GetStoredOidcConfigurationSuccess(config));
} catch (e) { } catch (e) {
log('GetStoredOidcConfigurationInteractor::execute(): $e'); log('GetStoredOidcConfigurationInteractor::execute(): $e');
return Left(GetStoredOidcConfigurationFailure(e)); yield Left(GetStoredOidcConfigurationFailure(e));
} }
} }
} }
@@ -21,11 +21,14 @@ class GetTokenOIDCInteractor {
GetTokenOIDCInteractor(this._credentialRepository, this.authenticationOIDCRepository, this._accountRepository); GetTokenOIDCInteractor(this._credentialRepository, this.authenticationOIDCRepository, this._accountRepository);
Future<Either<Failure, Success>> execute(Uri baseUrl, OIDCConfiguration config) async { Stream<Either<Failure, Success>> execute(Uri baseUrl, OIDCConfiguration config) async* {
try { try {
log('GetTokenOIDCInteractor::execute(): baseUrl: $baseUrl'); yield Right<Failure, Success>(GetTokenOIDCLoading());
final tokenOIDC = await authenticationOIDCRepository final tokenOIDC = await authenticationOIDCRepository.getTokenOIDC(
.getTokenOIDC(config.clientId, config.redirectUrl, config.discoveryUrl, config.scopes); config.clientId,
config.redirectUrl,
config.discoveryUrl,
config.scopes);
await Future.wait([ await Future.wait([
_credentialRepository.saveBaseUrl(baseUrl), _credentialRepository.saveBaseUrl(baseUrl),
_accountRepository.setCurrentAccount(Account( _accountRepository.setCurrentAccount(Account(
@@ -35,10 +38,10 @@ class GetTokenOIDCInteractor {
authenticationOIDCRepository.persistTokenOIDC(tokenOIDC), authenticationOIDCRepository.persistTokenOIDC(tokenOIDC),
authenticationOIDCRepository.persistAuthorityOidc(config.authority), authenticationOIDCRepository.persistAuthorityOidc(config.authority),
]); ]);
return Right<Failure, Success>(GetTokenOIDCSuccess(tokenOIDC)); yield Right<Failure, Success>(GetTokenOIDCSuccess(tokenOIDC, config));
} catch (e) { } catch (e) {
logError('GetTokenOIDCInteractor::execute(): $e'); logError('GetTokenOIDCInteractor::execute(): $e');
return Left<Failure, Success>(GetTokenOIDCFailure(e)); yield Left<Failure, Success>(GetTokenOIDCFailure(e));
} }
} }
} }
@@ -33,15 +33,21 @@ import 'package:tmail_ui_user/features/login/domain/repository/login_username_re
import 'package:tmail_ui_user/features/login/domain/usecases/authenticate_oidc_on_browser_interactor.dart'; import 'package:tmail_ui_user/features/login/domain/usecases/authenticate_oidc_on_browser_interactor.dart';
import 'package:tmail_ui_user/features/login/domain/usecases/authentication_user_interactor.dart'; import 'package:tmail_ui_user/features/login/domain/usecases/authentication_user_interactor.dart';
import 'package:tmail_ui_user/features/login/domain/usecases/check_oidc_is_available_interactor.dart'; import 'package:tmail_ui_user/features/login/domain/usecases/check_oidc_is_available_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_all_recent_login_url_on_mobile_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_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_authentication_info_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_oidc_configuration_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';
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_stored_oidc_configuration_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_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/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/main/bindings/network/binding_tag.dart'; import 'package:tmail_ui_user/main/bindings/network/binding_tag.dart';
class LoginBindings extends BaseBindings { class LoginBindings extends BaseBindings {
@@ -49,11 +55,15 @@ class LoginBindings extends BaseBindings {
@override @override
void bindingsController() { void bindingsController() {
Get.lazyPut(() => LoginController( Get.lazyPut(() => LoginController(
Get.find<LogoutOidcInteractor>(),
Get.find<DeleteAuthorityOidcInteractor>(),
Get.find<GetAuthenticatedAccountInteractor>(),
Get.find<AuthenticationInteractor>(), Get.find<AuthenticationInteractor>(),
Get.find<DynamicUrlInterceptors>(), Get.find<DynamicUrlInterceptors>(),
Get.find<AuthorizationInterceptors>(), Get.find<AuthorizationInterceptors>(),
Get.find<AuthorizationInterceptors>(tag: BindingTag.isolateTag), Get.find<AuthorizationInterceptors>(tag: BindingTag.isolateTag),
Get.find<CheckOIDCIsAvailableInteractor>(), Get.find<CheckOIDCIsAvailableInteractor>(),
Get.find<GetOIDCIsAvailableInteractor>(),
Get.find<GetOIDCConfigurationInteractor>(), Get.find<GetOIDCConfigurationInteractor>(),
Get.find<GetTokenOIDCInteractor>(), Get.find<GetTokenOIDCInteractor>(),
Get.find<AuthenticateOidcOnBrowserInteractor>(), Get.find<AuthenticateOidcOnBrowserInteractor>(),
@@ -98,6 +108,23 @@ class LoginBindings extends BaseBindings {
@override @override
void bindingsInteractor() { void bindingsInteractor() {
Get.lazyPut(() => LogoutOidcInteractor(
Get.find<AccountRepository>(),
Get.find<AuthenticationOIDCRepository>(),
));
Get.lazyPut(() => DeleteAuthorityOidcInteractor(
Get.find<AuthenticationOIDCRepository>(),
Get.find<CredentialRepository>())
);
Get.lazyPut(() => GetStoredTokenOidcInteractor(
Get.find<AuthenticationOIDCRepository>(),
Get.find<CredentialRepository>(),
));
Get.lazyPut(() => GetAuthenticatedAccountInteractor(
Get.find<AccountRepository>(),
Get.find<GetCredentialInteractor>(),
Get.find<GetStoredTokenOidcInteractor>(),
));
Get.lazyPut(() => AuthenticationInteractor( Get.lazyPut(() => AuthenticationInteractor(
Get.find<AuthenticationRepository>(), Get.find<AuthenticationRepository>(),
Get.find<CredentialRepository>(), Get.find<CredentialRepository>(),
@@ -106,6 +133,9 @@ class LoginBindings extends BaseBindings {
Get.lazyPut(() => CheckOIDCIsAvailableInteractor( Get.lazyPut(() => CheckOIDCIsAvailableInteractor(
Get.find<AuthenticationOIDCRepository>(), Get.find<AuthenticationOIDCRepository>(),
)); ));
Get.lazyPut(() => GetOIDCIsAvailableInteractor(
Get.find<AuthenticationOIDCRepository>(),
));
Get.lazyPut(() => GetOIDCConfigurationInteractor( Get.lazyPut(() => GetOIDCConfigurationInteractor(
Get.find<AuthenticationOIDCRepository>(), Get.find<AuthenticationOIDCRepository>(),
)); ));
@@ -142,7 +172,7 @@ class LoginBindings extends BaseBindings {
Get.lazyPut<AccountRepository>(() => Get.find<AccountRepositoryImpl>()); Get.lazyPut<AccountRepository>(() => Get.find<AccountRepositoryImpl>());
Get.lazyPut<LoginUrlRepository>(() => Get.find<LoginUrlRepositoryImpl>()); Get.lazyPut<LoginUrlRepository>(() => Get.find<LoginUrlRepositoryImpl>());
Get.lazyPut<LoginUsernameRepository>(() => Get.find<LoginUsernameRepositoryImpl>()); Get.lazyPut<LoginUsernameRepository>(() => Get.find<LoginUsernameRepositoryImpl>());
} }
@override @override
@@ -1,10 +1,21 @@
import 'package:core/core.dart'; 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';
import 'package:core/utils/app_logger.dart';
import 'package:core/utils/build_utils.dart';
import 'package:dartz/dartz.dart'; import 'package:dartz/dartz.dart';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:model/model.dart'; import 'package:jmap_dart_client/jmap/core/session/session.dart';
import 'package:tmail_ui_user/features/base/base_controller.dart'; import 'package:model/account/password.dart';
import 'package:model/account/user_name.dart';
import 'package:model/oidc/oidc_configuration.dart';
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/login/data/network/config/authorization_interceptors.dart'; import 'package:tmail_ui_user/features/login/data/network/config/authorization_interceptors.dart';
import 'package:tmail_ui_user/features/login/domain/model/recent_login_url.dart'; import 'package:tmail_ui_user/features/login/domain/model/recent_login_url.dart';
import 'package:tmail_ui_user/features/login/domain/model/recent_login_username.dart'; import 'package:tmail_ui_user/features/login/domain/model/recent_login_username.dart';
@@ -15,15 +26,19 @@ import 'package:tmail_ui_user/features/login/domain/state/get_all_recent_login_u
import 'package:tmail_ui_user/features/login/domain/state/get_all_recent_login_username_state.dart'; import 'package:tmail_ui_user/features/login/domain/state/get_all_recent_login_username_state.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_authentication_info_state.dart';
import 'package:tmail_ui_user/features/login/domain/state/get_oidc_configuration_state.dart'; import 'package:tmail_ui_user/features/login/domain/state/get_oidc_configuration_state.dart';
import 'package:tmail_ui_user/features/login/domain/state/get_oidc_is_available_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_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/state/get_token_oidc_state.dart';
import 'package:tmail_ui_user/features/login/domain/usecases/authenticate_oidc_on_browser_interactor.dart'; import 'package:tmail_ui_user/features/login/domain/usecases/authenticate_oidc_on_browser_interactor.dart';
import 'package:tmail_ui_user/features/login/domain/usecases/authentication_user_interactor.dart'; import 'package:tmail_ui_user/features/login/domain/usecases/authentication_user_interactor.dart';
import 'package:tmail_ui_user/features/login/domain/usecases/check_oidc_is_available_interactor.dart'; import 'package:tmail_ui_user/features/login/domain/usecases/check_oidc_is_available_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_all_recent_login_url_on_mobile_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_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_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_configuration_interactor.dart';
import 'package:tmail_ui_user/features/login/domain/usecases/get_oidc_is_available_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_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/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';
@@ -31,18 +46,20 @@ import 'package:tmail_ui_user/features/login/domain/usecases/save_login_username
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';
import 'package:tmail_ui_user/features/manage_account/domain/usecases/log_out_oidc_interactor.dart';
import 'package:tmail_ui_user/features/network_status_handle/presentation/network_connnection_controller.dart'; import 'package:tmail_ui_user/features/network_status_handle/presentation/network_connnection_controller.dart';
import 'package:tmail_ui_user/main/routes/app_routes.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/routes/route_navigation.dart';
import 'package:tmail_ui_user/main/utils/app_config.dart'; import 'package:tmail_ui_user/main/utils/app_config.dart';
class LoginController extends BaseController { class LoginController extends ReloadableController {
final AuthenticationInteractor _authenticationInteractor; final AuthenticationInteractor _authenticationInteractor;
final DynamicUrlInterceptors _dynamicUrlInterceptors; final DynamicUrlInterceptors _dynamicUrlInterceptors;
final AuthorizationInterceptors _authorizationInterceptors; final AuthorizationInterceptors _authorizationInterceptors;
final AuthorizationInterceptors _authorizationIsolateInterceptors; final AuthorizationInterceptors _authorizationIsolateInterceptors;
final CheckOIDCIsAvailableInteractor _checkOIDCIsAvailableInteractor; final CheckOIDCIsAvailableInteractor _checkOIDCIsAvailableInteractor;
final GetOIDCIsAvailableInteractor _getOIDCIsAvailableInteractor;
final GetOIDCConfigurationInteractor _getOIDCConfigurationInteractor; final GetOIDCConfigurationInteractor _getOIDCConfigurationInteractor;
final GetTokenOIDCInteractor _getTokenOIDCInteractor; final GetTokenOIDCInteractor _getTokenOIDCInteractor;
final AuthenticateOidcOnBrowserInteractor _authenticateOidcOnBrowserInteractor; final AuthenticateOidcOnBrowserInteractor _authenticateOidcOnBrowserInteractor;
@@ -53,16 +70,21 @@ class LoginController extends BaseController {
final SaveLoginUsernameOnMobileInteractor _saveLoginUsernameOnMobileInteractor; final SaveLoginUsernameOnMobileInteractor _saveLoginUsernameOnMobileInteractor;
final GetAllRecentLoginUsernameOnMobileInteractor _getAllRecentLoginUsernameOnMobileInteractor; final GetAllRecentLoginUsernameOnMobileInteractor _getAllRecentLoginUsernameOnMobileInteractor;
final TextEditingController urlInputController = TextEditingController(); final TextEditingController urlInputController = TextEditingController();
final TextEditingController usernameInputController = TextEditingController(); final TextEditingController usernameInputController = TextEditingController();
final NetworkConnectionController networkConnectionController = Get.find<NetworkConnectionController>(); final NetworkConnectionController networkConnectionController = Get.find<NetworkConnectionController>();
LoginController( LoginController(
LogoutOidcInteractor logoutOidcInteractor,
DeleteAuthorityOidcInteractor deleteAuthorityOidcInteractor,
GetAuthenticatedAccountInteractor getAuthenticatedAccountInteractor,
this._authenticationInteractor, this._authenticationInteractor,
this._dynamicUrlInterceptors, this._dynamicUrlInterceptors,
this._authorizationInterceptors, this._authorizationInterceptors,
this._authorizationIsolateInterceptors, this._authorizationIsolateInterceptors,
this._checkOIDCIsAvailableInteractor, this._checkOIDCIsAvailableInteractor,
this._getOIDCIsAvailableInteractor,
this._getOIDCConfigurationInteractor, this._getOIDCConfigurationInteractor,
this._getTokenOIDCInteractor, this._getTokenOIDCInteractor,
this._authenticateOidcOnBrowserInteractor, this._authenticateOidcOnBrowserInteractor,
@@ -73,6 +95,9 @@ class LoginController extends BaseController {
this._saveLoginUsernameOnMobileInteractor, this._saveLoginUsernameOnMobileInteractor,
this._getAllRecentLoginUsernameOnMobileInteractor, this._getAllRecentLoginUsernameOnMobileInteractor,
); );
) : super(logoutOidcInteractor,
deleteAuthorityOidcInteractor,
getAuthenticatedAccountInteractor);
var loginState = LoginState(Right(LoginInitAction())).obs; var loginState = LoginState(Right(LoginInitAction())).obs;
final loginFormType = LoginFormType.baseUrlForm.obs; final loginFormType = LoginFormType.baseUrlForm.obs;
@@ -102,39 +127,80 @@ class LoginController extends BaseController {
@override @override
void onReady() { void onReady() {
super.onReady();
if (BuildUtils.isWeb) { if (BuildUtils.isWeb) {
final arguments = Get.arguments; final arguments = Get.arguments;
if (arguments is LoginArguments) { if (arguments is LoginArguments) {
loginFormType.value = arguments.loginFormType; loginFormType.value = arguments.loginFormType;
_checkOIDCIsAvailable();
} else { } else {
_getAuthenticationInfo(); _getAuthenticationInfo();
} }
} }
super.onReady();
} }
void _getAuthenticationInfo() async { @override
await _getAuthenticationInfoInteractor.execute() void onData(Either<Failure, Success> newState) {
.then((result) => result.fold( super.onData(newState);
(failure) => _checkOIDCIsAvailable(), viewState.value.fold(
(success) { (failure) {
if (success is GetAuthenticationInfoSuccess) { if (failure is GetAuthenticationInfoFailure) {
_getStoredOidcConfiguration(); getAuthenticatedAccountAction();
} else { } else if (failure is CheckOIDCIsAvailableFailure ||
_checkOIDCIsAvailable(); failure is GetStoredOidcConfigurationFailure) {
} _showFormLoginWithCredentialAction();
})); } else if (failure is GetOIDCIsAvailableFailure) {
loginState.value = LoginState(Left(LoginSSONotAvailableAction()));
_showFormLoginWithCredentialAction();
} else if (failure is AuthenticationUserFailure) {
_loginFailureAction(failure);
} else if (failure is GetOIDCConfigurationFailure ||
failure is GetTokenOIDCFailure ||
failure is AuthenticateOidcOnBrowserFailure) {
loginState.value = LoginState(Left(failure));
}
},
(success) {
if (success is GetAuthenticationInfoSuccess) {
_getStoredOidcConfiguration();
} else if (success is GetStoredOidcConfigurationSuccess) {
_getTokenOIDCAction(success.oidcConfiguration);
} else if (success is CheckOIDCIsAvailableSuccess) {
_showFormLoginWithSSOAction(success);
} else if (success is GetOIDCIsAvailableSuccess) {
loginState.value = LoginState(Right(success));
_oidcResponse = success.oidcResponse;
_getOIDCConfiguration();
} else if (success is GetOIDCConfigurationSuccess) {
_getOIDCConfigurationSuccess(success);
} else if (success is GetTokenOIDCSuccess) {
_getTokenOIDCSuccess(success);
} else if (success is AuthenticationUserSuccess) {
_loginSuccessAction(success);
} else if (success is GetAuthenticationInfoLoading ||
success is CheckOIDCIsAvailableLoading ||
success is GetStoredOidcConfigurationLoading ||
success is GetOIDCConfigurationLoading ||
success is GetTokenOIDCLoading ||
success is AuthenticationUserLoading ||
success is GetOIDCIsAvailableLoading) {
loginState.value = LoginState(Right(LoginLoadingAction()));
}
}
);
} }
void _getStoredOidcConfiguration() async { @override
await _getStoredOidcConfigurationInteractor.execute() void handleReloaded(Session session) {
.then((result) => result.fold( pushAndPop(AppRoutes.dashboard, arguments: session);
(failure) => {}, }
(success) {
if (success is GetStoredOidcConfigurationSuccess) { void _getAuthenticationInfo() {
_getTokenOIDCAction(success.oidcConfiguration); consumeState(_getAuthenticationInfoInteractor.execute());
} }
}));
void _getStoredOidcConfiguration() {
consumeState(_getStoredOidcConfigurationInteractor.execute());
} }
void handleNextInUrlInputFormPress() { void handleNextInUrlInputFormPress() {
@@ -142,21 +208,14 @@ class LoginController extends BaseController {
_checkOIDCIsAvailable(); _checkOIDCIsAvailable();
} }
void _checkOIDCIsAvailable() async { void _checkOIDCIsAvailable() {
final baseUri = BuildUtils.isWeb ? _parseUri(AppConfig.baseUrl) : _parseUri(_urlText); final baseUri = BuildUtils.isWeb ? _parseUri(AppConfig.baseUrl) : _parseUri(_urlText);
log('LoginController::_checkOIDCIsAvailable(): baseUri: $baseUri');
if (baseUri == null) { if (baseUri == null) {
loginState.value = LoginState(Left(LoginMissUrlAction())); loginState.value = LoginState(Left(LoginMissUrlAction()));
} else { } else {
loginState.value = LoginState(Right(LoginLoadingAction())); consumeState(_checkOIDCIsAvailableInteractor.execute(OIDCRequest(
log('LoginController::_checkOIDCIsAvailable(): origin: + ${baseUri.origin}'); baseUrl: baseUri.toString(),
await _checkOIDCIsAvailableInteractor resourceUrl: baseUri.origin)));
.execute(OIDCRequest(baseUrl: baseUri.toString(), resourceUrl: baseUri.origin))
.then((response) => response.fold(
(failure) => _showFormLoginWithCredentialAction(),
(success) => success is CheckOIDCIsAvailableSuccess
? _showFormLoginWithSSOAction(success)
: _showFormLoginWithCredentialAction()));
} }
} }
@@ -172,7 +231,6 @@ class LoginController extends BaseController {
} }
void _showFormLoginWithCredentialAction() { void _showFormLoginWithCredentialAction() {
log('LoginController::_showFormLoginWithCredentialAction()');
loginState.value = LoginState(Right(InputUrlCompletion())); loginState.value = LoginState(Right(InputUrlCompletion()));
loginFormType.value = LoginFormType.credentialForm; loginFormType.value = LoginFormType.credentialForm;
} }
@@ -198,49 +256,22 @@ class LoginController extends BaseController {
} }
} }
void handleSSOPressed() async { void handleSSOPressed() {
final baseUri = _parseUri(AppConfig.baseUrl); final baseUri = _parseUri(AppConfig.baseUrl);
if (baseUri != null) { if (baseUri != null) {
log('LoginController::handleSSOPressed(): baseUri: ${baseUri.toString()}'); consumeState(_getOIDCIsAvailableInteractor.execute(OIDCRequest(
loginState.value = LoginState(Right(LoginLoadingAction())); baseUrl: baseUri.toString(),
await _checkOIDCIsAvailableInteractor resourceUrl: baseUri.origin)));
.execute(OIDCRequest(baseUrl: baseUri.toString(), resourceUrl: baseUri.origin)) } else {
.then((response) => response.fold( loginState.value = LoginState(Left(LoginCanNotAuthenticationSSOAction()));
(failure) => loginState.value = LoginState(Left(LoginSSONotAvailableAction())),
(success) {
if (success is CheckOIDCIsAvailableSuccess) {
loginState.value = LoginState(Right(success));
_oidcResponse = success.oidcResponse;
_getOIDCConfiguration();
} else {
loginState.value = LoginState(Left(LoginSSONotAvailableAction()));
}
}));
} }
} }
void _getOIDCConfiguration() async { void _getOIDCConfiguration() {
loginState.value = LoginState(Right(LoginLoadingAction()));
if (_oidcResponse != null) { if (_oidcResponse != null) {
await _getOIDCConfigurationInteractor.execute(_oidcResponse!) consumeState(_getOIDCConfigurationInteractor.execute(_oidcResponse!));
.then((response) => response.fold( } else {
(failure) { loginState.value = LoginState(Left(LoginCanNotAuthenticationSSOAction()));
if (failure is GetOIDCConfigurationFailure) {
loginState.value = LoginState(Left(failure));
} else {
loginState.value = LoginState(
Left(LoginCanNotVerifySSOConfigurationAction()));
}
},
(success) {
if (success is GetOIDCConfigurationSuccess) {
_getOIDCConfigurationSuccess(success);
} else {
loginState.value = LoginState(
Left(LoginCanNotVerifySSOConfigurationAction()));
}
}));
} }
} }
@@ -254,77 +285,41 @@ class LoginController extends BaseController {
} }
void _getTokenOIDCAction(OIDCConfiguration config) async { void _getTokenOIDCAction(OIDCConfiguration config) async {
loginState.value = LoginState(Right(LoginLoadingAction()));
final baseUri = kIsWeb ? _parseUri(AppConfig.baseUrl) : _parseUri(_urlText); final baseUri = kIsWeb ? _parseUri(AppConfig.baseUrl) : _parseUri(_urlText);
if (baseUri != null) { if (baseUri != null) {
await _getTokenOIDCInteractor consumeState(_getTokenOIDCInteractor.execute(baseUri, config));
.execute(baseUri, config)
.then((response) =>
response.fold(
(failure) {
if (failure is GetTokenOIDCFailure) {
loginState.value = LoginState(Left(failure));
} else {
loginState.value = LoginState(Left(LoginCanNotGetTokenAction()));
}
},
(success) {
if (success is GetTokenOIDCSuccess) {
_getTokenOIDCSuccess(success, config);
} else {
loginState.value = LoginState(Left(LoginCanNotGetTokenAction()));
}
}));
} else { } else {
loginState.value = LoginState(Left(LoginCanNotGetTokenAction())); loginState.value = LoginState(Left(LoginCanNotGetTokenAction()));
} }
} }
void _authenticateOidcOnBrowserAction(OIDCConfiguration config) async { void _authenticateOidcOnBrowserAction(OIDCConfiguration config) async {
loginState.value = LoginState(Right(LoginLoadingAction()));
final baseUri = _parseUri(AppConfig.baseUrl); final baseUri = _parseUri(AppConfig.baseUrl);
if (baseUri != null) { if (baseUri != null) {
await _authenticateOidcOnBrowserInteractor.execute(baseUri, config) consumeState(_authenticateOidcOnBrowserInteractor.execute(baseUri, config));
.then((response) => response.fold(
(failure) {
if (failure is AuthenticateOidcOnBrowserFailure) {
loginState.value = LoginState(Left(failure));
} else {
loginState.value = LoginState(Left(LoginCanNotAuthenticationSSOAction()));
}
},
(success) {
if (success is! AuthenticateOidcOnBrowserSuccess) {
loginState.value = LoginState(Left(LoginCanNotAuthenticationSSOAction()));
}
}));
} else { } else {
loginState.value = LoginState(Left(LoginCanNotAuthenticationSSOAction())); loginState.value = LoginState(Left(LoginCanNotAuthenticationSSOAction()));
} }
} }
void _getTokenOIDCSuccess(GetTokenOIDCSuccess success, OIDCConfiguration config) { void _getTokenOIDCSuccess(GetTokenOIDCSuccess success) {
log('LoginController::_getTokenOIDCSuccess(): ${success.tokenOIDC.toString()}'); log('LoginController::_getTokenOIDCSuccess(): ${success.tokenOIDC.toString()}');
loginState.value = LoginState(Right(success)); loginState.value = LoginState(Right(success));
_dynamicUrlInterceptors.changeBaseUrl(kIsWeb ? AppConfig.baseUrl : _urlText); _dynamicUrlInterceptors.changeBaseUrl(kIsWeb ? AppConfig.baseUrl : _urlText);
_authorizationInterceptors.setTokenAndAuthorityOidc( _authorizationInterceptors.setTokenAndAuthorityOidc(
newToken: success.tokenOIDC.toToken(), newToken: success.tokenOIDC.toToken(),
newConfig: config); newConfig: success.configuration);
_authorizationIsolateInterceptors.setTokenAndAuthorityOidc( _authorizationIsolateInterceptors.setTokenAndAuthorityOidc(
newToken: success.tokenOIDC.toToken(), newToken: success.tokenOIDC.toToken(),
newConfig: config); newConfig: success.configuration);
pushAndPop(AppRoutes.session); pushAndPop(AppRoutes.session);
} }
void _loginAction(Uri baseUrl, UserName userName, Password password) async { void _loginAction(Uri baseUrl, UserName userName, Password password) async {
loginState.value = LoginState(Right(LoginLoadingAction())); consumeState(_authenticationInteractor.execute(baseUrl, userName, password));
await _authenticationInteractor.execute(baseUrl, userName, password)
.then((response) => response.fold(
(failure) => failure is AuthenticationUserFailure ? _loginFailureAction(failure) : null,
(success) => success is AuthenticationUserViewState ? _loginSuccessAction(success) : null));
} }
void _loginSuccessAction(AuthenticationUserViewState success) { void _loginSuccessAction(AuthenticationUserSuccess success) {
loginState.value = LoginState(Right(success)); loginState.value = LoginState(Right(success));
_dynamicUrlInterceptors.changeBaseUrl(kIsWeb ? AppConfig.baseUrl : _urlText); _dynamicUrlInterceptors.changeBaseUrl(kIsWeb ? AppConfig.baseUrl : _urlText);
_authorizationInterceptors.setBasicAuthorization(_userNameText, _passwordText); _authorizationInterceptors.setBasicAuthorization(_userNameText, _passwordText);
@@ -121,7 +121,6 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
borderRadius: BorderRadius.circular(20), borderRadius: BorderRadius.circular(20),
child: Column(children: [ child: Column(children: [
Obx(() { Obx(() {
log('MailboxDashBoardView::build(): ');
if (controller.isSelectionEnabled()) { if (controller.isSelectionEnabled()) {
return Padding( return Padding(
padding: const EdgeInsets.all(12.0), padding: const EdgeInsets.all(12.0),