From 2c156819ba122aeb8e30699018c79b6ace5f3147 Mon Sep 17 00:00:00 2001 From: Dat PHAM HOANG Date: Tue, 31 May 2022 14:35:57 +0700 Subject: [PATCH] TF-571 Handle logic for login with basicAuth or OIDC --- .../login/presentation/login_bindings.dart | 20 ++++++++++++++++++- .../login/presentation/login_controller.dart | 18 ++++++++++++----- 2 files changed, 32 insertions(+), 6 deletions(-) diff --git a/lib/features/login/presentation/login_bindings.dart b/lib/features/login/presentation/login_bindings.dart index bf76076ba..92879409b 100644 --- a/lib/features/login/presentation/login_bindings.dart +++ b/lib/features/login/presentation/login_bindings.dart @@ -2,15 +2,21 @@ import 'package:core/core.dart'; import 'package:get/get.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:tmail_ui_user/features/base/base_bindings.dart'; +import 'package:tmail_ui_user/features/login/data/datasource/account_datasource.dart'; import 'package:tmail_ui_user/features/login/data/datasource/authentication_datasource.dart'; import 'package:tmail_ui_user/features/login/data/datasource/authentication_oidc_datasource.dart'; import 'package:tmail_ui_user/features/login/data/datasource_impl/authentication_datasource_impl.dart'; import 'package:tmail_ui_user/features/login/data/datasource_impl/authentication_oidc_datasource_impl.dart'; +import 'package:tmail_ui_user/features/login/data/datasource_impl/hive_account_datasource_impl.dart'; +import 'package:tmail_ui_user/features/login/data/local/account_cache_manager.dart'; +import 'package:tmail_ui_user/features/login/data/local/token_oidc_cache_manager.dart'; import 'package:tmail_ui_user/features/login/data/network/config/authorization_interceptors.dart'; import 'package:tmail_ui_user/features/login/data/network/oidc_http_client.dart'; +import 'package:tmail_ui_user/features/login/data/repository/account_repository_impl.dart'; import 'package:tmail_ui_user/features/login/data/repository/authentication_oidc_repository_impl.dart'; import 'package:tmail_ui_user/features/login/data/repository/authentication_repository_impl.dart'; import 'package:tmail_ui_user/features/login/data/repository/credential_repository_impl.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_repository.dart'; import 'package:tmail_ui_user/features/login/domain/repository/credential_repository.dart'; @@ -38,12 +44,19 @@ class LoginBindings extends BaseBindings { void bindingsDataSource() { Get.lazyPut(() => Get.find()); Get.lazyPut(() => Get.find()); + Get.lazyPut(() => Get.find()); } @override void bindingsDataSourceImpl() { Get.lazyPut(() => AuthenticationDataSourceImpl()); - Get.lazyPut(() => AuthenticationOIDCDataSourceImpl(Get.find())); + Get.lazyPut(() => AuthenticationOIDCDataSourceImpl( + Get.find(), + Get.find() + )); + Get.lazyPut(() => HiveAccountDatasourceImpl( + Get.find() + )); } @override @@ -51,6 +64,7 @@ class LoginBindings extends BaseBindings { Get.lazyPut(() => AuthenticationInteractor( Get.find(), Get.find(), + Get.find() )); Get.lazyPut(() => CheckOIDCIsAvailableInteractor( Get.find(), @@ -59,7 +73,9 @@ class LoginBindings extends BaseBindings { Get.find(), )); Get.lazyPut(() => GetTokenOIDCInteractor( + Get.find(), Get.find(), + Get.find() )); } @@ -68,6 +84,7 @@ class LoginBindings extends BaseBindings { Get.lazyPut(() => Get.find()); Get.lazyPut(() => Get.find()); Get.lazyPut(() => Get.find()); + Get.lazyPut(() => Get.find()); } @override @@ -75,5 +92,6 @@ class LoginBindings extends BaseBindings { Get.lazyPut(() => CredentialRepositoryImpl(Get.find())); Get.lazyPut(() => AuthenticationRepositoryImpl(Get.find())); Get.lazyPut(() => AuthenticationOIDCRepositoryImpl(Get.find())); + Get.lazyPut(() => AccountRepositoryImpl(Get.find())); } } \ No newline at end of file diff --git a/lib/features/login/presentation/login_controller.dart b/lib/features/login/presentation/login_controller.dart index 1ce11ac5c..0a709418c 100644 --- a/lib/features/login/presentation/login_controller.dart +++ b/lib/features/login/presentation/login_controller.dart @@ -78,7 +78,7 @@ class LoginController extends GetxController { loginState.value = LoginState(Right(LoginLoadingAction())); log('LoginController::_checkOIDCIsAvailable(): origin: + ${baseUri.origin}'); await _checkOIDCIsAvailableInteractor - .execute(OIDCRequest(baseUrl: baseUri.origin, resourceUrl: baseUri.origin)) + .execute(OIDCRequest(baseUrl: baseUri.toString(), resourceUrl: baseUri.origin)) .then((response) => response.fold( (failure) => _showFormLoginWithCredentialAction(), (success) => success is CheckOIDCIsAvailableSuccess @@ -104,6 +104,7 @@ class LoginController extends GetxController { } void handleLoginPressed() { + log('LoginController::handleLoginPressed(): ${loginFormType.value}'); if (loginFormType.value == LoginFormType.ssoForm) { final baseUri = kIsWeb ? _parseUri(AppConfig.baseUrl) : _parseUri(_urlText); if (baseUri != null) { @@ -160,12 +161,15 @@ class LoginController extends GetxController { void _getTokenOIDCAction(BuildContext context, OIDCConfiguration config) async { loginState.value = LoginState(Right(LoginLoadingAction())); - await _getTokenOIDCInteractor - .execute(config.clientId, config.redirectUrl, config.discoveryUrl, config.scopes) - .then((response) => response.fold( + final baseUri = kIsWeb ? _parseUri(AppConfig.baseUrl) : _parseUri(_urlText); + if (baseUri != null) { + await _getTokenOIDCInteractor + .execute(baseUri, config.clientId, config.redirectUrl, config.discoveryUrl, config.scopes) + .then((response) => + response.fold( (failure) { if (failure is GetTokenOIDCFailure) { - loginState.value = LoginState(Left(failure)); + loginState.value = LoginState(Left(failure)); } else { loginState.value = LoginState(Left(LoginCanNotGetTokenAction())); } @@ -177,6 +181,9 @@ class LoginController extends GetxController { loginState.value = LoginState(Left(LoginCanNotGetTokenAction())); } })); + } else { + loginState.value = LoginState(Left(LoginCanNotGetTokenAction())); + } } void _getTokenOIDCSuccess(GetTokenOIDCSuccess success) { @@ -203,6 +210,7 @@ class LoginController extends GetxController { } void _loginFailureAction(FeatureFailure failure) { + logError('LoginController::_loginFailureAction(): $failure'); loginState.value = LoginState(Left(failure)); }