From 831f34f13745c59336a660d8ce8604abe35ecb6b Mon Sep 17 00:00:00 2001 From: dab246 Date: Wed, 8 Jun 2022 11:25:40 +0700 Subject: [PATCH] TF-624 Setup DOMAIN_REDIRECT_URL/WEB_OIDC_CLIENT_ID in env file --- env.file | 4 ++- .../download_attachments_interactor.dart | 1 + .../oidc_configuration_extensions.dart | 31 +++++++++++++++++++ .../authentication_client_mobile.dart | 1 + .../authentication_client_web.dart | 4 +-- .../config/authorization_interceptors.dart | 1 + .../data/network/config/oidc_constant.dart | 4 +-- ...thenticate_oidc_on_browser_interactor.dart | 1 + .../usecases/get_token_oidc_interactor.dart | 1 + .../refresh_token_oidc_interactor.dart | 1 + lib/main/utils/app_config.dart | 2 ++ model/lib/oidc/oidc_configuration.dart | 13 +++----- 12 files changed, 50 insertions(+), 14 deletions(-) create mode 100644 lib/features/login/data/extensions/oidc_configuration_extensions.dart diff --git a/env.file b/env.file index 9bf93db70..71638e979 100644 --- a/env.file +++ b/env.file @@ -1 +1,3 @@ -SERVER_URL=http://localhost \ No newline at end of file +SERVER_URL=http://localhost +DOMAIN_REDIRECT_URL=http://localhost:3000 +WEB_OIDC_CLIENT_ID=teammail-web \ No newline at end of file diff --git a/lib/features/email/domain/usecases/download_attachments_interactor.dart b/lib/features/email/domain/usecases/download_attachments_interactor.dart index 8a99f4204..c62c89bfe 100644 --- a/lib/features/email/domain/usecases/download_attachments_interactor.dart +++ b/lib/features/email/domain/usecases/download_attachments_interactor.dart @@ -4,6 +4,7 @@ import 'package:dartz/dartz.dart'; import 'package:jmap_dart_client/jmap/account_id.dart'; import 'package:tmail_ui_user/features/email/domain/repository/email_repository.dart'; import 'package:tmail_ui_user/features/email/domain/state/download_attachments_state.dart'; +import 'package:tmail_ui_user/features/login/data/extensions/oidc_configuration_extensions.dart'; import 'package:tmail_ui_user/features/login/data/network/config/authorization_interceptors.dart'; import 'package:tmail_ui_user/features/login/domain/exceptions/authentication_exception.dart'; import 'package:tmail_ui_user/features/login/domain/repository/account_repository.dart'; diff --git a/lib/features/login/data/extensions/oidc_configuration_extensions.dart b/lib/features/login/data/extensions/oidc_configuration_extensions.dart new file mode 100644 index 000000000..c88facfd5 --- /dev/null +++ b/lib/features/login/data/extensions/oidc_configuration_extensions.dart @@ -0,0 +1,31 @@ + +import 'package:core/utils/build_utils.dart'; +import 'package:model/model.dart'; +import 'package:tmail_ui_user/main/utils/app_config.dart'; + +extension OidcConfigurationExtensions on OIDCConfiguration { + + String get redirectUrl { + if (BuildUtils.isWeb) { + if (AppConfig.domainRedirectUrl.endsWith('/')) { + return AppConfig.domainRedirectUrl + loginRedirectOidcWeb; + } else { + return AppConfig.domainRedirectUrl + '/' + loginRedirectOidcWeb; + } + } else { + return redirectOidcMobile; + } + } + + String get logoutRedirectUrl { + if (BuildUtils.isWeb) { + if (AppConfig.domainRedirectUrl.endsWith('/')) { + return AppConfig.domainRedirectUrl + logoutRedirectOidcWeb; + } else { + return AppConfig.domainRedirectUrl + '/' + logoutRedirectOidcWeb; + } + } else { + return redirectOidcMobile; + } + } +} \ 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 b9e6f5327..694daaf9c 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 @@ -6,6 +6,7 @@ import 'package:model/oidc/oidc_configuration.dart'; import 'package:model/oidc/token_id.dart'; 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/oidc_configuration_extensions.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/domain/exceptions/authentication_exception.dart'; 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 684380a3a..348e6ecfc 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 @@ -2,8 +2,10 @@ import 'package:core/utils/app_logger.dart'; import 'package:get/get.dart'; import 'package:tmail_ui_user/features/login/data/extensions/authentication_token_extension.dart'; +import 'package:tmail_ui_user/features/login/data/extensions/oidc_configuration_extensions.dart'; import 'package:tmail_ui_user/features/login/data/extensions/token_response_extension.dart'; import 'package:tmail_ui_user/features/login/data/network/config/oidc_constant.dart'; +import 'package:tmail_ui_user/features/login/data/utils/library_platform/app_auth_plugin/app_auth_plugin.dart'; import 'package:tmail_ui_user/features/login/domain/exceptions/authentication_exception.dart'; import 'package:universal_html/html.dart' as html; import 'package:tmail_ui_user/features/login/data/network/authentication_client/authentication_client_base.dart'; @@ -12,8 +14,6 @@ import 'package:model/oidc/oidc_configuration.dart'; import 'package:model/oidc/token_id.dart'; import 'package:model/oidc/token_oidc.dart'; -import '../../utils/library_platform/app_auth_plugin/app_auth_plugin.dart'; - class AuthenticationClientWeb implements AuthenticationClientBase { final AppAuthWebPlugin _appAuthWeb; diff --git a/lib/features/login/data/network/config/authorization_interceptors.dart b/lib/features/login/data/network/config/authorization_interceptors.dart index ada55271a..a9c5af296 100644 --- a/lib/features/login/data/network/config/authorization_interceptors.dart +++ b/lib/features/login/data/network/config/authorization_interceptors.dart @@ -8,6 +8,7 @@ import 'package:model/account/authentication_type.dart'; import 'package:model/oidc/oidc_configuration.dart'; import 'package:model/oidc/token.dart'; import 'package:model/oidc/token_oidc.dart'; +import 'package:tmail_ui_user/features/login/data/extensions/oidc_configuration_extensions.dart'; import 'package:tmail_ui_user/features/login/data/local/account_cache_manager.dart'; import 'package:tmail_ui_user/features/login/data/local/token_oidc_cache_manager.dart'; import 'package:tmail_ui_user/features/login/data/network/authentication_client/authentication_client_base.dart'; diff --git a/lib/features/login/data/network/config/oidc_constant.dart b/lib/features/login/data/network/config/oidc_constant.dart index 8212338ed..d54846230 100644 --- a/lib/features/login/data/network/config/oidc_constant.dart +++ b/lib/features/login/data/network/config/oidc_constant.dart @@ -1,11 +1,11 @@ import 'package:core/core.dart'; +import 'package:tmail_ui_user/main/utils/app_config.dart'; class OIDCConstant { static String get mobileOidcClientId => 'teammail-mobile'; - static String get webOidcClientId => 'teammail-web'; static List get oidcScope => ['openid', 'offline_access']; static const keyAuthorityOidc = 'KEY_AUTHORITY_OIDC'; static const authResponseKey = "auth_info"; - static String get clientId => BuildUtils.isWeb ? webOidcClientId : mobileOidcClientId; + static String get clientId => BuildUtils.isWeb ? AppConfig.webOidcClientId : mobileOidcClientId; } \ No newline at end of file diff --git a/lib/features/login/domain/usecases/authenticate_oidc_on_browser_interactor.dart b/lib/features/login/domain/usecases/authenticate_oidc_on_browser_interactor.dart index 5ef8caada..24dcf9d07 100644 --- a/lib/features/login/domain/usecases/authenticate_oidc_on_browser_interactor.dart +++ b/lib/features/login/domain/usecases/authenticate_oidc_on_browser_interactor.dart @@ -4,6 +4,7 @@ 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:tmail_ui_user/features/login/data/extensions/oidc_configuration_extensions.dart'; import 'package:tmail_ui_user/features/login/domain/repository/authentication_oidc_repository.dart'; import 'package:tmail_ui_user/features/login/domain/state/authenticate_oidc_on_browser_state.dart'; diff --git a/lib/features/login/domain/usecases/get_token_oidc_interactor.dart b/lib/features/login/domain/usecases/get_token_oidc_interactor.dart index b148aa354..9f3b91c19 100644 --- a/lib/features/login/domain/usecases/get_token_oidc_interactor.dart +++ b/lib/features/login/domain/usecases/get_token_oidc_interactor.dart @@ -7,6 +7,7 @@ import 'package:model/account/account.dart'; import 'package:model/account/authentication_type.dart'; import 'package:model/oidc/oidc_configuration.dart'; import 'package:model/oidc/token_oidc.dart'; +import 'package:tmail_ui_user/features/login/data/extensions/oidc_configuration_extensions.dart'; import 'package:tmail_ui_user/features/login/domain/repository/account_repository.dart'; import 'package:tmail_ui_user/features/login/domain/repository/authentication_oidc_repository.dart'; import 'package:tmail_ui_user/features/login/domain/repository/credential_repository.dart'; diff --git a/lib/features/login/domain/usecases/refresh_token_oidc_interactor.dart b/lib/features/login/domain/usecases/refresh_token_oidc_interactor.dart index 2e342ad10..524789158 100644 --- a/lib/features/login/domain/usecases/refresh_token_oidc_interactor.dart +++ b/lib/features/login/domain/usecases/refresh_token_oidc_interactor.dart @@ -2,6 +2,7 @@ import 'package:core/core.dart'; import 'package:dartz/dartz.dart'; import 'package:model/model.dart'; +import 'package:tmail_ui_user/features/login/data/extensions/oidc_configuration_extensions.dart'; import 'package:tmail_ui_user/features/login/domain/repository/account_repository.dart'; import 'package:tmail_ui_user/features/login/domain/repository/authentication_oidc_repository.dart'; import 'package:tmail_ui_user/features/login/domain/state/refresh_token_oidc_state.dart'; diff --git a/lib/main/utils/app_config.dart b/lib/main/utils/app_config.dart index bd4b17aab..7648c88f9 100644 --- a/lib/main/utils/app_config.dart +++ b/lib/main/utils/app_config.dart @@ -2,4 +2,6 @@ import 'package:flutter_dotenv/flutter_dotenv.dart'; class AppConfig { static String get baseUrl => dotenv.get('SERVER_URL', fallback: ''); + static String get domainRedirectUrl => dotenv.get('DOMAIN_REDIRECT_URL', fallback: ''); + static String get webOidcClientId => dotenv.get('WEB_OIDC_CLIENT_ID', fallback: ''); } \ No newline at end of file diff --git a/model/lib/oidc/oidc_configuration.dart b/model/lib/oidc/oidc_configuration.dart index 552a405bc..5d992c798 100644 --- a/model/lib/oidc/oidc_configuration.dart +++ b/model/lib/oidc/oidc_configuration.dart @@ -1,12 +1,11 @@ -import 'package:core/utils/build_utils.dart'; import 'package:equatable/equatable.dart'; class OIDCConfiguration with EquatableMixin { - static const redirectOidcMobile = 'teammail.mobile://oauthredirect'; - static const redirectOidcWeb = 'http://localhost:3000/login-callback.html'; - static const logoutRedirectOidcWeb = 'http://localhost:3000/logout-callback.html'; - static const wellKnownOpenId = '.well-known/openid-configuration'; + final redirectOidcMobile = 'teammail.mobile://oauthredirect'; + final wellKnownOpenId = '.well-known/openid-configuration'; + final loginRedirectOidcWeb = 'login-callback.html'; + final logoutRedirectOidcWeb = 'logout-callback.html'; final String authority; final String clientId; @@ -26,10 +25,6 @@ class OIDCConfiguration with EquatableMixin { } } - String get redirectUrl => BuildUtils.isWeb ? redirectOidcWeb : redirectOidcMobile; - - String get logoutRedirectUrl => BuildUtils.isWeb ? logoutRedirectOidcWeb : redirectOidcMobile; - String get clientIdHash => clientId.hashCode.toString(); @override