diff --git a/src/main/java/no/nibio/vips/logic/controller/servlet/NotificationSubscriptionController.java b/src/main/java/no/nibio/vips/logic/controller/servlet/NotificationSubscriptionController.java index d0cd5c29532f496e217a588ab949a7f896fe7aaa..64a65fe4e44f3d8aafca28d41407b42eceb86efe 100755 --- a/src/main/java/no/nibio/vips/logic/controller/servlet/NotificationSubscriptionController.java +++ b/src/main/java/no/nibio/vips/logic/controller/servlet/NotificationSubscriptionController.java @@ -20,6 +20,8 @@ package no.nibio.vips.logic.controller.servlet; import freemarker.core.ParseException; import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; import java.util.List; import javax.ejb.EJB; import javax.persistence.EntityManager; @@ -80,7 +82,12 @@ public class NotificationSubscriptionController extends HttpServlet { String action = request.getParameter("action"); VipsLogicUser user = (VipsLogicUser) request.getSession().getAttribute("user"); - + if(user == null) + { + this.redirectToLogin(request, response); + return; + } + try { // Default: View list of user subscriptions @@ -173,6 +180,13 @@ public class NotificationSubscriptionController extends HttpServlet { } } + private void redirectToLogin(HttpServletRequest request, HttpServletResponse response) throws UnsupportedEncodingException, IOException + { + String nextPage = ServletUtil.getFullRequestURI(request); + String nextPageDirective= "?nextPage=" + URLEncoder.encode(nextPage, "UTF-8"); + response.sendRedirect(Globals.PROTOCOL + "://" + ServletUtil.getServerName(request) + "/login" + nextPageDirective); + } + // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code."> /** * Handles the HTTP <code>GET</code> method. diff --git a/src/main/java/no/nibio/vips/logic/messaging/MessageLocalVersion.java b/src/main/java/no/nibio/vips/logic/messaging/MessageLocalVersion.java index 563d743088ddad2693e49c0f76598162fd50dd1a..031b5ab29f06c0b864da31217c86fc3bb41d71ef 100755 --- a/src/main/java/no/nibio/vips/logic/messaging/MessageLocalVersion.java +++ b/src/main/java/no/nibio/vips/logic/messaging/MessageLocalVersion.java @@ -20,7 +20,10 @@ package no.nibio.vips.logic.messaging; /** - * @copyright 2016 <a href="http://www.nibio.no/">NIBIO</a> + * Represents a localized message in the VIPS push notification system. Used by + * the UniversalMessage class + * + * @copyright 2016-2022 <a href="http://www.nibio.no/">NIBIO</a> * @author Tor-Einar Skog <tor-einar.skog@nibio.no> */ public class MessageLocalVersion { diff --git a/src/main/java/no/nibio/vips/logic/messaging/MessagingBean.java b/src/main/java/no/nibio/vips/logic/messaging/MessagingBean.java index c18f42d83240ceaac6488f63d7934281008ab815..4b249b517aa90b74903944cc9dd256157bb497e1 100755 --- a/src/main/java/no/nibio/vips/logic/messaging/MessagingBean.java +++ b/src/main/java/no/nibio/vips/logic/messaging/MessagingBean.java @@ -79,6 +79,7 @@ public class MessagingBean { public void sendUniversalMessage(Message message) { + // TODO: Make URL relative String msgDownloadUrlTpl = "https://www.vips-landbruk.no/messages/" + message.getMessageId() + "/"; // Create a universal message from the message // TODO: When UniversalMessage has changed, pick diff --git a/src/main/java/no/nibio/vips/logic/messaging/UniversalMessage.java b/src/main/java/no/nibio/vips/logic/messaging/UniversalMessage.java index 8140c9802a11bde3afdbea1b284c4690da5cf735..c4c4725c95612442bb7feb4f4eed2ac2cfeebb37 100755 --- a/src/main/java/no/nibio/vips/logic/messaging/UniversalMessage.java +++ b/src/main/java/no/nibio/vips/logic/messaging/UniversalMessage.java @@ -29,6 +29,7 @@ import java.io.Serializable; import java.util.ArrayList; import java.util.Date; import java.util.List; +import java.util.ResourceBundle; import java.util.logging.Level; import java.util.logging.Logger; import javax.persistence.Basic; @@ -44,6 +45,8 @@ import javax.persistence.Temporal; import javax.persistence.TemporalType; import javax.persistence.Transient; import javax.xml.bind.annotation.XmlRootElement; + +import com.ibm.icu.util.ULocale; import no.nibio.vips.logic.util.StringJsonUserType; import org.hibernate.annotations.Type; import org.hibernate.annotations.TypeDef; @@ -84,6 +87,10 @@ public class UniversalMessage implements Serializable { @Transient private ObjectMapper objectMapper; + + // Include by default. If not needed, use constructor that makes it configurable + @Transient + private Boolean includeNotificationSettingsLink = Boolean.TRUE; public UniversalMessage() { @@ -99,6 +106,19 @@ public class UniversalMessage implements Serializable { { this.addMessageLocalVersion(locale, msgSubject, msgLeadParagraph, msgBody, msgDownloadUrl); } + + public UniversalMessage( + String locale, + String msgSubject, + String msgLeadParagraph, + String msgBody, + String msgDownloadUrl, + Boolean includeNotificationSettingsLink + ) + { + this(locale, msgSubject, msgLeadParagraph, msgBody, msgDownloadUrl); + this.setIncludeNotificationSettingsLink(includeNotificationSettingsLink); + } public final void addMessageLocalVersion( String locale, @@ -235,6 +255,18 @@ public class UniversalMessage implements Serializable { } } + /** + * @param locale two-letter language string + * @return The localized string **template** for generating a link to a user's page for + * managing notification subscription settings + */ + @Transient + public String getNotificationSettingsLinkTpl(String locale) + { + ULocale theLocale = new ULocale(locale); + ResourceBundle rb = ResourceBundle.getBundle("no.nibio.vips.logic.i18n.vipslogictexts",theLocale.toLocale()); + return rb.getString("universalMessageSettingsLink_tpl"); + } private ObjectMapper getObjectMapper() { @@ -244,4 +276,19 @@ public class UniversalMessage implements Serializable { } return this.objectMapper; } + + /** + * If true, the SMS and mail messages will have this type of link appended at the end: + * "To edit your notification subscriptions, please use this link: https://logic.vips.nibio.no/user/notificationsubscription?userId=1" + * The server name can be configured with the system properties no.nibio.vips.logic.VIPSLOGIC_PROTOCOL and no.nibio.vips.logic.SERVER_NAME + * @return + */ + @Transient + public Boolean getIncludeNotificationSettingsLink() { + return includeNotificationSettingsLink; + } + + public void setIncludeNotificationSettingsLink(Boolean includeNotificationSettingsLink) { + this.includeNotificationSettingsLink = includeNotificationSettingsLink; + } } diff --git a/src/main/java/no/nibio/vips/logic/messaging/distribution/entity/MsgToSend.java b/src/main/java/no/nibio/vips/logic/messaging/distribution/entity/MsgToSend.java index 4c2fe6473320a84390ca3d1646ddc7b47b3ee61c..1e3abbee193c7c1c25b77c4c6ea9944decdab395 100644 --- a/src/main/java/no/nibio/vips/logic/messaging/distribution/entity/MsgToSend.java +++ b/src/main/java/no/nibio/vips/logic/messaging/distribution/entity/MsgToSend.java @@ -18,7 +18,12 @@ */ package no.nibio.vips.logic.messaging.distribution.entity; +import com.ibm.icu.util.ULocale; +import no.nibio.vips.logic.util.Globals; + import java.net.URL; +import java.text.MessageFormat; +import java.util.ResourceBundle; /** @@ -46,6 +51,10 @@ public class MsgToSend { // The lead paragraph (AKA "Ingress") public String msgLeadParagraph; + // Include by default. If not needed, use constructor that makes it configurable + private Boolean includeNotificationSettingsLink = Boolean.TRUE; + + /* (non-Javadoc) * @see no.nibio.vips_msg_dist.dao.Test#getMsgSubject() */ @@ -116,5 +125,29 @@ public class MsgToSend { this.locale = locale; } - + /** + * @return The localized string **template** for generating a link to a user's page for + * managing notification subscription settings + */ + public String getNotificationSettingsLinkTpl() + { + ULocale theLocale = new ULocale(this.getLocale()); + ResourceBundle rb = ResourceBundle.getBundle("no.nibio.vips.logic.i18n.vipslogictexts",theLocale.toLocale()); + return MessageFormat.format(rb.getString("universalMessageSettingsLink_tpl"), Globals.PROTOCOL + "://" + Globals.SERVER_NAME + "/user/notificationsubscription?userId={0}"); + } + + + /** + * If true, the SMS and mail messages will have this type of link appended at the end: + * "To edit your notification subscriptions, please use this link: https://logic.vips.nibio.no/user/notificationsubscription?userId=1" + * The server name can be configured with the system properties no.nibio.vips.logic.VIPSLOGIC_PROTOCOL and no.nibio.vips.logic.SERVER_NAME + * @return + */ + public Boolean getIncludeNotificationSettingsLink() { + return includeNotificationSettingsLink; + } + + public void setIncludeNotificationSettingsLink(Boolean includeNotificationSettingsLink) { + this.includeNotificationSettingsLink = includeNotificationSettingsLink; + } } diff --git a/src/main/java/no/nibio/vips/logic/messaging/distribution/send/MailMsgDeliveryHandler.java b/src/main/java/no/nibio/vips/logic/messaging/distribution/send/MailMsgDeliveryHandler.java index 19c2273b9e39a3c45b576826c0bb9b0ab383f869..d13d028b0d61632d21f75c2f8543c517bbf1d789 100644 --- a/src/main/java/no/nibio/vips/logic/messaging/distribution/send/MailMsgDeliveryHandler.java +++ b/src/main/java/no/nibio/vips/logic/messaging/distribution/send/MailMsgDeliveryHandler.java @@ -19,6 +19,7 @@ package no.nibio.vips.logic.messaging.distribution.send; import java.io.UnsupportedEncodingException; +import java.text.MessageFormat; import java.util.Date; import java.util.Properties; @@ -148,7 +149,8 @@ public class MailMsgDeliveryHandler implements IDeliveryMsgHandler { + " using server " + mailserver); } else { sendMessage(msgToSend.getMsgSubject(), msgToSend.getMsgLeadParagraph(), new StringBuffer(msgToSend.getMsgBody()).append("\n\n") - .append(msgToSend.getMsgDownloadUrl() != null ? msgToSend.getMsgDownloadUrl():""), + .append(msgToSend.getMsgDownloadUrl() != null ? msgToSend.getMsgDownloadUrl():"") + .append(msgToSend.getIncludeNotificationSettingsLink() ? "\n\n" + MessageFormat.format(msgToSend.getNotificationSettingsLinkTpl(),msgReceiver.recipientId): "\n"), msgReceiver.msgDeliveryAddress); } return SingleMsgSentStateEnum.Ok; diff --git a/src/main/java/no/nibio/vips/logic/messaging/distribution/send/SmsMsgDeliveryHandler.java b/src/main/java/no/nibio/vips/logic/messaging/distribution/send/SmsMsgDeliveryHandler.java index 4d9bb0847d82d0f8a78f61f60b827edd640fe597..965ef4b35492bd2fd188431ad846495437cc4600 100644 --- a/src/main/java/no/nibio/vips/logic/messaging/distribution/send/SmsMsgDeliveryHandler.java +++ b/src/main/java/no/nibio/vips/logic/messaging/distribution/send/SmsMsgDeliveryHandler.java @@ -26,6 +26,7 @@ import java.net.MalformedURLException; import java.net.URL; import java.net.URLConnection; import java.net.URLEncoder; +import java.text.MessageFormat; import javax.mail.MessagingException; import no.nibio.vips.logic.messaging.distribution.entity.MsgReceiver; @@ -134,7 +135,8 @@ public class SmsMsgDeliveryHandler implements IDeliveryMsgHandler { String smsText = msgToSend.getMsgSubject() + "\n" + msgToSend.getMsgLeadParagraph() + "\n" + msgToSend.getMsgBody() - + (msgToSend.getMsgDownloadUrl() != null ? "\n" + msgToSend.getMsgDownloadUrl().toString(): ""); + + (msgToSend.getMsgDownloadUrl() != null ? "\n" + msgToSend.getMsgDownloadUrl().toString(): "\n") + + (msgToSend.getIncludeNotificationSettingsLink() ? "\n\n" + MessageFormat.format(msgToSend.getNotificationSettingsLinkTpl(), msgReceiver.recipientId): "\n"); LOGGER.debug(smsText); LOGGER.debug("Teksten er på " + smsText.length() + " tegn."); diff --git a/src/main/java/no/nibio/vips/logic/modules/barkbeetle/BarkbeetleBean.java b/src/main/java/no/nibio/vips/logic/modules/barkbeetle/BarkbeetleBean.java index 8257d46d0b145d24527515bd03cb124c19e73c99..64a6f555c9a2a6023266e6017f26439e4b33f7a1 100644 --- a/src/main/java/no/nibio/vips/logic/modules/barkbeetle/BarkbeetleBean.java +++ b/src/main/java/no/nibio/vips/logic/modules/barkbeetle/BarkbeetleBean.java @@ -842,11 +842,13 @@ public class BarkbeetleBean { * @param users * @param heading * @param message - * @param url */ public void sendReminder(List<VipsLogicUser> users, String heading, String message) { UniversalMessage uMessage = new UniversalMessage(); + // The notificationSettingsLink is relevant to regular VIPS notifications, not + // these barkbeetle reminders, so omitting this here. + uMessage.setIncludeNotificationSettingsLink(false); Calendar cal = Calendar.getInstance(BarkbeetleBean.NORGE_MITT_NORGE); cal.setTime(new Date()); cal.add(Calendar.DATE, 2); diff --git a/src/main/java/no/nibio/vips/logic/util/Globals.java b/src/main/java/no/nibio/vips/logic/util/Globals.java index 407c77c74eb97674895ff5478560f7455a69cf71..82180bf0c7981d68c7f0a07f82abdfac8ed43dc5 100755 --- a/src/main/java/no/nibio/vips/logic/util/Globals.java +++ b/src/main/java/no/nibio/vips/logic/util/Globals.java @@ -70,6 +70,8 @@ public class Globals { public static int DEFAULT_UUID_VALIDITY_DURATION_DAYS = 30; - public static String PROTOCOL = System.getProperty("no.nibio.vips.logic.VIPSLOGIC_PROTOCOL"); + public static String PROTOCOL = System.getProperty("no.nibio.vips.logic.VIPSLOGIC_PROTOCOL") != null ? System.getProperty("no.nibio.vips.logic.VIPSLOGIC_PROTOCOL") : "http"; + + public static String SERVER_NAME = System.getProperty("no.nibio.vips.logic.SERVER_NAME") != null ? System.getProperty("no.nibio.vips.logic.SERVER_NAME") : "logic.vips.nibio.no"; } diff --git a/src/main/resources/no/nibio/vips/logic/i18n/vipslogictexts.properties b/src/main/resources/no/nibio/vips/logic/i18n/vipslogictexts.properties index 9c6384c2f132bcc76c95e14d62ff9e0853ae8434..b97d60170a0935b8a1efe1fec551367afb928403 100755 --- a/src/main/resources/no/nibio/vips/logic/i18n/vipslogictexts.properties +++ b/src/main/resources/no/nibio/vips/logic/i18n/vipslogictexts.properties @@ -1041,3 +1041,4 @@ addIllustration=Add illustration allRoles=All roles allStatuses=All statuses LEAFBLOTCH=Leaf blotch model +universalMessageSettingsLink_tpl=To edit your notification subscriptions, please use this link: {0} diff --git a/src/main/resources/no/nibio/vips/logic/i18n/vipslogictexts_bs.properties b/src/main/resources/no/nibio/vips/logic/i18n/vipslogictexts_bs.properties index 10be401770dacc01de06b2db4e47725b5a86a1c0..f2572880428953a51d7cf3b0b16fdd1eb3b2e4bb 100755 --- a/src/main/resources/no/nibio/vips/logic/i18n/vipslogictexts_bs.properties +++ b/src/main/resources/no/nibio/vips/logic/i18n/vipslogictexts_bs.properties @@ -1034,3 +1034,4 @@ addIllustration=Add illustration allRoles=All roles allStatuses=All statuses LEAFBLOTCH=Leaf blotch model +universalMessageSettingsLink_tpl=To edit your VIPS notification subscriptions, please use this link: {0} diff --git a/src/main/resources/no/nibio/vips/logic/i18n/vipslogictexts_hr.properties b/src/main/resources/no/nibio/vips/logic/i18n/vipslogictexts_hr.properties index 97b0be0ad9faa62ad8f26d9e4fda10d7372aedd8..34aa7af55b5da0ba8a177adad58bc151a048c0a6 100755 --- a/src/main/resources/no/nibio/vips/logic/i18n/vipslogictexts_hr.properties +++ b/src/main/resources/no/nibio/vips/logic/i18n/vipslogictexts_hr.properties @@ -1033,3 +1033,4 @@ addIllustration=Add illustration allRoles=All roles allStatuses=All statuses LEAFBLOTCH=Leaf blotch model +universalMessageSettingsLink_tpl=To edit your notification subscriptions, please use this link: {0} diff --git a/src/main/resources/no/nibio/vips/logic/i18n/vipslogictexts_nb.properties b/src/main/resources/no/nibio/vips/logic/i18n/vipslogictexts_nb.properties index 6fb3a590d63862114591d91a350f346354375959..dbb321573390e03808b79539176f6f3728140b17 100755 --- a/src/main/resources/no/nibio/vips/logic/i18n/vipslogictexts_nb.properties +++ b/src/main/resources/no/nibio/vips/logic/i18n/vipslogictexts_nb.properties @@ -1042,3 +1042,4 @@ addIllustration=Legg til illustrasjon allRoles=Alle roller allStatuses=Alle statuser LEAFBLOTCH=Bladflekksjukdomsmodell +universalMessageSettingsLink_tpl=For � endre dine abonnement p� push-varsler fra VIPS, bruk denne lenken: {0} diff --git a/src/main/resources/no/nibio/vips/logic/i18n/vipslogictexts_sr.properties b/src/main/resources/no/nibio/vips/logic/i18n/vipslogictexts_sr.properties index 752a7e00f5f745021c20306b1fdbe1fe056b2dd7..bc87ecca6d84dc9faadab56873fe9dfe062c6297 100755 --- a/src/main/resources/no/nibio/vips/logic/i18n/vipslogictexts_sr.properties +++ b/src/main/resources/no/nibio/vips/logic/i18n/vipslogictexts_sr.properties @@ -1035,3 +1035,4 @@ addIllustration=Add illustration allRoles=All roles allStatuses=All statuses LEAFBLOTCH=Leaf blotch model +universalMessageSettingsLink_tpl=To edit your notification subscriptions, please use this link: {0} diff --git a/src/main/resources/no/nibio/vips/logic/i18n/vipslogictexts_zh_CN.properties b/src/main/resources/no/nibio/vips/logic/i18n/vipslogictexts_zh_CN.properties index ba7e355e6fc73718f5b845050f106f06aed6edb5..3bb3a5d8a33d9557f250e39e15f408ec751cec88 100755 --- a/src/main/resources/no/nibio/vips/logic/i18n/vipslogictexts_zh_CN.properties +++ b/src/main/resources/no/nibio/vips/logic/i18n/vipslogictexts_zh_CN.properties @@ -1028,3 +1028,4 @@ addIllustration=Add illustration allRoles=All roles allStatuses=All statuses LEAFBLOTCH=Leaf blotch model +universalMessageSettingsLink_tpl=To edit your notification subscriptions, please use this link: {0}