TF-624 Implement get authentication info
This commit is contained in:
@@ -32,4 +32,6 @@ abstract class AuthenticationOIDCDataSource {
|
||||
String redirectUrl,
|
||||
String discoveryUrl,
|
||||
List<String> scopes);
|
||||
|
||||
Future<String?> getAuthenticationInfo();
|
||||
}
|
||||
@@ -96,4 +96,9 @@ class AuthenticationOIDCDataSourceImpl extends AuthenticationOIDCDataSource {
|
||||
discoveryUrl,
|
||||
scopes);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<String?> getAuthenticationInfo() {
|
||||
return _authenticationClient.getAuthenticationInfo();
|
||||
}
|
||||
}
|
||||
@@ -12,6 +12,8 @@ abstract class AuthenticationClientBase {
|
||||
String discoveryUrl,
|
||||
List<String> scopes);
|
||||
|
||||
Future<String?> getAuthenticationInfo();
|
||||
|
||||
Future<TokenOIDC> getTokenOIDC(
|
||||
String clientId,
|
||||
String redirectUrl,
|
||||
|
||||
+5
@@ -81,6 +81,11 @@ class AuthenticationClientMobile implements AuthenticationClientBase {
|
||||
String discoveryUrl, List<String> scopes) {
|
||||
return Future.value(null);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<String?> getAuthenticationInfo() {
|
||||
return Future.value(null);
|
||||
}
|
||||
}
|
||||
|
||||
AuthenticationClientBase getAuthenticationClientImplementation() =>
|
||||
|
||||
@@ -1,5 +1,8 @@
|
||||
|
||||
import 'package:core/utils/app_logger.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:tmail_ui_user/features/login/data/network/config/oidc_constant.dart';
|
||||
import 'package:universal_html/html.dart' as html;
|
||||
import 'package:tmail_ui_user/features/login/data/network/authentication_client/authentication_client_base.dart';
|
||||
import 'package:flutter_appauth_platform_interface/flutter_appauth_platform_interface.dart';
|
||||
import 'package:model/oidc/oidc_configuration.dart';
|
||||
@@ -41,6 +44,13 @@ class AuthenticationClientWeb implements AuthenticationClientBase {
|
||||
discoveryUrl: discoveryUrl,
|
||||
scopes: scopes));
|
||||
}
|
||||
|
||||
@override
|
||||
Future<String?> getAuthenticationInfo() async {
|
||||
final authUrl = html.window.sessionStorage[OIDCConstant.authResponseKey];
|
||||
log('AuthenticationClientWeb::getAuthenticationInfo(): authUrl: $authUrl');
|
||||
return authUrl;
|
||||
}
|
||||
}
|
||||
|
||||
AuthenticationClientBase getAuthenticationClientImplementation() =>
|
||||
|
||||
@@ -5,6 +5,7 @@ class OIDCConstant {
|
||||
static String get webOidcClientId => 'teammail-web';
|
||||
static List<String> get oidcScope => ['openid', 'offline_access'];
|
||||
static const keyAuthorityOidc = 'KEY_AUTHORITY_OIDC';
|
||||
static const authResponseKey = "auth_info";
|
||||
|
||||
static String get clientId => BuildUtils.isWeb ? webOidcClientId : mobileOidcClientId;
|
||||
}
|
||||
@@ -77,4 +77,9 @@ class AuthenticationOIDCRepositoryImpl extends AuthenticationOIDCRepository {
|
||||
String redirectUrl, String discoveryUrl, List<String> scopes) {
|
||||
return _oidcDataSource.authenticateOidcOnBrowser(clientId, redirectUrl, discoveryUrl, scopes);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<String?> getAuthenticationInfo() {
|
||||
return _oidcDataSource.getAuthenticationInfo();
|
||||
}
|
||||
}
|
||||
@@ -32,4 +32,6 @@ abstract class AuthenticationOIDCRepository {
|
||||
String redirectUrl,
|
||||
String discoveryUrl,
|
||||
List<String> scopes);
|
||||
|
||||
Future<String?> getAuthenticationInfo();
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
|
||||
import 'package:core/presentation/state/failure.dart';
|
||||
import 'package:core/presentation/state/success.dart';
|
||||
|
||||
class GetAuthenticationInfoSuccess extends UIState {
|
||||
|
||||
GetAuthenticationInfoSuccess();
|
||||
|
||||
@override
|
||||
List<Object> get props => [];
|
||||
}
|
||||
|
||||
class GetAuthenticationInfoFailure extends FeatureFailure {
|
||||
final dynamic exception;
|
||||
|
||||
GetAuthenticationInfoFailure(this.exception);
|
||||
|
||||
@override
|
||||
List<Object> get props => [exception];
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
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:tmail_ui_user/features/login/domain/repository/authentication_oidc_repository.dart';
|
||||
import 'package:tmail_ui_user/features/login/domain/state/get_authentication_info_state.dart';
|
||||
|
||||
class GetAuthenticationInfoInteractor {
|
||||
final AuthenticationOIDCRepository _oidcRepository;
|
||||
|
||||
GetAuthenticationInfoInteractor(this._oidcRepository);
|
||||
|
||||
Future<Either<Failure, Success>> execute() async {
|
||||
try {
|
||||
final result = await _oidcRepository.getAuthenticationInfo();
|
||||
log('GetAuthenticationInfoInteractor::execute(): result: $result');
|
||||
if (result?.isNotEmpty == true) {
|
||||
return Right<Failure, Success>(GetAuthenticationInfoSuccess());
|
||||
} else {
|
||||
return Left<Failure, Success>(GetAuthenticationInfoFailure(null));
|
||||
}
|
||||
} catch (e) {
|
||||
log('GetAuthenticationInfoInteractor::execute(): ERROR: $e');
|
||||
return Left<Failure, Success>(GetAuthenticationInfoFailure(e));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -25,6 +25,7 @@ import 'package:tmail_ui_user/features/login/domain/repository/credential_reposi
|
||||
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/check_oidc_is_available_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_token_oidc_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/login/presentation/login_controller.dart';
|
||||
@@ -41,6 +42,7 @@ class LoginBindings extends BaseBindings {
|
||||
Get.find<GetOIDCConfigurationInteractor>(),
|
||||
Get.find<GetTokenOIDCInteractor>(),
|
||||
Get.find<AuthenticateOidcOnBrowserInteractor>(),
|
||||
Get.find<GetAuthenticationInfoInteractor>(),
|
||||
));
|
||||
}
|
||||
|
||||
@@ -86,6 +88,9 @@ class LoginBindings extends BaseBindings {
|
||||
Get.lazyPut(() => AuthenticateOidcOnBrowserInteractor(
|
||||
Get.find<AuthenticationOIDCRepository>(),
|
||||
));
|
||||
Get.lazyPut(() => GetAuthenticationInfoInteractor(
|
||||
Get.find<AuthenticationOIDCRepository>(),
|
||||
));
|
||||
}
|
||||
|
||||
@override
|
||||
|
||||
@@ -8,11 +8,13 @@ import 'package:tmail_ui_user/features/login/data/network/config/authorization_i
|
||||
import 'package:tmail_ui_user/features/login/domain/state/authenticate_oidc_on_browser_state.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_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_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/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_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_token_oidc_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/login/presentation/login_form_type.dart';
|
||||
@@ -30,6 +32,7 @@ class LoginController extends GetxController {
|
||||
final GetOIDCConfigurationInteractor _getOIDCConfigurationInteractor;
|
||||
final GetTokenOIDCInteractor _getTokenOIDCInteractor;
|
||||
final AuthenticateOidcOnBrowserInteractor _authenticateOidcOnBrowserInteractor;
|
||||
final GetAuthenticationInfoInteractor _getAuthenticationInfoInteractor;
|
||||
|
||||
final TextEditingController urlInputController = TextEditingController();
|
||||
|
||||
@@ -41,6 +44,7 @@ class LoginController extends GetxController {
|
||||
this._getOIDCConfigurationInteractor,
|
||||
this._getTokenOIDCInteractor,
|
||||
this._authenticateOidcOnBrowserInteractor,
|
||||
this._getAuthenticationInfoInteractor,
|
||||
);
|
||||
|
||||
var loginState = LoginState(Right(LoginInitAction())).obs;
|
||||
@@ -69,6 +73,24 @@ class LoginController extends GetxController {
|
||||
? Password(password.trim())
|
||||
: null;
|
||||
|
||||
@override
|
||||
void onReady() {
|
||||
super.onReady();
|
||||
if(BuildUtils.isWeb) {
|
||||
_getAuthenticationInfo();
|
||||
}
|
||||
}
|
||||
|
||||
void _getAuthenticationInfo() async {
|
||||
await _getAuthenticationInfoInteractor.execute()
|
||||
.then((result) => result.fold(
|
||||
(failure) => null,
|
||||
(success) {
|
||||
if (success is GetAuthenticationInfoSuccess) {
|
||||
}
|
||||
}));
|
||||
}
|
||||
|
||||
void handleNextInUrlInputFormPress() {
|
||||
_checkOIDCIsAvailable();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user