TF-4049 Pre-fill OIDC login form

This commit is contained in:
dab246
2025-10-13 14:40:25 +07:00
committed by Dat H. Pham
parent 7d80557582
commit 51b85c8b79
12 changed files with 112 additions and 30 deletions
@@ -8,7 +8,13 @@ abstract class AuthenticationOIDCRepository {
Future<OIDCDiscoveryResponse> discoverOIDC(OIDCConfiguration oidcConfiguration);
Future<TokenOIDC> getTokenOIDC(String clientId, String redirectUrl, String discoveryUrl, List<String> scopes);
Future<TokenOIDC> getTokenOIDC(
String clientId,
String redirectUrl,
String discoveryUrl,
List<String> scopes, {
String? loginHint,
});
Future<void> persistTokenOIDC(TokenOIDC tokenOidc);
@@ -2,6 +2,7 @@ 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:model/oidc/oidc_configuration.dart';
import 'package:model/oidc/response/oidc_response.dart';
import 'package:tmail_ui_user/features/login/domain/model/base_url_oidc_response.dart';
import 'package:tmail_ui_user/features/login/domain/repository/authentication_oidc_repository.dart';
@@ -12,12 +13,20 @@ class GetOIDCConfigurationInteractor {
GetOIDCConfigurationInteractor(this._oidcRepository);
Stream<Either<Failure, Success>> execute(OIDCResponse oidcResponse) async* {
Stream<Either<Failure, Success>> execute(
OIDCResponse oidcResponse, {
String? loginHint,
}) async* {
try {
yield Right<Failure, Success>(GetOIDCConfigurationLoading());
final oidcConfiguration = await _oidcRepository.getOIDCConfiguration(oidcResponse);
await _oidcRepository.persistOidcConfiguration(oidcConfiguration);
yield Right<Failure, Success>(GetOIDCConfigurationSuccess(oidcConfiguration));
final configWithLoginHint = oidcConfiguration.copyWidth(
loginHint: loginHint,
);
await _oidcRepository.persistOidcConfiguration(configWithLoginHint);
yield Right<Failure, Success>(
GetOIDCConfigurationSuccess(configWithLoginHint),
);
} catch (e) {
logError('$runtimeType::execute():oidcResponse = ${oidcResponse.runtimeType} | Exception = $e');
if (oidcResponse is BaseUrlOidcResponse) {
@@ -27,10 +27,12 @@ class GetTokenOIDCInteractor {
try {
yield Right<Failure, Success>(GetTokenOIDCLoading());
final tokenOIDC = await authenticationOIDCRepository.getTokenOIDC(
config.clientId,
config.redirectUrl,
config.discoveryUrl,
config.scopes);
config.clientId,
config.redirectUrl,
config.discoveryUrl,
config.scopes,
loginHint: config.loginHint,
);
await Future.wait([
_credentialRepository.saveBaseUrl(baseUri),