TF-571 Get token from authentication sso
This commit is contained in:
@@ -5,4 +5,6 @@ abstract class AuthenticationOIDCDataSource {
|
||||
Future<bool> checkOIDCIsAvailable(OIDCRequest oidcRequest);
|
||||
|
||||
Future<OIDCConfiguration> getOIDCConfiguration(Uri baseUri);
|
||||
|
||||
Future<TokenOIDC> getTokenOIDC(String clientId, String redirectUrl, String discoveryUrl, List<String> scopes);
|
||||
}
|
||||
@@ -26,4 +26,13 @@ class AuthenticationOIDCDataSourceImpl extends AuthenticationOIDCDataSource {
|
||||
throw error;
|
||||
});
|
||||
}
|
||||
|
||||
@override
|
||||
Future<TokenOIDC> getTokenOIDC(String clientId, String redirectUrl, String discoveryUrl, List<String> scopes) {
|
||||
return Future.sync(() async {
|
||||
return await _oidcHttpClient.getTokenOIDC(clientId, redirectUrl, discoveryUrl, scopes);
|
||||
}).catchError((error) {
|
||||
throw error;
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
|
||||
import 'package:flutter_appauth/flutter_appauth.dart';
|
||||
import 'package:model/model.dart';
|
||||
|
||||
extension AuthorizationTokenResponseExtension on AuthorizationTokenResponse {
|
||||
|
||||
TokenOIDC toTokenOIDC() {
|
||||
return TokenOIDC(
|
||||
accessToken ?? '',
|
||||
TokenId(idToken ?? ''),
|
||||
refreshToken ?? '',
|
||||
expiredTime: accessTokenExpirationDateTime ?? DateTime.now());
|
||||
}
|
||||
}
|
||||
@@ -2,15 +2,18 @@
|
||||
import 'dart:convert';
|
||||
|
||||
import 'package:core/core.dart';
|
||||
import 'package:flutter_appauth/flutter_appauth.dart';
|
||||
import 'package:model/model.dart';
|
||||
import 'package:tmail_ui_user/features/login/data/extensions/authentication_token_extension.dart';
|
||||
import 'package:tmail_ui_user/features/login/data/network/endpoint.dart';
|
||||
import 'package:tmail_ui_user/features/login/data/extensions/service_path_extension.dart';
|
||||
|
||||
class OIDCHttpClient {
|
||||
|
||||
final DioClient _dioClient;
|
||||
final FlutterAppAuth _appAuth;
|
||||
|
||||
OIDCHttpClient(this._dioClient);
|
||||
OIDCHttpClient(this._dioClient, this._appAuth);
|
||||
|
||||
Future<OIDCResponse?> checkOIDCIsAvailable(OIDCRequest oidcRequest) async {
|
||||
final result = await _dioClient.get(
|
||||
@@ -33,4 +36,22 @@ class OIDCHttpClient {
|
||||
Future<OIDCConfiguration> getOIDCConfiguration(Uri baseUri) async {
|
||||
return OIDCConfiguration.initial();
|
||||
}
|
||||
|
||||
Future<TokenOIDC> getTokenOIDC(String clientId, String redirectUrl, String discoveryUrl, List<String> scopes) async {
|
||||
final tokenResponse = await _appAuth.authorizeAndExchangeCode(AuthorizationTokenRequest(
|
||||
clientId,
|
||||
redirectUrl,
|
||||
discoveryUrl: discoveryUrl,
|
||||
scopes: scopes,
|
||||
preferEphemeralSession: true));
|
||||
|
||||
log('OIDCHttpClient::getTokenOIDC(): token: ${tokenResponse?.accessToken}');
|
||||
|
||||
if (tokenResponse != null) {
|
||||
final tokenOIDC = tokenResponse.toTokenOIDC();
|
||||
return tokenOIDC.isTokenValid() ? tokenOIDC : TokenOIDC.empty();
|
||||
} else {
|
||||
return TokenOIDC.empty();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,6 @@
|
||||
import 'package:model/oidc/oidc_configuration.dart';
|
||||
import 'package:model/oidc/request/oidc_request.dart';
|
||||
import 'package:model/oidc/token_oidc.dart';
|
||||
import 'package:tmail_ui_user/features/login/data/datasource/authentication_oidc_datasource.dart';
|
||||
import 'package:tmail_ui_user/features/login/domain/repository/authentication_oidc_repository.dart';
|
||||
|
||||
@@ -17,4 +18,9 @@ class AuthenticationOIDCRepositoryImpl extends AuthenticationOIDCRepository {
|
||||
Future<OIDCConfiguration> getOIDCConfiguration(Uri baseUri) {
|
||||
return _oidcDataSource.getOIDCConfiguration(baseUri);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<TokenOIDC> getTokenOIDC(String clientId, String redirectUrl, String discoveryUrl, List<String> scopes) {
|
||||
return _oidcDataSource.getTokenOIDC(clientId, redirectUrl, discoveryUrl, scopes);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user