From 21621c0705f084b2aa9e6e02986c97d7f911918a Mon Sep 17 00:00:00 2001 From: dab246 Date: Mon, 17 Jul 2023 19:05:40 +0700 Subject: [PATCH] TF-1912 Sanitize html for email content when type is text/plain (cherry picked from commit 169ede2f8b59cdf0362ad449d1182597cd4e5dee) --- .../text/sanitize_html_transformers.dart | 17 +++++++++++++++++ .../email/data/local/html_analyzer.dart | 10 ++++++++-- 2 files changed, 25 insertions(+), 2 deletions(-) create mode 100644 core/lib/presentation/utils/html_transformer/text/sanitize_html_transformers.dart diff --git a/core/lib/presentation/utils/html_transformer/text/sanitize_html_transformers.dart b/core/lib/presentation/utils/html_transformer/text/sanitize_html_transformers.dart new file mode 100644 index 000000000..baf2b9cd7 --- /dev/null +++ b/core/lib/presentation/utils/html_transformer/text/sanitize_html_transformers.dart @@ -0,0 +1,17 @@ + +import 'dart:convert'; + +import 'package:core/presentation/utils/html_transformer/base/text_transformer.dart'; +import 'package:core/utils/app_logger.dart'; + +class SanitizeHtmlTransformers extends TextTransformer { + + const SanitizeHtmlTransformers(); + + @override + String process(String text) { + final htmlEncoded = const HtmlEscape().convert(text); + log('HtmlSanitizerTransformers::process:htmlEncoded: $htmlEncoded'); + return htmlEncoded; + } +} \ No newline at end of file diff --git a/lib/features/email/data/local/html_analyzer.dart b/lib/features/email/data/local/html_analyzer.dart index e98423989..465507a18 100644 --- a/lib/features/email/data/local/html_analyzer.dart +++ b/lib/features/email/data/local/html_analyzer.dart @@ -3,6 +3,7 @@ import 'package:core/data/network/dio_client.dart'; import 'package:core/presentation/utils/html_transformer/dom/add_tooltip_link_transformers.dart'; import 'package:core/presentation/utils/html_transformer/html_transform.dart'; import 'package:core/presentation/utils/html_transformer/text/convert_url_string_to_html_links_transformers.dart'; +import 'package:core/presentation/utils/html_transformer/text/sanitize_html_transformers.dart'; import 'package:core/presentation/utils/html_transformer/transform_configuration.dart'; import 'package:model/email/email_content.dart'; import 'package:model/email/email_content_type.dart'; @@ -33,8 +34,13 @@ class HtmlAnalyzer { case EmailContentType.textPlain: final htmlTransform = HtmlTransform(emailContent.content); final message = htmlTransform.transformToTextPlain( - transformConfiguration: TransformConfiguration.create( - customTextTransformers: [const ConvertUrlStringToHtmlLinksTransformers()])); + transformConfiguration: TransformConfiguration.create( + customTextTransformers: [ + const ConvertUrlStringToHtmlLinksTransformers(), + const SanitizeHtmlTransformers(), + ] + ) + ); return EmailContent(emailContent.type, message); default: return emailContent;