TF-3349 Escape messages when print email

This commit is contained in:
dab246
2024-12-18 12:10:53 +07:00
committed by Dat H. Pham
parent 490196b36f
commit e9547c780c
7 changed files with 32 additions and 21 deletions
@@ -119,6 +119,7 @@ class ComposerBindings extends BaseBindings {
Get.find<PrintUtils>(), Get.find<PrintUtils>(),
Get.find<ImagePaths>(), Get.find<ImagePaths>(),
Get.find<FileUtils>(), Get.find<FileUtils>(),
Get.find<HtmlAnalyzer>(),
Get.find<CacheExceptionThrower>() Get.find<CacheExceptionThrower>()
)); ));
Get.lazyPut(() => EmailHiveCacheDataSourceImpl( Get.lazyPut(() => EmailHiveCacheDataSourceImpl(
@@ -1,12 +1,16 @@
import 'package:core/data/model/print_attachment.dart'; import 'package:core/data/model/print_attachment.dart';
import 'package:core/domain/extensions/datetime_extension.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/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/file_utils.dart';
import 'package:core/utils/print_utils.dart'; import 'package:core/utils/print_utils.dart';
import 'package:filesize/filesize.dart'; import 'package:filesize/filesize.dart';
import 'package:model/email/attachment.dart'; import 'package:model/email/attachment.dart';
import 'package:model/extensions/email_extension.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/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/domain/model/email_print.dart';
import 'package:tmail_ui_user/features/email/presentation/extensions/attachment_extension.dart'; import 'package:tmail_ui_user/features/email/presentation/extensions/attachment_extension.dart';
import 'package:tmail_ui_user/main/exceptions/exception_thrower.dart'; import 'package:tmail_ui_user/main/exceptions/exception_thrower.dart';
@@ -16,18 +20,23 @@ class PrintFileDataSourceImpl extends PrintFileDataSource {
final PrintUtils _printUtils; final PrintUtils _printUtils;
final ImagePaths _imagePaths; final ImagePaths _imagePaths;
final FileUtils _fileUtils; final FileUtils _fileUtils;
final HtmlAnalyzer _htmlAnalyzer;
final ExceptionThrower _exceptionThrower; final ExceptionThrower _exceptionThrower;
PrintFileDataSourceImpl( PrintFileDataSourceImpl(
this._printUtils, this._printUtils,
this._imagePaths, this._imagePaths,
this._fileUtils, this._fileUtils,
this._htmlAnalyzer,
this._exceptionThrower this._exceptionThrower
); );
@override @override
Future<void> printEmail(EmailPrint emailPrint) { Future<void> printEmail(EmailPrint emailPrint) {
return Future.sync(() async { return Future.sync(() async {
final emailContentEscaped = await _transformHtmlEmailContent(
emailPrint.emailContent);
final sender = emailPrint.emailInformation.from?.isNotEmpty == true final sender = emailPrint.emailInformation.from?.isNotEmpty == true
? emailPrint.emailInformation.from!.first ? emailPrint.emailInformation.from!.first
: null; : null;
@@ -43,7 +52,7 @@ class PrintFileDataSourceImpl extends PrintFileDataSource {
final iconBase64Data = await _fileUtils.convertImageAssetToBase64(attachment.getIcon(_imagePaths)); final iconBase64Data = await _fileUtils.convertImageAssetToBase64(attachment.getIcon(_imagePaths));
final printAttachment = PrintAttachment( final printAttachment = PrintAttachment(
iconBase64Data: iconBase64Data, iconBase64Data: iconBase64Data,
name: attachment.name ?? '', name: attachment.name.escapeLtGtHtmlString(),
size: filesize(attachment.size?.value) size: filesize(attachment.size?.value)
); );
listPrintAttachment.add(printAttachment); listPrintAttachment.add(printAttachment);
@@ -53,9 +62,9 @@ class PrintFileDataSourceImpl extends PrintFileDataSource {
return await _printUtils.printEmail( return await _printUtils.printEmail(
appName: emailPrint.appName, appName: emailPrint.appName,
userName: emailPrint.userName, userName: emailPrint.userName,
subject: emailPrint.emailInformation.subject ?? '', subject: emailPrint.emailInformation.subject?.escapeLtGtHtmlString() ?? '',
emailContent: emailPrint.emailContent, emailContent: emailContentEscaped,
senderName: sender?.name ?? '', senderName: sender?.name.escapeLtGtHtmlString() ?? '',
senderEmailAddress: sender?.email ?? '', senderEmailAddress: sender?.email ?? '',
dateTime: receiveTime, dateTime: receiveTime,
fromPrefix: emailPrint.fromPrefix, fromPrefix: emailPrint.fromPrefix,
@@ -72,4 +81,17 @@ class PrintFileDataSourceImpl extends PrintFileDataSource {
); );
}).catchError(_exceptionThrower.throwException); }).catchError(_exceptionThrower.throwException);
} }
Future<String> _transformHtmlEmailContent(String emailContent) async {
try {
final htmlContentTransformed = await _htmlAnalyzer.transformHtmlEmailContent(
emailContent,
TransformConfiguration.forPrintEmail(),
);
return htmlContentTransformed;
} catch (e) {
logError('PrintFileDataSourceImpl::_transformHtmlEmailContent: Exception: $e');
return emailContent;
}
}
} }
@@ -1,7 +1,5 @@
import 'package:core/presentation/state/failure.dart'; import 'package:core/presentation/state/failure.dart';
import 'package:core/presentation/state/success.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:dartz/dartz.dart';
import 'package:tmail_ui_user/features/email/domain/model/email_print.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'; import 'package:tmail_ui_user/features/email/domain/repository/email_repository.dart';
@@ -14,24 +12,10 @@ class PrintEmailInteractor {
Stream<Either<Failure, Success>> execute(EmailPrint emailPrint) async* { Stream<Either<Failure, Success>> execute(EmailPrint emailPrint) async* {
try { try {
final htmlContentTransformed = await _transformHtmlEmailContent(emailPrint.emailContent); await emailRepository.printEmail(emailPrint);
final newEmailPrint = emailPrint.fromEmailContent(htmlContentTransformed);
await emailRepository.printEmail(newEmailPrint);
yield Right(PrintEmailSuccess()); yield Right(PrintEmailSuccess());
} catch (e) { } catch (e) {
yield Left(PrintEmailFailure(exception: e)); yield Left(PrintEmailFailure(exception: e));
} }
} }
Future<String> _transformHtmlEmailContent(String emailContent) async {
try {
final htmlContentTransformed = await emailRepository.transformHtmlEmailContent(
emailContent,
TransformConfiguration.forPrintEmail());
return htmlContentTransformed;
} catch (e) {
logError('PrintEmailInteractor::_transformHtmlEmailContent: Exception: $e');
return emailContent;
}
}
} }
@@ -106,6 +106,7 @@ class EmailBindings extends BaseBindings {
Get.find<PrintUtils>(), Get.find<PrintUtils>(),
Get.find<ImagePaths>(), Get.find<ImagePaths>(),
Get.find<FileUtils>(), Get.find<FileUtils>(),
Get.find<HtmlAnalyzer>(),
Get.find<CacheExceptionThrower>() Get.find<CacheExceptionThrower>()
)); ));
Get.lazyPut(() => EmailHiveCacheDataSourceImpl( Get.lazyPut(() => EmailHiveCacheDataSourceImpl(
@@ -231,6 +231,7 @@ class MailboxDashBoardBindings extends BaseBindings {
Get.find<PrintUtils>(), Get.find<PrintUtils>(),
Get.find<ImagePaths>(), Get.find<ImagePaths>(),
Get.find<FileUtils>(), Get.find<FileUtils>(),
Get.find<HtmlAnalyzer>(),
Get.find<CacheExceptionThrower>() Get.find<CacheExceptionThrower>()
)); ));
Get.lazyPut(() => MailboxDataSourceImpl( Get.lazyPut(() => MailboxDataSourceImpl(
@@ -77,6 +77,7 @@ class SendEmailInteractorBindings extends InteractorsBindings {
Get.find<PrintUtils>(), Get.find<PrintUtils>(),
Get.find<ImagePaths>(), Get.find<ImagePaths>(),
Get.find<FileUtils>(), Get.find<FileUtils>(),
Get.find<HtmlAnalyzer>(),
Get.find<CacheExceptionThrower>(), Get.find<CacheExceptionThrower>(),
)); ));
Get.lazyPut(() => EmailHiveCacheDataSourceImpl( Get.lazyPut(() => EmailHiveCacheDataSourceImpl(
@@ -115,6 +115,7 @@ class FcmInteractorBindings extends InteractorsBindings {
Get.find<PrintUtils>(), Get.find<PrintUtils>(),
Get.find<ImagePaths>(), Get.find<ImagePaths>(),
Get.find<FileUtils>(), Get.find<FileUtils>(),
Get.find<HtmlAnalyzer>(),
Get.find<CacheExceptionThrower>() Get.find<CacheExceptionThrower>()
)); ));
Get.lazyPut(() => EmailHiveCacheDataSourceImpl( Get.lazyPut(() => EmailHiveCacheDataSourceImpl(