From 1ff1b4f2a5ec5ef347a57e0165b5fb1a9097e183 Mon Sep 17 00:00:00 2001 From: guqing <38999863+guqing@users.noreply.github.com> Date: Tue, 10 Oct 2023 12:12:32 +0800 Subject: [PATCH] fix: incorrect unsubscribe link for email notification (#4695) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit #### What type of PR is this? /kind bug /area core /milestone 2.10.x #### What this PR does / why we need it: 修复邮件通知中取消订阅链接不正确的问题 #### Does this PR introduce a user-facing change? ```release-note 修复邮件通知中取消订阅链接不正确的问题 ``` --- .../DefaultNotificationCenter.java | 45 ++++++++++--------- .../halo/app/notification/EmailNotifier.java | 5 +-- .../endpoint/SubscriptionRouter.java | 5 ++- .../endpoint/SubscriptionRouterTest.java | 12 ++--- 4 files changed, 33 insertions(+), 34 deletions(-) diff --git a/application/src/main/java/run/halo/app/notification/DefaultNotificationCenter.java b/application/src/main/java/run/halo/app/notification/DefaultNotificationCenter.java index d1fd5702a..47bad079d 100644 --- a/application/src/main/java/run/halo/app/notification/DefaultNotificationCenter.java +++ b/application/src/main/java/run/halo/app/notification/DefaultNotificationCenter.java @@ -5,7 +5,6 @@ import static org.apache.commons.lang3.StringUtils.defaultString; import java.util.HashMap; import java.util.HashSet; import java.util.Locale; -import java.util.Map; import java.util.Optional; import java.util.function.BiPredicate; import java.util.function.Function; @@ -135,6 +134,7 @@ public class DefaultNotificationCenter implements NotificationCenter { .subscription(subscription) .reasonType(notificationContent.reasonType()) .notificationTitle(notificationContent.title()) + .reasonAttributes(notificationContent.reasonAttributes()) .notificationRawBody(defaultString(notificationContent.rawBody())) .notificationHtmlBody(defaultString(notificationContent.htmlBody())) .build() @@ -180,12 +180,13 @@ public class DefaultNotificationCenter implements NotificationCenter { }); } - @Builder - record NotificationElement(ReasonType reasonType, Reason reason, - Subscription subscription, NotifierDescriptor descriptor, - String notificationTitle, - String notificationRawBody, - String notificationHtmlBody) { + private ReasonAttributes toReasonAttributes(Reason reason) { + var model = new ReasonAttributes(); + var attributes = reason.getSpec().getAttributes(); + if (attributes != null) { + model.putAll(attributes); + } + return model; } Mono notificationContextFrom(NotificationElement element) { @@ -198,7 +199,7 @@ public class DefaultNotificationCenter implements NotificationCenter { messagePayload.setTitle(element.notificationTitle()); messagePayload.setRawBody(element.notificationRawBody()); messagePayload.setHtmlBody(element.notificationHtmlBody()); - messagePayload.setAttributes(reason.getSpec().getAttributes()); + messagePayload.setAttributes(element.reasonAttributes()); var message = new NotificationContext.Message(); message.setRecipient(subscription.getSpec().getSubscriber().getName()); @@ -239,11 +240,6 @@ public class DefaultNotificationCenter implements NotificationCenter { }); } - @Builder - record NotificationContent(String title, String rawBody, String htmlBody, ReasonType reasonType, - Map reasonProperties) { - } - Mono inferenceTemplate(Reason reason, Subscription subscription, Locale locale) { var reasonTypeName = reason.getSpec().getReasonType(); @@ -252,7 +248,7 @@ public class DefaultNotificationCenter implements NotificationCenter { .flatMap(reasonType -> notificationTemplateSelector.select(reasonTypeName, locale) .flatMap(template -> { final var templateContent = template.getSpec().getTemplate(); - Map model = toReasonAttributes(reason); + var model = toReasonAttributes(reason); var identity = UserIdentity.of(subscriber.getName()); var subscriberInfo = new HashMap<>(); if (identity.isAnonymous()) { @@ -266,7 +262,7 @@ public class DefaultNotificationCenter implements NotificationCenter { var builder = NotificationContent.builder() .reasonType(reasonType) - .reasonProperties(model); + .reasonAttributes(model); var titleMono = notificationTemplateRender .render(templateContent.getTitle(), model) @@ -285,17 +281,22 @@ public class DefaultNotificationCenter implements NotificationCenter { ); } + @Builder + record NotificationContent(String title, String rawBody, String htmlBody, ReasonType reasonType, + ReasonAttributes reasonAttributes) { + } + String getUnsubscribeUrl(Subscription subscription) { return subscriptionRouter.getUnsubscribeUrl(subscription); } - private Map toReasonAttributes(Reason reason) { - Map model = new HashMap<>(); - var attributes = reason.getSpec().getAttributes(); - if (attributes != null) { - model.putAll(attributes); - } - return model; + @Builder + record NotificationElement(ReasonType reasonType, Reason reason, + Subscription subscription, NotifierDescriptor descriptor, + String notificationTitle, + String notificationRawBody, + String notificationHtmlBody, + ReasonAttributes reasonAttributes) { } Mono getReasonType(String reasonTypeName) { diff --git a/application/src/main/java/run/halo/app/notification/EmailNotifier.java b/application/src/main/java/run/halo/app/notification/EmailNotifier.java index ee596283c..f900e4c15 100644 --- a/application/src/main/java/run/halo/app/notification/EmailNotifier.java +++ b/application/src/main/java/run/halo/app/notification/EmailNotifier.java @@ -145,12 +145,11 @@ public class EmailNotifier implements ReactiveNotifier { Mono appendHtmlBodyFooter(ReasonAttributes attributes) { return notificationTemplateRender.render(""" - --- -