From 9675f39659444b354f3100c630bf2a8ab9233560 Mon Sep 17 00:00:00 2001 From: dab246 Date: Mon, 20 Mar 2023 17:25:18 +0700 Subject: [PATCH] TF-1606 Convert `downloadUrl` and `uploadUrl` to qualified url (cherry picked from commit eb912f4e7100b411c4167b1d575a793327ad356c) --- .../presentation/composer_controller.dart | 9 +++++---- .../controller/single_email_controller.dart | 9 +++++---- model/lib/extensions/session_extension.dart | 18 ++++++++++++++---- 3 files changed, 24 insertions(+), 12 deletions(-) diff --git a/lib/features/composer/presentation/composer_controller.dart b/lib/features/composer/presentation/composer_controller.dart index 771155dc3..d687d7f03 100644 --- a/lib/features/composer/presentation/composer_controller.dart +++ b/lib/features/composer/presentation/composer_controller.dart @@ -75,6 +75,7 @@ class ComposerController extends BaseController { final _imagePaths = Get.find(); final _responsiveUtils = Get.find(); final _uuid = Get.find(); + final _dynamicUrlInterceptors = Get.find(); final expandModeAttachments = ExpandMode.COLLAPSE.obs; final composerArguments = Rxn(); @@ -917,7 +918,7 @@ class ComposerController extends BaseController { final session = mailboxDashBoardController.sessionCurrent; final accountId = mailboxDashBoardController.accountId.value; if (session != null && accountId != null) { - final uploadUri = session.getUploadUri(accountId); + final uploadUri = session.getUploadUri(accountId, jmapUrl: _dynamicUrlInterceptors.jmapUrl); uploadController.justUploadAttachmentsAction(pickedFiles, uploadUri); } } @@ -1091,7 +1092,7 @@ class ComposerController extends BaseController { _emailContents = arguments.emailContents; emailContentsViewState.value = Right(GetEmailContentSuccess(_emailContents!, [], [], null)); } else { - final baseDownloadUrl = mailboxDashBoardController.sessionCurrent?.getDownloadUrl(); + final baseDownloadUrl = mailboxDashBoardController.sessionCurrent?.getDownloadUrl(jmapUrl: _dynamicUrlInterceptors.jmapUrl); final accountId = mailboxDashBoardController.sessionCurrent?.accounts.keys.first; final emailId = arguments.presentationEmail?.id; if (emailId != null && baseDownloadUrl != null && accountId != null) { @@ -1475,7 +1476,7 @@ class ComposerController extends BaseController { final session = mailboxDashBoardController.sessionCurrent; final accountId = mailboxDashBoardController.accountId.value; if (session != null && accountId != null) { - final uploadUri = session.getUploadUri(accountId); + final uploadUri = session.getUploadUri(accountId, jmapUrl: _dynamicUrlInterceptors.jmapUrl); uploadController.uploadFileAction(pickedFile, uploadUri, isInline: true); } } else { @@ -1495,7 +1496,7 @@ class ComposerController extends BaseController { void _handleUploadInlineSuccess(SuccessAttachmentUploadState uploadState) { uploadController.clearUploadInlineViewState(); - final baseDownloadUrl = mailboxDashBoardController.sessionCurrent?.getDownloadUrl(); + final baseDownloadUrl = mailboxDashBoardController.sessionCurrent?.getDownloadUrl(jmapUrl: _dynamicUrlInterceptors.jmapUrl); final accountId = mailboxDashBoardController.accountId.value; if (baseDownloadUrl != null && accountId != null) { diff --git a/lib/features/email/presentation/controller/single_email_controller.dart b/lib/features/email/presentation/controller/single_email_controller.dart index 2942aa74b..f19ab5c1c 100644 --- a/lib/features/email/presentation/controller/single_email_controller.dart +++ b/lib/features/email/presentation/controller/single_email_controller.dart @@ -80,6 +80,7 @@ class SingleEmailController extends BaseController with AppLoaderMixin { final _appToast = Get.find(); final _uuid = Get.find(); final _downloadManager = Get.find(); + final _dynamicUrlInterceptors = Get.find(); final GetEmailContentInteractor _getEmailContentInteractor; final MarkAsEmailReadInteractor _markAsEmailReadInteractor; @@ -292,7 +293,7 @@ class SingleEmailController extends BaseController with AppLoaderMixin { void _getEmailContentAction(EmailId emailId) async { final accountId = mailboxDashBoardController.accountId.value; - final baseDownloadUrl = mailboxDashBoardController.sessionCurrent?.getDownloadUrl(); + final baseDownloadUrl = mailboxDashBoardController.sessionCurrent?.getDownloadUrl(jmapUrl: _dynamicUrlInterceptors.jmapUrl); final emailLoaded = emailSupervisorController.getEmailInQueueByEmailId(emailId); if (emailLoaded != null) { @@ -478,7 +479,7 @@ class SingleEmailController extends BaseController with AppLoaderMixin { void _downloadAttachmentsAction(List attachments) async { final accountId = mailboxDashBoardController.accountId.value; if (accountId != null && mailboxDashBoardController.sessionCurrent != null) { - final baseDownloadUrl = mailboxDashBoardController.sessionCurrent!.getDownloadUrl(); + final baseDownloadUrl = mailboxDashBoardController.sessionCurrent!.getDownloadUrl(jmapUrl: _dynamicUrlInterceptors.jmapUrl); consumeState(_downloadAttachmentsInteractor.execute(attachments, accountId, baseDownloadUrl)); } } @@ -527,7 +528,7 @@ class SingleEmailController extends BaseController with AppLoaderMixin { void _exportAttachmentAction(Attachment attachment, CancelToken cancelToken) async { final accountId = mailboxDashBoardController.accountId.value; if (accountId != null && mailboxDashBoardController.sessionCurrent != null) { - final baseDownloadUrl = mailboxDashBoardController.sessionCurrent!.getDownloadUrl(); + final baseDownloadUrl = mailboxDashBoardController.sessionCurrent!.getDownloadUrl(jmapUrl: _dynamicUrlInterceptors.jmapUrl); consumeState(_exportAttachmentInteractor.execute(attachment, accountId, baseDownloadUrl, cancelToken)); } } @@ -577,7 +578,7 @@ class SingleEmailController extends BaseController with AppLoaderMixin { void _downloadAttachmentForWebAction(BuildContext context, Attachment attachment) async { final accountId = mailboxDashBoardController.accountId.value; if (accountId != null && mailboxDashBoardController.sessionCurrent != null) { - final baseDownloadUrl = mailboxDashBoardController.sessionCurrent!.getDownloadUrl(); + final baseDownloadUrl = mailboxDashBoardController.sessionCurrent!.getDownloadUrl(jmapUrl: _dynamicUrlInterceptors.jmapUrl); final generateTaskId = DownloadTaskId(_uuid.v4()); consumeState(_downloadAttachmentForWebInteractor.execute( generateTaskId, diff --git a/model/lib/extensions/session_extension.dart b/model/lib/extensions/session_extension.dart index 2792c3eaa..32f4008ff 100644 --- a/model/lib/extensions/session_extension.dart +++ b/model/lib/extensions/session_extension.dart @@ -1,4 +1,5 @@ +import 'package:core/presentation/extensions/uri_extension.dart'; import 'package:core/utils/app_logger.dart'; import 'package:jmap_dart_client/jmap/account_id.dart'; import 'package:jmap_dart_client/jmap/core/capability/capability_identifier.dart'; @@ -8,8 +9,13 @@ import 'package:jmap_dart_client/jmap/core/session/session.dart'; import 'package:uri/uri.dart'; extension SessionExtension on Session { - String getDownloadUrl() { - var baseUrl = '${downloadUrl.origin}${downloadUrl.path}?${downloadUrl.query}'; + + String getDownloadUrl({String? jmapUrl}) { + final downloadUrlValid = jmapUrl != null + ? downloadUrl.toQualifiedUrl(baseUrl: Uri.parse(jmapUrl)) + : downloadUrl; + log('SessionExtension::getDownloadUrl():downloadUrlValid: $downloadUrlValid'); + var baseUrl = '${downloadUrlValid.origin}${downloadUrlValid.path}?${downloadUrlValid.query}'; if (baseUrl.endsWith('/')) { baseUrl = baseUrl.substring(0, baseUrl.length - 1); } @@ -19,8 +25,12 @@ extension SessionExtension on Session { return downloadUrlDecode; } - Uri getUploadUri(AccountId accountId) { - final baseUrl = '${uploadUrl.origin}${uploadUrl.path}'; + Uri getUploadUri(AccountId accountId, {String? jmapUrl}) { + final uploadUrlValid = jmapUrl != null + ? uploadUrl.toQualifiedUrl(baseUrl: Uri.parse(jmapUrl)) + : uploadUrl; + log('SessionExtension::getUploadUri():downloadUrlValid: $uploadUrlValid'); + final baseUrl = '${uploadUrlValid.origin}${uploadUrlValid.path}'; final uploadUriTemplate = UriTemplate(Uri.decodeFull(baseUrl)); final uploadUri = uploadUriTemplate.expand({ 'accountId' : accountId.id.value