diff --git a/ios/Runner/Info.plist b/ios/Runner/Info.plist
index a2d9954c8..f7bbc06a8 100644
--- a/ios/Runner/Info.plist
+++ b/ios/Runner/Info.plist
@@ -31,7 +31,7 @@
CFBundleURLSchemes
ShareMedia-$(PRODUCT_BUNDLE_IDENTIFIER)
- teammail-mobile
+ teammail.mobile
diff --git a/lib/features/login/data/datasource/authentication_oidc_datasource.dart b/lib/features/login/data/datasource/authentication_oidc_datasource.dart
index 1f474497b..53e91f8bc 100644
--- a/lib/features/login/data/datasource/authentication_oidc_datasource.dart
+++ b/lib/features/login/data/datasource/authentication_oidc_datasource.dart
@@ -5,4 +5,6 @@ abstract class AuthenticationOIDCDataSource {
Future checkOIDCIsAvailable(OIDCRequest oidcRequest);
Future getOIDCConfiguration(Uri baseUri);
+
+ Future getTokenOIDC(String clientId, String redirectUrl, String discoveryUrl, List scopes);
}
\ No newline at end of file
diff --git a/lib/features/login/data/datasource_impl/authentication_oidc_datasource_impl.dart b/lib/features/login/data/datasource_impl/authentication_oidc_datasource_impl.dart
index 05e4dba31..3a22cca86 100644
--- a/lib/features/login/data/datasource_impl/authentication_oidc_datasource_impl.dart
+++ b/lib/features/login/data/datasource_impl/authentication_oidc_datasource_impl.dart
@@ -26,4 +26,13 @@ class AuthenticationOIDCDataSourceImpl extends AuthenticationOIDCDataSource {
throw error;
});
}
+
+ @override
+ Future getTokenOIDC(String clientId, String redirectUrl, String discoveryUrl, List scopes) {
+ return Future.sync(() async {
+ return await _oidcHttpClient.getTokenOIDC(clientId, redirectUrl, discoveryUrl, scopes);
+ }).catchError((error) {
+ throw error;
+ });
+ }
}
\ No newline at end of file
diff --git a/lib/features/login/data/extensions/authentication_token_extension.dart b/lib/features/login/data/extensions/authentication_token_extension.dart
new file mode 100644
index 000000000..fed776cd7
--- /dev/null
+++ b/lib/features/login/data/extensions/authentication_token_extension.dart
@@ -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());
+ }
+}
\ No newline at end of file
diff --git a/lib/features/login/data/network/oidc_http_client.dart b/lib/features/login/data/network/oidc_http_client.dart
index 142b6feaa..ad335827b 100644
--- a/lib/features/login/data/network/oidc_http_client.dart
+++ b/lib/features/login/data/network/oidc_http_client.dart
@@ -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 checkOIDCIsAvailable(OIDCRequest oidcRequest) async {
final result = await _dioClient.get(
@@ -33,4 +36,22 @@ class OIDCHttpClient {
Future getOIDCConfiguration(Uri baseUri) async {
return OIDCConfiguration.initial();
}
+
+ Future getTokenOIDC(String clientId, String redirectUrl, String discoveryUrl, List 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();
+ }
+ }
}
\ No newline at end of file
diff --git a/lib/features/login/data/repository/authentication_oidc_repository_impl.dart b/lib/features/login/data/repository/authentication_oidc_repository_impl.dart
index 2de8dcb19..e4de26706 100644
--- a/lib/features/login/data/repository/authentication_oidc_repository_impl.dart
+++ b/lib/features/login/data/repository/authentication_oidc_repository_impl.dart
@@ -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 getOIDCConfiguration(Uri baseUri) {
return _oidcDataSource.getOIDCConfiguration(baseUri);
}
+
+ @override
+ Future getTokenOIDC(String clientId, String redirectUrl, String discoveryUrl, List scopes) {
+ return _oidcDataSource.getTokenOIDC(clientId, redirectUrl, discoveryUrl, scopes);
+ }
}
\ No newline at end of file
diff --git a/lib/features/login/domain/repository/authentication_oidc_repository.dart b/lib/features/login/domain/repository/authentication_oidc_repository.dart
index b52915522..699076b6a 100644
--- a/lib/features/login/domain/repository/authentication_oidc_repository.dart
+++ b/lib/features/login/domain/repository/authentication_oidc_repository.dart
@@ -1,9 +1,10 @@
-import 'package:model/oidc/oidc_configuration.dart';
-import 'package:model/oidc/request/oidc_request.dart';
+import 'package:model/model.dart';
abstract class AuthenticationOIDCRepository {
Future checkOIDCIsAvailable(OIDCRequest oidcRequest);
Future getOIDCConfiguration(Uri baseUri);
+
+ Future getTokenOIDC(String clientId, String redirectUrl, String discoveryUrl, List scopes);
}
\ No newline at end of file
diff --git a/lib/features/login/domain/state/get_token_oidc_state.dart b/lib/features/login/domain/state/get_token_oidc_state.dart
new file mode 100644
index 000000000..6b0e8b5a1
--- /dev/null
+++ b/lib/features/login/domain/state/get_token_oidc_state.dart
@@ -0,0 +1,21 @@
+import 'package:core/core.dart';
+import 'package:model/model.dart';
+
+class GetTokenOIDCSuccess extends UIState {
+
+ final TokenOIDC tokenOIDC;
+
+ GetTokenOIDCSuccess(this.tokenOIDC);
+
+ @override
+ List