TF-3278 Handle open app via deep link at MailboxDashboard screen

This commit is contained in:
dab246
2024-11-22 23:30:37 +07:00
committed by Dat H. Pham
parent 8022559bc2
commit 223fdbf1fb
59 changed files with 1058 additions and 429 deletions
@@ -0,0 +1 @@
class UserCancelledLogoutOIDCFlowException implements Exception {}
@@ -4,6 +4,7 @@ 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/model/oidc_configuration_cache.dart';
import 'package:tmail_ui_user/features/login/data/network/config/oidc_constant.dart';
import 'package:tmail_ui_user/main/utils/app_config.dart';
@@ -12,32 +13,29 @@ extension OidcConfigurationExtensions on OIDCConfiguration {
String get redirectUrl {
if (PlatformInfo.isWeb) {
return AppConfig.domainRedirectUrl.endsWith('/')
? AppConfig.domainRedirectUrl + loginRedirectOidcWeb
: '${AppConfig.domainRedirectUrl}/$loginRedirectOidcWeb';
? AppConfig.domainRedirectUrl + OIDCConstant.loginRedirectOidcWeb
: '${AppConfig.domainRedirectUrl}/${OIDCConstant.loginRedirectOidcWeb}';
} else {
return _isSaasAuthority(authority)
return isTWP
? OIDCConstant.twakeWorkplaceRedirectUrl
: redirectOidcMobile;
: OIDCConstant.redirectOidcMobile;
}
}
String get logoutRedirectUrl {
if (PlatformInfo.isWeb) {
if (AppConfig.domainRedirectUrl.endsWith('/')) {
return AppConfig.domainRedirectUrl + logoutRedirectOidcWeb;
return AppConfig.domainRedirectUrl + OIDCConstant.logoutRedirectOidcWeb;
} else {
return '${AppConfig.domainRedirectUrl}/$logoutRedirectOidcWeb';
return '${AppConfig.domainRedirectUrl}/${OIDCConstant.logoutRedirectOidcWeb}';
}
} else {
return _isSaasAuthority(authority)
return isTWP
? OIDCConstant.twakeWorkplaceRedirectUrl
: redirectOidcMobile;
: OIDCConstant.redirectOidcMobile;
}
}
bool _isSaasAuthority(String authority) =>
authority == AppConfig.saasRegistrationUrl;
String get signInTWPUrl => ServicePath(authority)
.withQueryParameters([
StringQueryParameter(
@@ -57,4 +55,8 @@ extension OidcConfigurationExtensions on OIDCConfiguration {
StringQueryParameter('app', OIDCConstant.appParameter),
])
.generateEndpointPath();
OidcConfigurationCache toOidcConfigurationCache() {
return OidcConfigurationCache(authority, isTWP);
}
}
@@ -16,9 +16,9 @@ abstract class AuthenticationOIDCRepository {
Future<TokenOIDC> getStoredTokenOIDC(String tokenIdHash);
Future<void> persistAuthorityOidc(String authority);
Future<void> persistOidcConfiguration(OIDCConfiguration oidcConfiguration);
Future<void> deleteAuthorityOidc();
Future<void> deleteOidcConfiguration();
Future<OIDCConfiguration> getStoredOidcConfiguration();
@@ -17,7 +17,7 @@ class DeleteAuthorityOidcInteractor {
try {
await Future.wait([
_credentialRepository.removeBaseUrl(),
_authenticationOIDCRepository.deleteAuthorityOidc(),
_authenticationOIDCRepository.deleteOidcConfiguration(),
_authenticationOIDCRepository.deleteTokenOIDC(),
]);
return Right(DeleteAuthorityOidcSuccess());
@@ -15,7 +15,7 @@ class GetOIDCConfigurationInteractor {
try {
yield Right<Failure, Success>(GetOIDCConfigurationLoading());
final oidcConfiguration = await _oidcRepository.getOIDCConfiguration(oidcResponse);
await _oidcRepository.persistAuthorityOidc(oidcConfiguration.authority);
await _oidcRepository.persistOidcConfiguration(oidcConfiguration);
yield Right<Failure, Success>(GetOIDCConfigurationSuccess(oidcConfiguration));
} catch (e) {
log('GetOIDCConfigurationInteractor::execute(): ERROR: $e');
@@ -35,7 +35,7 @@ class GetTokenOIDCInteractor {
await Future.wait([
_credentialRepository.saveBaseUrl(baseUrl),
authenticationOIDCRepository.persistTokenOIDC(tokenOIDC),
authenticationOIDCRepository.persistAuthorityOidc(config.authority),
authenticationOIDCRepository.persistOidcConfiguration(config),
]);
await _accountRepository.setCurrentAccount(