TF-4145 Implement get oidc user_info from endpoint of oidc configuration

This commit is contained in:
dab246
2025-11-12 16:25:51 +07:00
committed by Dat H. Pham
parent 655a1bf81a
commit 43de7edd47
14 changed files with 185 additions and 6 deletions
@@ -46,4 +46,6 @@ abstract class AuthenticationOIDCDataSource {
Future<String> getAuthenticationInfo();
Future<void> removeAuthDestinationUrl();
Future<OidcUserInfo> fetchUserInfo(String userInfoEndpoint);
}
@@ -2,6 +2,7 @@ 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/response/oidc_user_info.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';
@@ -174,4 +175,14 @@ class AuthenticationOIDCDataSourceImpl extends AuthenticationOIDCDataSource {
);
}).catchError(_cacheExceptionThrower.throwException);
}
@override
Future<OidcUserInfo> fetchUserInfo(String userInfoEndpoint) {
return Future.sync(() async {
return await _oidcHttpClient.fetchUserInfo(userInfoEndpoint);
}).catchError((error, stackTrace) async {
await _exceptionThrower.throwException(error, stackTrace);
throw error;
});
}
}
@@ -4,4 +4,6 @@ class CanNotFoundOIDCLinks implements Exception {}
class CanNotFindToken implements Exception {}
class CanRetryOIDCException implements Exception {}
class CanRetryOIDCException implements Exception {}
class NotFoundUserInfoEndpointException implements Exception {}
@@ -10,6 +10,7 @@ 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/response/oidc_user_info.dart';
import 'package:tmail_ui_user/features/login/data/extensions/service_path_extension.dart';
import 'package:tmail_ui_user/features/login/data/network/config/oidc_constant.dart';
import 'package:tmail_ui_user/features/login/data/network/endpoint.dart';
@@ -84,4 +85,14 @@ class OIDCHttpClient {
return OIDCDiscoveryResponse.fromJson(jsonDecode(result));
}
}
Future<OidcUserInfo> fetchUserInfo(String userInfoEndpoint) async {
final result = await _dioClient.get(userInfoEndpoint);
if (result is Map<String, dynamic>) {
return OidcUserInfo.fromJson(result);
} else {
return OidcUserInfo.fromJson(jsonDecode(result));
}
}
}
@@ -2,6 +2,7 @@ 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/response/oidc_user_info.dart';
import 'package:model/oidc/token_id.dart';
import 'package:model/oidc/token_oidc.dart';
import 'package:tmail_ui_user/features/login/data/datasource/authentication_oidc_datasource.dart';
@@ -110,4 +111,9 @@ class AuthenticationOIDCRepositoryImpl extends AuthenticationOIDCRepository {
Future<void> removeAuthDestinationUrl() {
return _oidcDataSource.removeAuthDestinationUrl();
}
@override
Future<OidcUserInfo> fetchUserInfo(String userInfoEndpoint) {
return _oidcDataSource.fetchUserInfo(userInfoEndpoint);
}
}