TF-571 Get token from authentication sso

This commit is contained in:
dab246
2022-05-20 15:17:57 +07:00
committed by Dat H. Pham
parent ffb5cadc16
commit 4804a1659a
20 changed files with 227 additions and 11 deletions
@@ -7,6 +7,7 @@ import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:get/get.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_token_oidc_state.dart';
import 'package:tmail_ui_user/features/login/presentation/login_controller.dart';
import 'package:tmail_ui_user/features/login/presentation/login_form_type.dart';
import 'package:tmail_ui_user/features/login/presentation/state/login_state.dart';
@@ -39,6 +40,8 @@ abstract class BaseLoginView extends GetWidget<LoginController> {
} else if (failure is GetOIDCConfigurationFailure
|| failure is LoginCanNotVerifySSOConfigurationAction) {
return AppLocalizations.of(context).canNotVerifySSOConfiguration;
} else if (failure is GetTokenOIDCFailure || failure is LoginCanNotGetTokenAction) {
return AppLocalizations.of(context).canNotGetToken;
} else {
return AppLocalizations.of(context).unknown_error_login_message;
}
@@ -16,16 +16,11 @@ import 'package:tmail_ui_user/features/login/domain/repository/credential_reposi
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/get_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/presentation/login_controller.dart';
class LoginBindings extends BaseBindings {
@override
void dependencies() {
Get.lazyPut(() => OIDCHttpClient(Get.find<DioClient>()));
super.dependencies();
}
@override
void bindingsController() {
Get.lazyPut(() => LoginController(
@@ -34,6 +29,7 @@ class LoginBindings extends BaseBindings {
Get.find<AuthorizationInterceptors>(),
Get.find<CheckOIDCIsAvailableInteractor>(),
Get.find<GetOIDCConfigurationInteractor>(),
Get.find<GetTokenOIDCInteractor>(),
));
}
@@ -61,6 +57,9 @@ class LoginBindings extends BaseBindings {
Get.lazyPut(() => GetOIDCConfigurationInteractor(
Get.find<AuthenticationOIDCRepository>(),
));
Get.lazyPut(() => GetTokenOIDCInteractor(
Get.find<AuthenticationOIDCRepository>(),
));
}
@override
@@ -7,9 +7,11 @@ import 'package:model/model.dart';
import 'package:tmail_ui_user/features/login/domain/state/authentication_user_state.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/get_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/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/get_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/presentation/login_form_type.dart';
import 'package:tmail_ui_user/features/login/presentation/state/login_state.dart';
import 'package:tmail_ui_user/main/routes/app_routes.dart';
@@ -23,6 +25,7 @@ class LoginController extends GetxController {
final AuthorizationInterceptors _authorizationInterceptors;
final CheckOIDCIsAvailableInteractor _checkOIDCIsAvailableInteractor;
final GetOIDCConfigurationInteractor _getOIDCConfigurationInteractor;
final GetTokenOIDCInteractor _getTokenOIDCInteractor;
final TextEditingController urlInputController = TextEditingController();
@@ -32,6 +35,7 @@ class LoginController extends GetxController {
this._authorizationInterceptors,
this._checkOIDCIsAvailableInteractor,
this._getOIDCConfigurationInteractor,
this._getTokenOIDCInteractor,
);
var loginState = LoginState(Right(LoginInitAction())).obs;
@@ -141,6 +145,35 @@ class LoginController extends GetxController {
void _getOIDCConfigurationSuccess(GetOIDCConfigurationSuccess success) {
loginState.value = LoginState(Right(success));
if (currentContext != null) {
_getTokenOIDCAction(currentContext!, success.oidcConfiguration);
}
}
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(
(failure) {
if (failure is GetTokenOIDCFailure) {
loginState.value = LoginState(Left(failure));
} else {
loginState.value = LoginState(Left(LoginCanNotGetTokenAction()));
}
},
(success) {
if (success is GetTokenOIDCSuccess) {
_getTokenOIDCSuccess(success);
} else {
loginState.value = LoginState(Left(LoginCanNotGetTokenAction()));
}
}));
}
void _getTokenOIDCSuccess(GetTokenOIDCSuccess success) {
log('LoginController::_getTokenOIDCSuccess(): ');
loginState.value = LoginState(Right(success));
}
void _loginAction(Uri baseUrl, UserName userName, Password password) async {
@@ -47,4 +47,10 @@ class LoginMissPasswordAction extends Failure {
class LoginCanNotVerifySSOConfigurationAction extends Failure {
@override
List<Object?> get props => [];
}
@immutable
class LoginCanNotGetTokenAction extends Failure {
@override
List<Object?> get props => [];
}