From cfbd94b4d4f4db93807db6db0fdfaa4401b6c1c1 Mon Sep 17 00:00:00 2001 From: Massimiliano Assante Date: Tue, 26 Apr 2016 15:14:04 +0000 Subject: [PATCH] improved centralized messaging git-svn-id: https://svn.research-infrastructures.eu/d4science/gcube/trunk/portal/invites-common-library@128322 82a268e6-3cf1-43bd-a215-b396298e98cf --- .../gcube/portal/invites/InvitesManager.java | 110 +++++++----------- 1 file changed, 41 insertions(+), 69 deletions(-) diff --git a/src/main/java/org/gcube/portal/invites/InvitesManager.java b/src/main/java/org/gcube/portal/invites/InvitesManager.java index f8c8ce8..8ee4535 100644 --- a/src/main/java/org/gcube/portal/invites/InvitesManager.java +++ b/src/main/java/org/gcube/portal/invites/InvitesManager.java @@ -4,16 +4,10 @@ import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Map; -import java.util.Properties; import java.util.Set; import java.util.UUID; -import javax.mail.Message; -import javax.mail.Session; -import javax.mail.Transport; import javax.mail.internet.AddressException; -import javax.mail.internet.InternetAddress; -import javax.mail.internet.MimeMessage; import javax.servlet.http.HttpServletRequest; import org.gcube.application.framework.core.session.ASLSession; @@ -46,8 +40,6 @@ import org.slf4j.LoggerFactory; */ public class InvitesManager { private static final Logger _log = LoggerFactory.getLogger(InvitesManager.class); - private final static String MAIL_SERVICE_HOST = "localhost"; - private final static String MAIL_SERVICE_PORT = "25"; private static InvitesManager instance; private static DatabookStore store; @@ -69,7 +61,7 @@ public class InvitesManager { } return store; } - + public InviteOperationResult sendInvite( HttpServletRequest request, ASLSession aslSession, @@ -79,11 +71,11 @@ public class InvitesManager { String lastName, String email, String vreDescription) { - + String username = aslSession.getUsername(); String fromFullName = aslSession.getUserFullName(); String controlcode = UUID.randomUUID().toString(); - + Invite invite = new Invite(UUID.randomUUID().toString(), username, aslSession.getScopeName(), email, controlcode, InviteStatus.PENDING, new Date(), fromFullName); InviteOperationResult result = null; boolean emailResult = false; @@ -91,17 +83,17 @@ public class InvitesManager { String vreName = aslSession.getGroupName(); result = store.saveInvite(invite); emailResult = sendInviteEmail(request, aslSession, portalSenderEmail, portalURL, name, lastName, email, vreDescription); - notifyInviteSent(username, aslSession.getScopeName(), portalURL, PortalContext.getConfiguration().getGatewayName(), invite, vreName); - + notifyInviteSent(request, username, aslSession.getScopeName(), invite, vreName); + } catch (AddressException e) { _log.error("Email not valid " + e.getMessage()); e.printStackTrace(); return InviteOperationResult.FAILED; } - + return (emailResult) ? result : InviteOperationResult.FAILED; } - + private Boolean sendInviteEmail( HttpServletRequest request, ASLSession aslSession, @@ -111,38 +103,24 @@ public class InvitesManager { String lastName, String email, String vreDescription) { - + String vreName = aslSession.getGroupName(); String fromFullName = aslSession.getUserFullName(); - - - Properties props = System.getProperties(); - Session session = null; - props.put("mail.smtp.host", MAIL_SERVICE_HOST); - props.put("mail.smtp.port", MAIL_SERVICE_PORT); - session = Session.getDefaultInstance(props); - session.setDebug(true); + try { - MimeMessage message = new MimeMessage(session); - message.setHeader("Content-Type", "text/plain; charset=UTF-8"); - // Set From: header field of the header. - message.setFrom(new InternetAddress(portalSenderEmail, fromFullName)); - message.addRecipient(Message.RecipientType.TO, new InternetAddress(email)); - message.addRecipient(Message.RecipientType.CC, new InternetAddress(aslSession.getUserEmailAddress())); - - // Set Subject: header field - message.setSubject("Join me on " + vreName); + String subject = "Join me on " + vreName; long groupId = aslSession.getGroupId(); final String linkToAcceptInvite = portalURL + PortalContext.getConfiguration().getSiteLandingPagePath(request)+"/explore?siteId="+groupId; - final String linkToCreateAccount = portalURL + "/web/guest/home?p_p_id=58&_58_struts_action=%2Flogin%2Fcreate_account"; - // Now set the actual message - message.setText(getTextEmail(aslSession, name, lastName, email, fromFullName, vreName, vreDescription, linkToAcceptInvite, linkToCreateAccount)); - // Send message - Transport.send(message); + EmailNotification mailToAdmin = new EmailNotification( + email , + subject, + getHTMLEmail(aslSession, name, lastName, email, fromFullName, vreName, vreDescription, linkToAcceptInvite, linkToCreateAccount), + request); + mailToAdmin.sendEmail(); _log.debug("Sent message successfully to " + email ); } catch (Exception mex) { mex.printStackTrace(); @@ -151,7 +129,7 @@ public class InvitesManager { } return true; } - + /** * * @param aslSession @@ -164,7 +142,7 @@ public class InvitesManager { * @param vreDescription the description of the environment where you are inviting the person * @return the email text */ - private String getTextEmail( + private String getHTMLEmail( ASLSession aslSession, String name, String lastName, @@ -174,27 +152,21 @@ public class InvitesManager { String vreDescription, String linkToAcceptInvite, String linkToCreateAccount) { - - - - StringBuilder body = new StringBuilder(); - - body.append("Dear " + name) - .append(",\n") - .append(fromFullName).append(" has invited you to " + vreName + ", you can find a brief description below:") - .append("\n") - .append("\n").append(convertHTML2Text(vreDescription)) - .append("\n\n") - .append("To accept the invite just follow this link: " + linkToAcceptInvite) - .append("\n\n") - .append("Please note: if you do not have an account yet, sign up first: " + linkToCreateAccount) - .append("\n\n\n\n") - .append("WARNING / LEGAL TEXT: This message is intended only for the use of the individual or entity to which it is addressed and may contain") - .append("information which is privileged, confidential, proprietary, or exempt from disclosure under applicable law. " - + "If you are not the intended recipient or the person responsible for delivering the message to the intended recipient, " - + "you are strictly prohibited from disclosing, distributing, copying, or in any way using this message.") - .append("If you have received this communication in error, please notify the and destroy and delete any copies you may have received."); + + + StringBuilder body = new StringBuilder(); + + body.append("Dear " + name) + .append(",

") + .append(fromFullName).append(" has invited you to " + vreName + ", you can find a brief description below:") + .append("

") + .append("

").append(vreDescription) + .append("

") + .append("

To accept the invite just follow this link: " + linkToAcceptInvite) + .append("

") + .append("Please note: if you do not have an account yet, sign up first: " + linkToCreateAccount); + return body.toString(); } @@ -222,7 +194,7 @@ public class InvitesManager { } return text; } - + private static StringBuffer buildStringFromNode(Node node) { StringBuffer buffer = new StringBuffer(); @@ -245,7 +217,7 @@ public class InvitesManager { return buffer; } - + private static ArrayList getAdministratorsEmails(String scope) { LiferayUserManager userManager = new LiferayUserManager(); LiferayGroupManager groupManager = new LiferayGroupManager(); @@ -287,28 +259,28 @@ public class InvitesManager { } return adminEmailsList; } - + /** * * @param scope . * @param optionalMessage . */ - public static void notifyInviteSent(String username, String scope, String portalbasicurl, String gatewayName, Invite invite, String vreName) { - + public static void notifyInviteSent(HttpServletRequest request, String username, String scope, Invite invite, String vreName) { + ArrayList adminEmails = getAdministratorsEmails(scope); StringBuffer body = new StringBuffer(); - body.append("

Dear manager of "+ scope +",
this email message was automatically generated by " + portalbasicurl +" to inform you that "); + body.append("

Dear manager of "+ scope +",
this email message was automatically generated by " + PortalContext.getConfiguration().getGatewayURL(request) +" to inform you that "); body.append("

"); body.append("

"); body.append(""+invite.getSenderFullName() + " (" + invite.getSenderUserId() +") has invited " + invite.getInvitedEmail() + " to the following environment:"); body.append("

"); body.append("" + scope+""); body.append("

"); - + String[] allMails = new String[adminEmails.size()]; adminEmails.toArray(allMails); - EmailNotification mailToAdmin = new EmailNotification(allMails , "An invite was sent on " + vreName + " by " + invite.getSenderFullName(), body.toString()); + EmailNotification mailToAdmin = new EmailNotification(allMails , "An invite was sent on " + vreName + " by " + invite.getSenderFullName(), body.toString(), request); mailToAdmin.sendEmail(); } - + }