Handle web finger to get token in HomeController

Signed-off-by: dab246 <tdvu@linagora.com>
This commit is contained in:
dab246
2025-07-02 15:54:29 +07:00
committed by Dat H. Pham
parent fc2265b5e5
commit 9a2f0aa356
26 changed files with 323 additions and 113 deletions
@@ -38,4 +38,6 @@ abstract class AuthenticationOIDCDataSource {
List<String> scopes);
Future<String> getAuthenticationInfo();
Future<void> removeAuthDestinationUrl();
}
@@ -1,9 +1,17 @@
import 'package:model/model.dart';
import 'package:model/oidc/oidc_configuration.dart';
import 'package:model/oidc/request/oidc_request.dart';
import 'package:model/oidc/response/oidc_discovery_response.dart';
import 'package:model/oidc/response/oidc_response.dart';
import 'package:model/oidc/token_id.dart';
import 'package:model/oidc/token_oidc.dart';
import 'package:tmail_ui_user/features/caching/utils/session_storage_manager.dart';
import 'package:tmail_ui_user/features/login/data/datasource/authentication_oidc_datasource.dart';
import 'package:tmail_ui_user/features/login/data/local/oidc_configuration_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/authentication_client/authentication_client_base.dart';
import 'package:tmail_ui_user/features/login/data/network/config/oidc_constant.dart';
import 'package:tmail_ui_user/features/login/data/network/oidc_http_client.dart';
import 'package:tmail_ui_user/features/login/domain/model/login_constants.dart';
import 'package:tmail_ui_user/main/exceptions/exception_thrower.dart';
class AuthenticationOIDCDataSourceImpl extends AuthenticationOIDCDataSource {
@@ -12,6 +20,7 @@ class AuthenticationOIDCDataSourceImpl extends AuthenticationOIDCDataSource {
final AuthenticationClientBase _authenticationClient;
final TokenOidcCacheManager _tokenOidcCacheManager;
final OidcConfigurationCacheManager _oidcConfigurationCacheManager;
final SessionStorageManager _sessionStorageManager;
final ExceptionThrower _exceptionThrower;
final ExceptionThrower _cacheExceptionThrower;
@@ -20,6 +29,7 @@ class AuthenticationOIDCDataSourceImpl extends AuthenticationOIDCDataSource {
this._authenticationClient,
this._tokenOidcCacheManager,
this._oidcConfigurationCacheManager,
this._sessionStorageManager,
this._exceptionThrower,
this._cacheExceptionThrower
);
@@ -109,7 +119,7 @@ class AuthenticationOIDCDataSourceImpl extends AuthenticationOIDCDataSource {
Future<void> deleteOidcConfiguration() {
return Future.sync(() async {
return await _oidcConfigurationCacheManager.deleteOidcConfiguration();
}).catchError(_exceptionThrower.throwException);
}).catchError(_cacheExceptionThrower.throwException);
}
@override
@@ -131,14 +141,25 @@ class AuthenticationOIDCDataSourceImpl extends AuthenticationOIDCDataSource {
@override
Future<String> getAuthenticationInfo() {
return Future.sync(() async {
return await _authenticationClient.getAuthenticationInfo();
}).catchError(_exceptionThrower.throwException);
return await _sessionStorageManager.get(
OIDCConstant.authResponseKey,
);
}).catchError(_cacheExceptionThrower.throwException);
}
@override
Future<void> deleteTokenOIDC() {
return Future.sync(() async {
return await _tokenOidcCacheManager.deleteTokenOidc();
}).catchError(_exceptionThrower.throwException);
}).catchError(_cacheExceptionThrower.throwException);
}
@override
Future<void> removeAuthDestinationUrl() {
return Future.sync(() async {
return await _sessionStorageManager.remove(
LoginConstants.AUTH_DESTINATION_KEY,
);
}).catchError(_cacheExceptionThrower.throwException);
}
}
@@ -13,8 +13,6 @@ abstract class AuthenticationClientBase {
String discoveryUrl,
List<String> scopes);
Future<String> getAuthenticationInfo();
Future<TokenOIDC> getTokenOIDC(
String clientId,
String redirectUrl,
@@ -95,11 +95,6 @@ class AuthenticationClientMobile implements AuthenticationClientBase {
return Future.value(null);
}
@override
Future<String> getAuthenticationInfo() {
return Future.value('');
}
@override
Future<TokenOIDC> signInTwakeWorkplace(OIDCConfiguration oidcConfiguration) async {
final uri = await FlutterWebAuth2.authenticate(
@@ -9,11 +9,9 @@ import 'package:model/oidc/token_oidc.dart';
import 'package:tmail_ui_user/features/login/data/extensions/authentication_token_extension.dart';
import 'package:tmail_ui_user/features/login/data/extensions/token_response_extension.dart';
import 'package:tmail_ui_user/features/login/data/network/authentication_client/authentication_client_base.dart';
import 'package:tmail_ui_user/features/login/data/network/config/oidc_constant.dart';
import 'package:tmail_ui_user/features/login/data/utils/library_platform/app_auth_plugin/app_auth_plugin.dart';
import 'package:tmail_ui_user/features/login/domain/exceptions/authentication_exception.dart';
import 'package:tmail_ui_user/features/login/domain/extensions/oidc_configuration_extensions.dart';
import 'package:universal_html/html.dart' as html;
class AuthenticationClientWeb implements AuthenticationClientBase {
@@ -96,17 +94,6 @@ class AuthenticationClientWeb implements AuthenticationClientBase {
scopes: scopes));
}
@override
Future<String> getAuthenticationInfo() async {
final authUrl = html.window.sessionStorage[OIDCConstant.authResponseKey];
log('AuthenticationClientWeb::getAuthenticationInfo(): authUrl: $authUrl');
if (authUrl != null && authUrl.isNotEmpty) {
return authUrl;
} else {
throw CanNotAuthenticationInfoOnWeb();
}
}
@override
Future<TokenOIDC> signUpTwakeWorkplace(OIDCConfiguration oidcConfiguration) {
throw UnimplementedError();
@@ -93,4 +93,9 @@ class AuthenticationOIDCRepositoryImpl extends AuthenticationOIDCRepository {
Future<void> deleteTokenOIDC() {
return _oidcDataSource.deleteTokenOIDC();
}
@override
Future<void> removeAuthDestinationUrl() {
return _oidcDataSource.removeAuthDestinationUrl();
}
}