TF-571 Handle logic for login with basicAuth or OIDC
This commit is contained in:
committed by
Dat H. Pham
parent
3c9abf8f41
commit
2c156819ba
@@ -2,15 +2,21 @@ import 'package:core/core.dart';
|
|||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
import 'package:shared_preferences/shared_preferences.dart';
|
import 'package:shared_preferences/shared_preferences.dart';
|
||||||
import 'package:tmail_ui_user/features/base/base_bindings.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_datasource.dart';
|
||||||
import 'package:tmail_ui_user/features/login/data/datasource/authentication_oidc_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_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/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/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/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_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/authentication_repository_impl.dart';
|
||||||
import 'package:tmail_ui_user/features/login/data/repository/credential_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_oidc_repository.dart';
|
||||||
import 'package:tmail_ui_user/features/login/domain/repository/authentication_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';
|
import 'package:tmail_ui_user/features/login/domain/repository/credential_repository.dart';
|
||||||
@@ -38,12 +44,19 @@ class LoginBindings extends BaseBindings {
|
|||||||
void bindingsDataSource() {
|
void bindingsDataSource() {
|
||||||
Get.lazyPut<AuthenticationDataSource>(() => Get.find<AuthenticationDataSourceImpl>());
|
Get.lazyPut<AuthenticationDataSource>(() => Get.find<AuthenticationDataSourceImpl>());
|
||||||
Get.lazyPut<AuthenticationOIDCDataSource>(() => Get.find<AuthenticationOIDCDataSourceImpl>());
|
Get.lazyPut<AuthenticationOIDCDataSource>(() => Get.find<AuthenticationOIDCDataSourceImpl>());
|
||||||
|
Get.lazyPut<AccountDatasource>(() => Get.find<HiveAccountDatasourceImpl>());
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void bindingsDataSourceImpl() {
|
void bindingsDataSourceImpl() {
|
||||||
Get.lazyPut(() => AuthenticationDataSourceImpl());
|
Get.lazyPut(() => AuthenticationDataSourceImpl());
|
||||||
Get.lazyPut(() => AuthenticationOIDCDataSourceImpl(Get.find<OIDCHttpClient>()));
|
Get.lazyPut(() => AuthenticationOIDCDataSourceImpl(
|
||||||
|
Get.find<OIDCHttpClient>(),
|
||||||
|
Get.find<TokenOidcCacheManager>()
|
||||||
|
));
|
||||||
|
Get.lazyPut(() => HiveAccountDatasourceImpl(
|
||||||
|
Get.find<AccountCacheManager>()
|
||||||
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@@ -51,6 +64,7 @@ class LoginBindings extends BaseBindings {
|
|||||||
Get.lazyPut(() => AuthenticationInteractor(
|
Get.lazyPut(() => AuthenticationInteractor(
|
||||||
Get.find<AuthenticationRepository>(),
|
Get.find<AuthenticationRepository>(),
|
||||||
Get.find<CredentialRepository>(),
|
Get.find<CredentialRepository>(),
|
||||||
|
Get.find<AccountRepository>()
|
||||||
));
|
));
|
||||||
Get.lazyPut(() => CheckOIDCIsAvailableInteractor(
|
Get.lazyPut(() => CheckOIDCIsAvailableInteractor(
|
||||||
Get.find<AuthenticationOIDCRepository>(),
|
Get.find<AuthenticationOIDCRepository>(),
|
||||||
@@ -59,7 +73,9 @@ class LoginBindings extends BaseBindings {
|
|||||||
Get.find<AuthenticationOIDCRepository>(),
|
Get.find<AuthenticationOIDCRepository>(),
|
||||||
));
|
));
|
||||||
Get.lazyPut(() => GetTokenOIDCInteractor(
|
Get.lazyPut(() => GetTokenOIDCInteractor(
|
||||||
|
Get.find<CredentialRepository>(),
|
||||||
Get.find<AuthenticationOIDCRepository>(),
|
Get.find<AuthenticationOIDCRepository>(),
|
||||||
|
Get.find<AccountRepository>()
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -68,6 +84,7 @@ class LoginBindings extends BaseBindings {
|
|||||||
Get.lazyPut<CredentialRepository>(() => Get.find<CredentialRepositoryImpl>());
|
Get.lazyPut<CredentialRepository>(() => Get.find<CredentialRepositoryImpl>());
|
||||||
Get.lazyPut<AuthenticationRepository>(() => Get.find<AuthenticationRepositoryImpl>());
|
Get.lazyPut<AuthenticationRepository>(() => Get.find<AuthenticationRepositoryImpl>());
|
||||||
Get.lazyPut<AuthenticationOIDCRepository>(() => Get.find<AuthenticationOIDCRepositoryImpl>());
|
Get.lazyPut<AuthenticationOIDCRepository>(() => Get.find<AuthenticationOIDCRepositoryImpl>());
|
||||||
|
Get.lazyPut<AccountRepository>(() => Get.find<AccountRepositoryImpl>());
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@@ -75,5 +92,6 @@ class LoginBindings extends BaseBindings {
|
|||||||
Get.lazyPut(() => CredentialRepositoryImpl(Get.find<SharedPreferences>()));
|
Get.lazyPut(() => CredentialRepositoryImpl(Get.find<SharedPreferences>()));
|
||||||
Get.lazyPut(() => AuthenticationRepositoryImpl(Get.find<AuthenticationDataSource>()));
|
Get.lazyPut(() => AuthenticationRepositoryImpl(Get.find<AuthenticationDataSource>()));
|
||||||
Get.lazyPut(() => AuthenticationOIDCRepositoryImpl(Get.find<AuthenticationOIDCDataSource>()));
|
Get.lazyPut(() => AuthenticationOIDCRepositoryImpl(Get.find<AuthenticationOIDCDataSource>()));
|
||||||
|
Get.lazyPut(() => AccountRepositoryImpl(Get.find<AccountDatasource>()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -78,7 +78,7 @@ class LoginController extends GetxController {
|
|||||||
loginState.value = LoginState(Right(LoginLoadingAction()));
|
loginState.value = LoginState(Right(LoginLoadingAction()));
|
||||||
log('LoginController::_checkOIDCIsAvailable(): origin: + ${baseUri.origin}');
|
log('LoginController::_checkOIDCIsAvailable(): origin: + ${baseUri.origin}');
|
||||||
await _checkOIDCIsAvailableInteractor
|
await _checkOIDCIsAvailableInteractor
|
||||||
.execute(OIDCRequest(baseUrl: baseUri.origin, resourceUrl: baseUri.origin))
|
.execute(OIDCRequest(baseUrl: baseUri.toString(), resourceUrl: baseUri.origin))
|
||||||
.then((response) => response.fold(
|
.then((response) => response.fold(
|
||||||
(failure) => _showFormLoginWithCredentialAction(),
|
(failure) => _showFormLoginWithCredentialAction(),
|
||||||
(success) => success is CheckOIDCIsAvailableSuccess
|
(success) => success is CheckOIDCIsAvailableSuccess
|
||||||
@@ -104,6 +104,7 @@ class LoginController extends GetxController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void handleLoginPressed() {
|
void handleLoginPressed() {
|
||||||
|
log('LoginController::handleLoginPressed(): ${loginFormType.value}');
|
||||||
if (loginFormType.value == LoginFormType.ssoForm) {
|
if (loginFormType.value == LoginFormType.ssoForm) {
|
||||||
final baseUri = kIsWeb ? _parseUri(AppConfig.baseUrl) : _parseUri(_urlText);
|
final baseUri = kIsWeb ? _parseUri(AppConfig.baseUrl) : _parseUri(_urlText);
|
||||||
if (baseUri != null) {
|
if (baseUri != null) {
|
||||||
@@ -160,12 +161,15 @@ class LoginController extends GetxController {
|
|||||||
|
|
||||||
void _getTokenOIDCAction(BuildContext context, OIDCConfiguration config) async {
|
void _getTokenOIDCAction(BuildContext context, OIDCConfiguration config) async {
|
||||||
loginState.value = LoginState(Right(LoginLoadingAction()));
|
loginState.value = LoginState(Right(LoginLoadingAction()));
|
||||||
await _getTokenOIDCInteractor
|
final baseUri = kIsWeb ? _parseUri(AppConfig.baseUrl) : _parseUri(_urlText);
|
||||||
.execute(config.clientId, config.redirectUrl, config.discoveryUrl, config.scopes)
|
if (baseUri != null) {
|
||||||
.then((response) => response.fold(
|
await _getTokenOIDCInteractor
|
||||||
|
.execute(baseUri, config.clientId, config.redirectUrl, config.discoveryUrl, config.scopes)
|
||||||
|
.then((response) =>
|
||||||
|
response.fold(
|
||||||
(failure) {
|
(failure) {
|
||||||
if (failure is GetTokenOIDCFailure) {
|
if (failure is GetTokenOIDCFailure) {
|
||||||
loginState.value = LoginState(Left(failure));
|
loginState.value = LoginState(Left(failure));
|
||||||
} else {
|
} else {
|
||||||
loginState.value = LoginState(Left(LoginCanNotGetTokenAction()));
|
loginState.value = LoginState(Left(LoginCanNotGetTokenAction()));
|
||||||
}
|
}
|
||||||
@@ -177,6 +181,9 @@ class LoginController extends GetxController {
|
|||||||
loginState.value = LoginState(Left(LoginCanNotGetTokenAction()));
|
loginState.value = LoginState(Left(LoginCanNotGetTokenAction()));
|
||||||
}
|
}
|
||||||
}));
|
}));
|
||||||
|
} else {
|
||||||
|
loginState.value = LoginState(Left(LoginCanNotGetTokenAction()));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void _getTokenOIDCSuccess(GetTokenOIDCSuccess success) {
|
void _getTokenOIDCSuccess(GetTokenOIDCSuccess success) {
|
||||||
@@ -203,6 +210,7 @@ class LoginController extends GetxController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void _loginFailureAction(FeatureFailure failure) {
|
void _loginFailureAction(FeatureFailure failure) {
|
||||||
|
logError('LoginController::_loginFailureAction(): $failure');
|
||||||
loginState.value = LoginState(Left(failure));
|
loginState.value = LoginState(Left(failure));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user