From c7165572002cc544a081b26b9798ded5f6999885 Mon Sep 17 00:00:00 2001 From: dab246 Date: Mon, 3 Apr 2023 16:30:12 +0700 Subject: [PATCH] TF-1684 Add abstract TransformHtmlSignature method (cherry picked from commit dfaa5187d1b6a6c1065c65699b6e3a287d1d0843) --- .../data/datasource/identity_data_source.dart | 2 ++ .../identity_data_source_impl.dart | 26 ++++++++++++++++++ .../repository/identity_repository_impl.dart | 5 ++++ .../repository/identity_repository.dart | 2 ++ .../state/transform_html_signature_state.dart | 27 +++++++++++++++++++ .../transform_html_signature_interactor.dart | 24 +++++++++++++++++ 6 files changed, 86 insertions(+) create mode 100644 lib/features/manage_account/domain/state/transform_html_signature_state.dart create mode 100644 lib/features/manage_account/domain/usecases/transform_html_signature_interactor.dart diff --git a/lib/features/manage_account/data/datasource/identity_data_source.dart b/lib/features/manage_account/data/datasource/identity_data_source.dart index 5b5384cda..a7fc8f3bb 100644 --- a/lib/features/manage_account/data/datasource/identity_data_source.dart +++ b/lib/features/manage_account/data/datasource/identity_data_source.dart @@ -14,4 +14,6 @@ abstract class IdentityDataSource { Future deleteIdentity(Session session, AccountId accountId, IdentityId identityId); Future editIdentity(Session session, AccountId accountId, EditIdentityRequest editIdentityRequest); + + Future transformHtmlSignature(String signature); } \ No newline at end of file diff --git a/lib/features/manage_account/data/datasource_impl/identity_data_source_impl.dart b/lib/features/manage_account/data/datasource_impl/identity_data_source_impl.dart index b0439ecbc..a7997af27 100644 --- a/lib/features/manage_account/data/datasource_impl/identity_data_source_impl.dart +++ b/lib/features/manage_account/data/datasource_impl/identity_data_source_impl.dart @@ -1,3 +1,12 @@ +import 'package:core/presentation/utils/html_transformer/dom/add_target_blank_in_tag_a_transformers.dart'; +import 'package:core/presentation/utils/html_transformer/dom/add_tooltip_link_transformers.dart'; +import 'package:core/presentation/utils/html_transformer/dom/blockcode_transformers.dart'; +import 'package:core/presentation/utils/html_transformer/dom/blockquoted_transformers.dart'; +import 'package:core/presentation/utils/html_transformer/dom/image_transformers.dart'; +import 'package:core/presentation/utils/html_transformer/dom/script_transformers.dart'; +import 'package:core/presentation/utils/html_transformer/dom/sigature_transformers.dart'; +import 'package:core/presentation/utils/html_transformer/html_transform.dart'; +import 'package:core/presentation/utils/html_transformer/transform_configuration.dart'; import 'package:jmap_dart_client/jmap/account_id.dart'; import 'package:jmap_dart_client/jmap/core/properties/properties.dart'; import 'package:jmap_dart_client/jmap/core/session/session.dart'; @@ -43,4 +52,21 @@ class IdentityDataSourceImpl extends IdentityDataSource { return await _identityAPI.editIdentity(session, accountId, editIdentityRequest); }).catchError(_exceptionThrower.throwException); } + + @override + Future transformHtmlSignature(String signature) { + return Future.sync(() async { + final signatureUnescape = await HtmlTransform(signature).transformToHtml( + transformConfiguration: TransformConfiguration.create(customDomTransformers: [ + const RemoveScriptTransformer(), + const SignatureTransformer(), + const BlockQuotedTransformer(), + const BlockCodeTransformer(), + const AddTargetBlankInTagATransformer(), + const ImageTransformer(), + const AddTooltipLinkTransformer() + ])); + return signatureUnescape; + }).catchError(_exceptionThrower.throwException); + } } \ No newline at end of file diff --git a/lib/features/manage_account/data/repository/identity_repository_impl.dart b/lib/features/manage_account/data/repository/identity_repository_impl.dart index 54446bcbe..dc47af63d 100644 --- a/lib/features/manage_account/data/repository/identity_repository_impl.dart +++ b/lib/features/manage_account/data/repository/identity_repository_impl.dart @@ -34,4 +34,9 @@ class IdentityRepositoryImpl extends IdentityRepository { Future editIdentity(Session session, AccountId accountId, EditIdentityRequest editIdentityRequest) { return _dataSource.editIdentity(session, accountId, editIdentityRequest); } + + @override + Future transformHtmlSignature(String signature) { + return _dataSource.transformHtmlSignature(signature); + } } \ No newline at end of file diff --git a/lib/features/manage_account/domain/repository/identity_repository.dart b/lib/features/manage_account/domain/repository/identity_repository.dart index 54f714df0..494ec9bbe 100644 --- a/lib/features/manage_account/domain/repository/identity_repository.dart +++ b/lib/features/manage_account/domain/repository/identity_repository.dart @@ -14,4 +14,6 @@ abstract class IdentityRepository { Future deleteIdentity(Session session, AccountId accountId, IdentityId identityId); Future editIdentity(Session session, AccountId accountId, EditIdentityRequest editIdentityRequest); + + Future transformHtmlSignature(String signature); } \ No newline at end of file diff --git a/lib/features/manage_account/domain/state/transform_html_signature_state.dart b/lib/features/manage_account/domain/state/transform_html_signature_state.dart new file mode 100644 index 000000000..c5405873b --- /dev/null +++ b/lib/features/manage_account/domain/state/transform_html_signature_state.dart @@ -0,0 +1,27 @@ +import 'package:core/presentation/state/failure.dart'; +import 'package:core/presentation/state/success.dart'; + +class TransformHtmlSignatureLoading extends UIState { + + TransformHtmlSignatureLoading(); + + @override + List get props => []; +} + +class TransformHtmlSignatureSuccess extends UIState { + final String signature; + + TransformHtmlSignatureSuccess(this.signature); + + @override + List get props => [signature]; +} + +class TransformHtmlSignatureFailure extends FeatureFailure { + + TransformHtmlSignatureFailure(exception) : super(exception: exception); + + @override + List get props => [exception]; +} \ No newline at end of file diff --git a/lib/features/manage_account/domain/usecases/transform_html_signature_interactor.dart b/lib/features/manage_account/domain/usecases/transform_html_signature_interactor.dart new file mode 100644 index 000000000..b4e2f80cb --- /dev/null +++ b/lib/features/manage_account/domain/usecases/transform_html_signature_interactor.dart @@ -0,0 +1,24 @@ +import 'dart:core'; + +import 'package:core/presentation/state/failure.dart'; +import 'package:core/presentation/state/success.dart'; +import 'package:dartz/dartz.dart'; +import 'package:tmail_ui_user/features/manage_account/domain/repository/identity_repository.dart'; +import 'package:tmail_ui_user/features/manage_account/domain/state/edit_identity_state.dart'; +import 'package:tmail_ui_user/features/manage_account/domain/state/transform_html_signature_state.dart'; + +class TransformHtmlSignatureInteractor { + final IdentityRepository _identityRepository; + + TransformHtmlSignatureInteractor(this._identityRepository); + + Stream> execute(String signature) async* { + try { + yield Right(TransformHtmlSignatureLoading()); + final signatureUnescape = await _identityRepository.transformHtmlSignature(signature); + yield Right(TransformHtmlSignatureSuccess(signatureUnescape)); + } catch (exception) { + yield Left(EditIdentityFailure(exception)); + } + } +} \ No newline at end of file