From 8e0dee934119d75b46c119d84a22ddfb5f73b247 Mon Sep 17 00:00:00 2001 From: dab246 Date: Mon, 5 Aug 2024 16:23:31 +0700 Subject: [PATCH] TF-3023 Get SMime signature status in headers email --- .../presentation_email_extension.dart | 18 ++++++++++++++++++ .../model/smime_signature_status.dart | 5 +++++ model/lib/email/email_property.dart | 2 ++ model/lib/extensions/email_extension.dart | 10 +--------- .../list_email_header_extension.dart | 11 +++++++++++ 5 files changed, 37 insertions(+), 9 deletions(-) create mode 100644 lib/features/email/presentation/extensions/presentation_email_extension.dart create mode 100644 lib/features/email/presentation/model/smime_signature_status.dart diff --git a/lib/features/email/presentation/extensions/presentation_email_extension.dart b/lib/features/email/presentation/extensions/presentation_email_extension.dart new file mode 100644 index 000000000..4dd642f5d --- /dev/null +++ b/lib/features/email/presentation/extensions/presentation_email_extension.dart @@ -0,0 +1,18 @@ + +import 'package:model/email/presentation_email.dart'; +import 'package:model/extensions/list_email_header_extension.dart'; +import 'package:tmail_ui_user/features/email/presentation/model/smime_signature_status.dart'; + +extension PresentationEmailExtension on PresentationEmail { + + SMimeSignatureStatus get sMimeStatus { + final status = emailHeader?.toSet().sMimeStatus; + if (status == 'Good signature') { + return SMimeSignatureStatus.goodSignature; + } else if (status == 'Bad signature') { + return SMimeSignatureStatus.badSignature; + } else { + return SMimeSignatureStatus.notSigned; + } + } +} \ No newline at end of file diff --git a/lib/features/email/presentation/model/smime_signature_status.dart b/lib/features/email/presentation/model/smime_signature_status.dart new file mode 100644 index 000000000..2f70565a1 --- /dev/null +++ b/lib/features/email/presentation/model/smime_signature_status.dart @@ -0,0 +1,5 @@ +enum SMimeSignatureStatus { + goodSignature, + badSignature, + notSigned +} \ No newline at end of file diff --git a/model/lib/email/email_property.dart b/model/lib/email/email_property.dart index d1981e404..28d3e4264 100644 --- a/model/lib/email/email_property.dart +++ b/model/lib/email/email_property.dart @@ -22,4 +22,6 @@ class EmailProperty { static const String headerMdnKey = 'Disposition-Notification-To'; static const String messageId = 'messageId'; static const String references = 'references'; + static const String headerUnsubscribeKey = 'List-Unsubscribe'; + static const String headerSMimeStatusKey = 'X-SMIME-Status'; } \ No newline at end of file diff --git a/model/lib/extensions/email_extension.dart b/model/lib/extensions/email_extension.dart index 2a1a9cf51..26df00cd0 100644 --- a/model/lib/extensions/email_extension.dart +++ b/model/lib/extensions/email_extension.dart @@ -1,9 +1,7 @@ import 'dart:convert'; -import 'package:collection/collection.dart'; import 'package:core/domain/extensions/datetime_extension.dart'; -import 'package:core/utils/app_logger.dart'; import 'package:jmap_dart_client/jmap/core/properties/properties.dart'; import 'package:jmap_dart_client/jmap/mail/email/email.dart'; import 'package:jmap_dart_client/jmap/mail/email/email_body_part.dart'; @@ -14,8 +12,6 @@ import 'package:model/model.dart'; extension EmailExtension on Email { - static const String unsubscribeHeaderName = 'List-Unsubscribe'; - String asString() => jsonEncode(toJson()); bool get hasRead => keywords?.containsKey(KeyWordIdentifier.emailSeen) == true; @@ -30,11 +26,7 @@ extension EmailExtension on Email { bool get withAttachments => hasAttachment == true; - String get listUnsubscribe { - final listUnsubscribe = headers?.firstWhereOrNull((header) => header.name == unsubscribeHeaderName); - log('EmailExtension::listUnsubscribe: $listUnsubscribe'); - return listUnsubscribe?.value ?? ''; - } + String get listUnsubscribe => headers.listUnsubscribe; bool get hasListUnsubscribe => listUnsubscribe.isNotEmpty; diff --git a/model/lib/extensions/list_email_header_extension.dart b/model/lib/extensions/list_email_header_extension.dart index 039b3c996..ff08c9102 100644 --- a/model/lib/extensions/list_email_header_extension.dart +++ b/model/lib/extensions/list_email_header_extension.dart @@ -1,4 +1,5 @@ +import 'package:collection/collection.dart'; import 'package:jmap_dart_client/jmap/mail/email/email_header.dart'; import 'package:model/email/email_property.dart'; @@ -11,4 +12,14 @@ extension ListEmailHeaderExtension on Set? { return false; } } + + String get listUnsubscribe { + final listUnsubscribe = this?.firstWhereOrNull((header) => header.name == EmailProperty.headerUnsubscribeKey); + return listUnsubscribe?.value ?? ''; + } + + String get sMimeStatus { + final sMimeStatus = this?.firstWhereOrNull((header) => header.name == EmailProperty.headerSMimeStatusKey); + return sMimeStatus?.value ?? ''; + } } \ No newline at end of file