diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml
index 07027d3fc..94c635f1e 100644
--- a/android/app/src/main/AndroidManifest.xml
+++ b/android/app/src/main/AndroidManifest.xml
@@ -98,6 +98,18 @@
+
+
+
+
+
+
+
+
+
logoutOidc(TokenId tokenId, OIDCConfiguration config, OIDCDiscoveryResponse oidcRescovery);
+ Future signInTwakeWorkplace(OIDCConfiguration oidcConfiguration);
+
+ Future signUpTwakeWorkplace(OIDCConfiguration oidcConfiguration);
+
factory AuthenticationClientBase({String? tag}) => getAuthenticationClientImplementation(tag: tag);
}
\ No newline at end of file
diff --git a/lib/features/login/data/network/authentication_client/authentication_client_mobile.dart b/lib/features/login/data/network/authentication_client/authentication_client_mobile.dart
index f22968b8a..d0c25b1e4 100644
--- a/lib/features/login/data/network/authentication_client/authentication_client_mobile.dart
+++ b/lib/features/login/data/network/authentication_client/authentication_client_mobile.dart
@@ -1,6 +1,7 @@
import 'package:core/utils/app_logger.dart';
import 'package:flutter_appauth/flutter_appauth.dart';
+import 'package:flutter_web_auth_2/flutter_web_auth_2.dart';
import 'package:get/get.dart';
import 'package:model/oidc/oidc_configuration.dart';
import 'package:model/oidc/response/oidc_discovery_response.dart';
@@ -9,6 +10,7 @@ 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/domain/exceptions/authentication_exception.dart';
import 'package:tmail_ui_user/features/login/domain/extensions/oidc_configuration_extensions.dart';
@@ -96,6 +98,32 @@ class AuthenticationClientMobile implements AuthenticationClientBase {
Future getAuthenticationInfo() {
return Future.value('');
}
+
+ @override
+ Future signInTwakeWorkplace(OIDCConfiguration oidcConfiguration) async {
+ final uri = await FlutterWebAuth2.authenticate(
+ url: oidcConfiguration.singInUrl,
+ callbackUrlScheme: OIDCConstant.twakeWorkplaceUrlScheme,
+ options: const FlutterWebAuth2Options(
+ intentFlags: ephemeralIntentFlags,
+ ),
+ );
+ log('AuthenticationClientMobile::signInTwakeWorkplace():Uri = $uri');
+ return TokenOIDC.fromUri(uri);
+ }
+
+ @override
+ Future signUpTwakeWorkplace(OIDCConfiguration oidcConfiguration) async {
+ final uri = await FlutterWebAuth2.authenticate(
+ url: oidcConfiguration.signUpUrl,
+ callbackUrlScheme: OIDCConstant.twakeWorkplaceUrlScheme,
+ options: const FlutterWebAuth2Options(
+ intentFlags: ephemeralIntentFlags,
+ ),
+ );
+ log('AuthenticationClientMobile::signUpTwakeWorkplace():Uri = $uri');
+ return TokenOIDC.fromUri(uri);
+ }
}
AuthenticationClientBase getAuthenticationClientImplementation({String? tag}) =>
diff --git a/lib/features/login/data/network/authentication_client/authentication_client_web.dart b/lib/features/login/data/network/authentication_client/authentication_client_web.dart
index 463f79a11..1e3146a00 100644
--- a/lib/features/login/data/network/authentication_client/authentication_client_web.dart
+++ b/lib/features/login/data/network/authentication_client/authentication_client_web.dart
@@ -106,6 +106,16 @@ class AuthenticationClientWeb implements AuthenticationClientBase {
throw CanNotAuthenticationInfoOnWeb();
}
}
+
+ @override
+ Future signUpTwakeWorkplace(OIDCConfiguration oidcConfiguration) {
+ throw UnimplementedError();
+ }
+
+ @override
+ Future signInTwakeWorkplace(OIDCConfiguration oidcConfiguration) {
+ throw UnimplementedError();
+ }
}
AuthenticationClientBase getAuthenticationClientImplementation({String? tag}) =>
diff --git a/lib/features/login/data/network/config/oidc_constant.dart b/lib/features/login/data/network/config/oidc_constant.dart
index 27793be72..2e4790c58 100644
--- a/lib/features/login/data/network/config/oidc_constant.dart
+++ b/lib/features/login/data/network/config/oidc_constant.dart
@@ -1,4 +1,4 @@
-import 'package:core/core.dart';
+import 'package:core/utils/platform_info.dart';
import 'package:tmail_ui_user/main/utils/app_config.dart';
class OIDCConstant {
@@ -6,10 +6,11 @@ class OIDCConstant {
static List get oidcScope => ['openid', 'profile', 'email', 'offline_access'];
static const keyAuthorityOidc = 'KEY_AUTHORITY_OIDC';
static const authResponseKey = "auth_info";
+ static const String twakeWorkplaceUrlScheme = 'twakemail.mobile';
+ static const String twakeWorkplaceRedirectUrl = '$twakeWorkplaceUrlScheme://redirect';
+ static const String appParameter = 'tmail';
+ static const String postRegisteredRedirectUrlPathParams = 'post_registered_redirect_url';
+ static const String postLoginRedirectUrlPathParams = 'post_login_redirect_url';
static String get clientId => PlatformInfo.isWeb ? AppConfig.webOidcClientId : mobileOidcClientId;
-
- static String get saasClientId => PlatformInfo.isMobile
- ? mobileOidcClientId
- : '';
}
\ No newline at end of file
diff --git a/lib/features/login/domain/extensions/oidc_configuration_extensions.dart b/lib/features/login/domain/extensions/oidc_configuration_extensions.dart
index fef03e30f..3a0312f7c 100644
--- a/lib/features/login/domain/extensions/oidc_configuration_extensions.dart
+++ b/lib/features/login/domain/extensions/oidc_configuration_extensions.dart
@@ -1,6 +1,10 @@
+import 'package:core/data/model/query/query_parameter.dart';
+import 'package:core/data/network/config/service_path.dart';
import 'package:core/utils/platform_info.dart';
import 'package:model/oidc/oidc_configuration.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/main/utils/app_config.dart';
extension OidcConfigurationExtensions on OIDCConfiguration {
@@ -28,4 +32,24 @@ extension OidcConfigurationExtensions on OIDCConfiguration {
return redirectOidcMobile;
}
}
+
+ String get singInUrl => ServicePath(authority)
+ .withQueryParameters([
+ StringQueryParameter(
+ OIDCConstant.postLoginRedirectUrlPathParams,
+ OIDCConstant.twakeWorkplaceRedirectUrl,
+ ),
+ StringQueryParameter('app', OIDCConstant.appParameter),
+ ])
+ .generateEndpointPath();
+
+ String get signUpUrl => ServicePath(authority)
+ .withQueryParameters([
+ StringQueryParameter(
+ OIDCConstant.postRegisteredRedirectUrlPathParams,
+ OIDCConstant.twakeWorkplaceRedirectUrl,
+ ),
+ StringQueryParameter('app', OIDCConstant.appParameter),
+ ])
+ .generateEndpointPath();
}
\ No newline at end of file
diff --git a/lib/features/starting_page/data/datasource/saas_authentication_datasource.dart b/lib/features/starting_page/data/datasource/saas_authentication_datasource.dart
index 2ac9a755f..93b31654b 100644
--- a/lib/features/starting_page/data/datasource/saas_authentication_datasource.dart
+++ b/lib/features/starting_page/data/datasource/saas_authentication_datasource.dart
@@ -3,5 +3,7 @@ import 'package:model/oidc/oidc_configuration.dart';
import 'package:model/oidc/token_oidc.dart';
abstract class SaasAuthenticationDataSource {
- Future signIn(OIDCConfiguration oidcConfiguration);
+ Future signInTwakeWorkplace(OIDCConfiguration oidcConfiguration);
+
+ Future signUpTwakeWorkplace(OIDCConfiguration oidcConfiguration);
}
\ No newline at end of file
diff --git a/lib/features/starting_page/data/datasource_impl/saas_authentication_datasource_impl.dart b/lib/features/starting_page/data/datasource_impl/saas_authentication_datasource_impl.dart
index db533c33f..1d59ec59e 100644
--- a/lib/features/starting_page/data/datasource_impl/saas_authentication_datasource_impl.dart
+++ b/lib/features/starting_page/data/datasource_impl/saas_authentication_datasource_impl.dart
@@ -1,7 +1,6 @@
import 'package:model/oidc/oidc_configuration.dart';
import 'package:model/oidc/token_oidc.dart';
import 'package:tmail_ui_user/features/login/data/network/authentication_client/authentication_client_base.dart';
-import 'package:tmail_ui_user/features/login/domain/extensions/oidc_configuration_extensions.dart';
import 'package:tmail_ui_user/features/starting_page/data/datasource/saas_authentication_datasource.dart';
import 'package:tmail_ui_user/main/exceptions/exception_thrower.dart';
@@ -16,14 +15,16 @@ class SaasAuthenticationDataSourceImpl extends SaasAuthenticationDataSource {
);
@override
- Future signIn(OIDCConfiguration oidcConfiguration) {
+ Future signInTwakeWorkplace(OIDCConfiguration oidcConfiguration) {
return Future.sync(() async {
- return await _authenticationClient.getTokenOIDC(
- oidcConfiguration.clientId,
- oidcConfiguration.redirectUrl,
- oidcConfiguration.discoveryUrl,
- oidcConfiguration.scopes,
- );
+ return await _authenticationClient.signInTwakeWorkplace(oidcConfiguration);
+ }).catchError(_exceptionThrower.throwException);
+ }
+
+ @override
+ Future signUpTwakeWorkplace(OIDCConfiguration oidcConfiguration) {
+ return Future.sync(() async {
+ return await _authenticationClient.signUpTwakeWorkplace(oidcConfiguration);
}).catchError(_exceptionThrower.throwException);
}
}
\ No newline at end of file
diff --git a/lib/features/starting_page/data/repository/saas_authentication_repository_impl.dart b/lib/features/starting_page/data/repository/saas_authentication_repository_impl.dart
index d334e8979..6ce779c8a 100644
--- a/lib/features/starting_page/data/repository/saas_authentication_repository_impl.dart
+++ b/lib/features/starting_page/data/repository/saas_authentication_repository_impl.dart
@@ -10,7 +10,12 @@ class SaasAuthenticationRepositoryImpl extends SaasAuthenticationRepository {
SaasAuthenticationRepositoryImpl(this._saasAuthenticationDataSource);
@override
- Future signIn(OIDCConfiguration oidcConfiguration) {
- return _saasAuthenticationDataSource.signIn(oidcConfiguration);
+ Future signInTwakeWorkplace(OIDCConfiguration oidcConfiguration) {
+ return _saasAuthenticationDataSource.signInTwakeWorkplace(oidcConfiguration);
+ }
+
+ @override
+ Future signUpTwakeWorkplace(OIDCConfiguration oidcConfiguration) {
+ return _saasAuthenticationDataSource.signUpTwakeWorkplace(oidcConfiguration);
}
}
\ No newline at end of file
diff --git a/lib/features/starting_page/domain/repository/saas_authentication_repository.dart b/lib/features/starting_page/domain/repository/saas_authentication_repository.dart
index d5ef10623..a59a1b0ff 100644
--- a/lib/features/starting_page/domain/repository/saas_authentication_repository.dart
+++ b/lib/features/starting_page/domain/repository/saas_authentication_repository.dart
@@ -2,5 +2,7 @@ import 'package:model/oidc/oidc_configuration.dart';
import 'package:model/oidc/token_oidc.dart';
abstract class SaasAuthenticationRepository {
- Future signIn(OIDCConfiguration oidcConfiguration);
+ Future signInTwakeWorkplace(OIDCConfiguration oidcConfiguration);
+
+ Future signUpTwakeWorkplace(OIDCConfiguration oidcConfiguration);
}
\ No newline at end of file
diff --git a/lib/features/starting_page/domain/state/sign_in_saas_state.dart b/lib/features/starting_page/domain/state/sign_in_twake_workplace_state.dart
similarity index 53%
rename from lib/features/starting_page/domain/state/sign_in_saas_state.dart
rename to lib/features/starting_page/domain/state/sign_in_twake_workplace_state.dart
index 67aa56f71..eb8397575 100644
--- a/lib/features/starting_page/domain/state/sign_in_saas_state.dart
+++ b/lib/features/starting_page/domain/state/sign_in_twake_workplace_state.dart
@@ -3,19 +3,19 @@ import 'package:core/presentation/state/success.dart';
import 'package:model/oidc/oidc_configuration.dart';
import 'package:model/oidc/token_oidc.dart';
-class SignInSaasLoading extends LoadingState {}
+class SignInTwakeWorkplaceLoading extends LoadingState {}
-class SignInSaasSuccess extends Success {
+class SignInTwakeWorkplaceSuccess extends Success {
final TokenOIDC tokenOIDC;
final Uri baseUri;
final OIDCConfiguration oidcConfiguration;
- SignInSaasSuccess(this.tokenOIDC, this.baseUri, this.oidcConfiguration);
+ SignInTwakeWorkplaceSuccess(this.tokenOIDC, this.baseUri, this.oidcConfiguration);
@override
List