TF-3278 Handle open tmail app deep link but it was installed but not signed in
This commit is contained in:
@@ -18,6 +18,7 @@ import 'package:tmail_ui_user/features/caching/utils/local_storage_manager.dart'
|
||||
import 'package:tmail_ui_user/features/caching/utils/session_storage_manager.dart';
|
||||
import 'package:tmail_ui_user/features/sending_queue/presentation/utils/sending_queue_isolate_manager.dart';
|
||||
import 'package:tmail_ui_user/main/utils/app_config.dart';
|
||||
import 'package:tmail_ui_user/main/deep_links/deep_links_manager.dart';
|
||||
import 'package:tmail_ui_user/main/utils/email_receive_manager.dart';
|
||||
import 'package:tmail_ui_user/main/utils/ios_notification_manager.dart';
|
||||
import 'package:tmail_ui_user/main/utils/toast_manager.dart';
|
||||
@@ -75,6 +76,9 @@ class CoreBindings extends Bindings {
|
||||
if (PlatformInfo.isIOS) {
|
||||
Get.put(IOSNotificationManager());
|
||||
}
|
||||
if (PlatformInfo.isMobile) {
|
||||
Get.put(DeepLinksManager());
|
||||
}
|
||||
Get.put(PreviewEmlFileUtils());
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,45 @@
|
||||
import 'package:equatable/equatable.dart';
|
||||
import 'package:model/model.dart';
|
||||
|
||||
class DeepLinkData with EquatableMixin {
|
||||
final String path;
|
||||
final String? accessToken;
|
||||
final String? refreshToken;
|
||||
final String? idToken;
|
||||
final int? expiresIn;
|
||||
final String? username;
|
||||
|
||||
DeepLinkData({
|
||||
required this.path,
|
||||
this.accessToken,
|
||||
this.refreshToken,
|
||||
this.idToken,
|
||||
this.expiresIn,
|
||||
this.username,
|
||||
});
|
||||
|
||||
bool isValidToken() => accessToken?.isNotEmpty == true && username?.isNotEmpty == true;
|
||||
|
||||
TokenOIDC getTokenOIDC() {
|
||||
final expiredTime = expiresIn == null
|
||||
? null
|
||||
: DateTime.now().add(Duration(seconds: expiresIn!));
|
||||
|
||||
return TokenOIDC(
|
||||
accessToken!,
|
||||
TokenId(idToken ?? ''),
|
||||
refreshToken ?? '',
|
||||
expiredTime: expiredTime,
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
List<Object?> get props => [
|
||||
path,
|
||||
accessToken,
|
||||
refreshToken,
|
||||
idToken,
|
||||
expiresIn,
|
||||
username,
|
||||
];
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
import 'dart:async';
|
||||
|
||||
import 'package:app_links/app_links.dart';
|
||||
import 'package:core/utils/app_logger.dart';
|
||||
import 'package:tmail_ui_user/features/login/data/network/config/oidc_constant.dart';
|
||||
import 'package:tmail_ui_user/main/deep_links/deep_link_data.dart';
|
||||
|
||||
class DeepLinksManager {
|
||||
Future<DeepLinkData?> getDeepLinkData() async {
|
||||
final uriLink = await AppLinks().getInitialLink();
|
||||
if (uriLink == null) return null;
|
||||
|
||||
final deepLinkData = parseDeepLink(uriLink.toString());
|
||||
return deepLinkData;
|
||||
}
|
||||
|
||||
DeepLinkData? parseDeepLink(String url) {
|
||||
try {
|
||||
final uri = Uri.parse(url.replaceFirst(OIDCConstant.twakeWorkplaceUrlScheme, 'https'));
|
||||
|
||||
final accessToken = uri.queryParameters['access_token'] ?? '';
|
||||
final refreshToken = uri.queryParameters['refresh_token'] ?? '';
|
||||
final idToken = uri.queryParameters['id_token'] ?? '';
|
||||
final expiresInStr = uri.queryParameters['expires_in'] ?? '';
|
||||
final username = uri.queryParameters['username'] ?? '';
|
||||
|
||||
final expiresIn = int.tryParse(expiresInStr);
|
||||
|
||||
return DeepLinkData(
|
||||
path: uri.path,
|
||||
accessToken: accessToken,
|
||||
refreshToken: refreshToken,
|
||||
idToken: idToken,
|
||||
expiresIn: expiresIn,
|
||||
username: username,
|
||||
);
|
||||
} catch (e) {
|
||||
logError('DeepLinksManager::parseDeepLink:Exception = $e');
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -19,6 +19,7 @@ class AppConfig {
|
||||
static const String linagoraPrivacyUrl = 'https://www.linagora.com/en/legal/privacy';
|
||||
static const String saasRegistrationUrl = 'https://sign-up.twake.app';
|
||||
static const String saasJmapServerUrl = 'https://jmap.twake.app';
|
||||
static const String openAppHostDeepLink = 'openApp';
|
||||
|
||||
static String get baseUrl => dotenv.get('SERVER_URL', fallback: '');
|
||||
static String get domainRedirectUrl => dotenv.get('DOMAIN_REDIRECT_URL', fallback: '');
|
||||
|
||||
Reference in New Issue
Block a user