From e9547c780c4c95de4930ed321b8a2b82d5725d57 Mon Sep 17 00:00:00 2001 From: dab246 Date: Wed, 18 Dec 2024 12:10:53 +0700 Subject: [PATCH] TF-3349 Escape messages when print email --- .../presentation/composer_bindings.dart | 1 + .../print_file_datasource_impl.dart | 30 ++++++++++++++++--- .../usecases/print_email_interactor.dart | 18 +---------- .../presentation/bindings/email_bindings.dart | 1 + .../bindings/mailbox_dashboard_bindings.dart | 1 + .../sending_email_interactor_bindings.dart | 1 + .../bindings/fcm_interactor_bindings.dart | 1 + 7 files changed, 32 insertions(+), 21 deletions(-) diff --git a/lib/features/composer/presentation/composer_bindings.dart b/lib/features/composer/presentation/composer_bindings.dart index 8c401aba8..9c563bce8 100644 --- a/lib/features/composer/presentation/composer_bindings.dart +++ b/lib/features/composer/presentation/composer_bindings.dart @@ -119,6 +119,7 @@ class ComposerBindings extends BaseBindings { Get.find(), Get.find(), Get.find(), + Get.find(), Get.find() )); Get.lazyPut(() => EmailHiveCacheDataSourceImpl( diff --git a/lib/features/email/data/datasource_impl/print_file_datasource_impl.dart b/lib/features/email/data/datasource_impl/print_file_datasource_impl.dart index 572f4ffb8..7aed25348 100644 --- a/lib/features/email/data/datasource_impl/print_file_datasource_impl.dart +++ b/lib/features/email/data/datasource_impl/print_file_datasource_impl.dart @@ -1,12 +1,16 @@ import 'package:core/data/model/print_attachment.dart'; import 'package:core/domain/extensions/datetime_extension.dart'; +import 'package:core/presentation/extensions/html_extension.dart'; import 'package:core/presentation/resources/image_paths.dart'; +import 'package:core/presentation/utils/html_transformer/transform_configuration.dart'; +import 'package:core/utils/app_logger.dart'; import 'package:core/utils/file_utils.dart'; import 'package:core/utils/print_utils.dart'; import 'package:filesize/filesize.dart'; import 'package:model/email/attachment.dart'; import 'package:model/extensions/email_extension.dart'; import 'package:tmail_ui_user/features/email/data/datasource/print_file_datasource.dart'; +import 'package:tmail_ui_user/features/email/data/local/html_analyzer.dart'; import 'package:tmail_ui_user/features/email/domain/model/email_print.dart'; import 'package:tmail_ui_user/features/email/presentation/extensions/attachment_extension.dart'; import 'package:tmail_ui_user/main/exceptions/exception_thrower.dart'; @@ -16,18 +20,23 @@ class PrintFileDataSourceImpl extends PrintFileDataSource { final PrintUtils _printUtils; final ImagePaths _imagePaths; final FileUtils _fileUtils; + final HtmlAnalyzer _htmlAnalyzer; final ExceptionThrower _exceptionThrower; PrintFileDataSourceImpl( this._printUtils, this._imagePaths, this._fileUtils, + this._htmlAnalyzer, this._exceptionThrower ); @override Future printEmail(EmailPrint emailPrint) { return Future.sync(() async { + final emailContentEscaped = await _transformHtmlEmailContent( + emailPrint.emailContent); + final sender = emailPrint.emailInformation.from?.isNotEmpty == true ? emailPrint.emailInformation.from!.first : null; @@ -43,7 +52,7 @@ class PrintFileDataSourceImpl extends PrintFileDataSource { final iconBase64Data = await _fileUtils.convertImageAssetToBase64(attachment.getIcon(_imagePaths)); final printAttachment = PrintAttachment( iconBase64Data: iconBase64Data, - name: attachment.name ?? '', + name: attachment.name.escapeLtGtHtmlString(), size: filesize(attachment.size?.value) ); listPrintAttachment.add(printAttachment); @@ -53,9 +62,9 @@ class PrintFileDataSourceImpl extends PrintFileDataSource { return await _printUtils.printEmail( appName: emailPrint.appName, userName: emailPrint.userName, - subject: emailPrint.emailInformation.subject ?? '', - emailContent: emailPrint.emailContent, - senderName: sender?.name ?? '', + subject: emailPrint.emailInformation.subject?.escapeLtGtHtmlString() ?? '', + emailContent: emailContentEscaped, + senderName: sender?.name.escapeLtGtHtmlString() ?? '', senderEmailAddress: sender?.email ?? '', dateTime: receiveTime, fromPrefix: emailPrint.fromPrefix, @@ -72,4 +81,17 @@ class PrintFileDataSourceImpl extends PrintFileDataSource { ); }).catchError(_exceptionThrower.throwException); } + + Future _transformHtmlEmailContent(String emailContent) async { + try { + final htmlContentTransformed = await _htmlAnalyzer.transformHtmlEmailContent( + emailContent, + TransformConfiguration.forPrintEmail(), + ); + return htmlContentTransformed; + } catch (e) { + logError('PrintFileDataSourceImpl::_transformHtmlEmailContent: Exception: $e'); + return emailContent; + } + } } \ No newline at end of file diff --git a/lib/features/email/domain/usecases/print_email_interactor.dart b/lib/features/email/domain/usecases/print_email_interactor.dart index 1014b3b5f..2cdaa4a40 100644 --- a/lib/features/email/domain/usecases/print_email_interactor.dart +++ b/lib/features/email/domain/usecases/print_email_interactor.dart @@ -1,7 +1,5 @@ import 'package:core/presentation/state/failure.dart'; import 'package:core/presentation/state/success.dart'; -import 'package:core/presentation/utils/html_transformer/transform_configuration.dart'; -import 'package:core/utils/app_logger.dart'; import 'package:dartz/dartz.dart'; import 'package:tmail_ui_user/features/email/domain/model/email_print.dart'; import 'package:tmail_ui_user/features/email/domain/repository/email_repository.dart'; @@ -14,24 +12,10 @@ class PrintEmailInteractor { Stream> execute(EmailPrint emailPrint) async* { try { - final htmlContentTransformed = await _transformHtmlEmailContent(emailPrint.emailContent); - final newEmailPrint = emailPrint.fromEmailContent(htmlContentTransformed); - await emailRepository.printEmail(newEmailPrint); + await emailRepository.printEmail(emailPrint); yield Right(PrintEmailSuccess()); } catch (e) { yield Left(PrintEmailFailure(exception: e)); } } - - Future _transformHtmlEmailContent(String emailContent) async { - try { - final htmlContentTransformed = await emailRepository.transformHtmlEmailContent( - emailContent, - TransformConfiguration.forPrintEmail()); - return htmlContentTransformed; - } catch (e) { - logError('PrintEmailInteractor::_transformHtmlEmailContent: Exception: $e'); - return emailContent; - } - } } \ No newline at end of file diff --git a/lib/features/email/presentation/bindings/email_bindings.dart b/lib/features/email/presentation/bindings/email_bindings.dart index a589ded96..576532f4f 100644 --- a/lib/features/email/presentation/bindings/email_bindings.dart +++ b/lib/features/email/presentation/bindings/email_bindings.dart @@ -106,6 +106,7 @@ class EmailBindings extends BaseBindings { Get.find(), Get.find(), Get.find(), + Get.find(), Get.find() )); Get.lazyPut(() => EmailHiveCacheDataSourceImpl( diff --git a/lib/features/mailbox_dashboard/presentation/bindings/mailbox_dashboard_bindings.dart b/lib/features/mailbox_dashboard/presentation/bindings/mailbox_dashboard_bindings.dart index 61f04d8fc..22dc4b10b 100644 --- a/lib/features/mailbox_dashboard/presentation/bindings/mailbox_dashboard_bindings.dart +++ b/lib/features/mailbox_dashboard/presentation/bindings/mailbox_dashboard_bindings.dart @@ -231,6 +231,7 @@ class MailboxDashBoardBindings extends BaseBindings { Get.find(), Get.find(), Get.find(), + Get.find(), Get.find() )); Get.lazyPut(() => MailboxDataSourceImpl( diff --git a/lib/features/offline_mode/bindings/sending_email_interactor_bindings.dart b/lib/features/offline_mode/bindings/sending_email_interactor_bindings.dart index 1829ad024..dc8e65f8f 100644 --- a/lib/features/offline_mode/bindings/sending_email_interactor_bindings.dart +++ b/lib/features/offline_mode/bindings/sending_email_interactor_bindings.dart @@ -77,6 +77,7 @@ class SendEmailInteractorBindings extends InteractorsBindings { Get.find(), Get.find(), Get.find(), + Get.find(), Get.find(), )); Get.lazyPut(() => EmailHiveCacheDataSourceImpl( diff --git a/lib/features/push_notification/presentation/bindings/fcm_interactor_bindings.dart b/lib/features/push_notification/presentation/bindings/fcm_interactor_bindings.dart index 9b31a9906..eada6b3b1 100644 --- a/lib/features/push_notification/presentation/bindings/fcm_interactor_bindings.dart +++ b/lib/features/push_notification/presentation/bindings/fcm_interactor_bindings.dart @@ -115,6 +115,7 @@ class FcmInteractorBindings extends InteractorsBindings { Get.find(), Get.find(), Get.find(), + Get.find(), Get.find() )); Get.lazyPut(() => EmailHiveCacheDataSourceImpl(