From 713c924c670d021a552bdae56be1f156fcdd15e6 Mon Sep 17 00:00:00 2001 From: dab246 Date: Mon, 13 Nov 2023 19:24:04 +0700 Subject: [PATCH] TF-2311 Set timeout when get session Signed-off-by: dab246 Signed-off-by: dab246 Signed-off-by: dab246 (cherry picked from commit 3e2c22c65101ee08e0e48ef0e4a737e510b387fb) --- .../config/authorization_interceptors.dart | 10 ++++----- .../network/config/time_out_interceptors.dart | 22 +++++++++++++++++++ lib/features/login/data/network/endpoint.dart | 1 + .../bindings/network/network_bindings.dart | 3 +++ .../network/network_isolate_binding.dart | 2 ++ 5 files changed, 33 insertions(+), 5 deletions(-) create mode 100644 lib/features/login/data/network/config/time_out_interceptors.dart diff --git a/lib/features/login/data/network/config/authorization_interceptors.dart b/lib/features/login/data/network/config/authorization_interceptors.dart index 95c81a36f..09123c0c0 100644 --- a/lib/features/login/data/network/config/authorization_interceptors.dart +++ b/lib/features/login/data/network/config/authorization_interceptors.dart @@ -19,7 +19,7 @@ import 'package:tmail_ui_user/features/upload/data/network/file_uploader.dart'; class AuthorizationInterceptors extends QueuedInterceptorsWrapper { static const int _maxRetryCount = 3; - static const String RETRY_KEY = 'Retry'; + static const String _retryKey = 'Retry'; final Dio _dio; final AuthenticationClientBase _authenticationClient; @@ -59,7 +59,7 @@ class AuthorizationInterceptors extends QueuedInterceptorsWrapper { @override void onRequest(RequestOptions options, RequestInterceptorHandler handler) { - log('AuthorizationInterceptors::onRequest():data: ${options.data} | header: ${options.headers}'); + log('AuthorizationInterceptors::onRequest():url: ${options.uri} | data: ${options.data} | header: ${options.headers}'); switch(_authenticationType) { case AuthenticationType.basic: if (_authorization != null) { @@ -83,7 +83,7 @@ class AuthorizationInterceptors extends QueuedInterceptorsWrapper { try { final requestOptions = err.requestOptions; final extraInRequest = requestOptions.extra; - var retries = extraInRequest[RETRY_KEY] ?? 0; + var retries = extraInRequest[_retryKey] ?? 0; if (_validateToRefreshToken(err)) { log('AuthorizationInterceptors::onError:>> _validateToRefreshToken'); @@ -145,7 +145,7 @@ class AuthorizationInterceptors extends QueuedInterceptorsWrapper { retries++; requestOptions.headers[HttpHeaders.authorizationHeader] = _getTokenAsBearerHeader(_token!.token); - requestOptions.extra = {RETRY_KEY: retries}; + requestOptions.extra = {_retryKey: retries}; final response = await _dio.fetch(requestOptions); return handler.resolve(response); @@ -218,4 +218,4 @@ class AuthorizationInterceptors extends QueuedInterceptorsWrapper { _configOIDC = null; _authenticationType = AuthenticationType.none; } -} +} \ No newline at end of file diff --git a/lib/features/login/data/network/config/time_out_interceptors.dart b/lib/features/login/data/network/config/time_out_interceptors.dart new file mode 100644 index 000000000..adae5cf1f --- /dev/null +++ b/lib/features/login/data/network/config/time_out_interceptors.dart @@ -0,0 +1,22 @@ +import 'package:core/utils/app_logger.dart'; +import 'package:core/utils/platform_info.dart'; +import 'package:dio/dio.dart'; +import 'package:tmail_ui_user/features/login/data/network/endpoint.dart'; + +class TimeOutInterceptors extends InterceptorsWrapper { + + static const Duration _sessionConnectTimeout = Duration(milliseconds: 5000); + static const Duration _sessionReceiveTimeout = Duration(milliseconds: 5000); + + @override + void onRequest(RequestOptions options, RequestInterceptorHandler handler) { + log('TimeOutInterceptors::onRequest():url: ${options.uri}'); + if (PlatformInfo.isMobile && _validateToGetSession(options.uri)) { + options.connectTimeout = _sessionConnectTimeout; + options.receiveTimeout = _sessionReceiveTimeout; + } + super.onRequest(options, handler); + } + + bool _validateToGetSession(Uri uri) => uri.toString().endsWith(Endpoint.sessionPath.path); +} diff --git a/lib/features/login/data/network/endpoint.dart b/lib/features/login/data/network/endpoint.dart index 3429b27d4..e3209b692 100644 --- a/lib/features/login/data/network/endpoint.dart +++ b/lib/features/login/data/network/endpoint.dart @@ -2,4 +2,5 @@ import 'package:core/data/network/config/service_path.dart'; class Endpoint { static final ServicePath webFinger = ServicePath('/.well-known/webfinger'); + static final ServicePath sessionPath = ServicePath('/.well-known/jmap'); } diff --git a/lib/main/bindings/network/network_bindings.dart b/lib/main/bindings/network/network_bindings.dart index 7257c6d0e..32b4fc27a 100644 --- a/lib/main/bindings/network/network_bindings.dart +++ b/lib/main/bindings/network/network_bindings.dart @@ -16,6 +16,7 @@ import 'package:tmail_ui_user/features/login/data/local/account_cache_manager.da 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'; import 'package:tmail_ui_user/features/login/data/network/config/authorization_interceptors.dart'; +import 'package:tmail_ui_user/features/login/data/network/config/time_out_interceptors.dart'; import 'package:tmail_ui_user/features/login/data/network/oidc_http_client.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/mailbox/data/network/mailbox_api.dart'; @@ -71,12 +72,14 @@ class NetworkBindings extends Bindings { Get.find(), )); Get.put(LocaleInterceptor()); + Get.put(TimeOutInterceptors()); Get.find().interceptors.add(Get.find()); Get.find().interceptors.add(Get.find()); if (kDebugMode) { Get.find().interceptors.add(LogInterceptor(requestBody: true)); } Get.find().interceptors.add(Get.find()); + Get.find().interceptors.add(Get.find()); } void _bindingApi() { diff --git a/lib/main/bindings/network/network_isolate_binding.dart b/lib/main/bindings/network/network_isolate_binding.dart index fbe72b132..c6e260652 100644 --- a/lib/main/bindings/network/network_isolate_binding.dart +++ b/lib/main/bindings/network/network_isolate_binding.dart @@ -9,6 +9,7 @@ import 'package:tmail_ui_user/features/login/data/local/account_cache_manager.da 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'; import 'package:tmail_ui_user/features/login/data/network/config/authorization_interceptors.dart'; +import 'package:tmail_ui_user/features/login/data/network/config/time_out_interceptors.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/mailbox/data/network/mailbox_isolate_worker.dart'; import 'package:tmail_ui_user/features/thread/data/network/thread_api.dart'; @@ -49,6 +50,7 @@ class NetworkIsolateBindings extends Bindings { dio.interceptors.add(LogInterceptor(requestBody: true)); } dio.interceptors.add(Get.find()); + dio.interceptors.add(Get.find()); } void _bindingApi() {