178 lines
5.7 KiB
Java
178 lines
5.7 KiB
Java
package org.gcube.portal.invites;
|
|
|
|
import java.util.Properties;
|
|
|
|
import javax.mail.Message;
|
|
import javax.mail.Session;
|
|
import javax.mail.Transport;
|
|
import javax.mail.internet.InternetAddress;
|
|
import javax.mail.internet.MimeMessage;
|
|
|
|
import org.gcube.application.framework.core.session.ASLSession;
|
|
import org.jsoup.Jsoup;
|
|
import org.jsoup.nodes.Document;
|
|
import org.jsoup.nodes.Element;
|
|
import org.jsoup.nodes.Node;
|
|
import org.jsoup.nodes.TextNode;
|
|
import org.slf4j.Logger;
|
|
import org.slf4j.LoggerFactory;
|
|
|
|
/**
|
|
*
|
|
* @author Massimiliano Assante
|
|
*
|
|
*/
|
|
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 InvitesManager() { }
|
|
|
|
public static InvitesManager getInstance(){
|
|
instance = new InvitesManager();
|
|
return instance;
|
|
}
|
|
|
|
|
|
public Boolean sendInviteEmail(
|
|
ASLSession aslSession,
|
|
String portalSenderEmail,
|
|
String portalURL,
|
|
String name,
|
|
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);
|
|
|
|
// Now set the actual message
|
|
message.setText(getTextEmail(aslSession, portalURL, name, lastName, email, fromFullName, vreName, vreDescription));
|
|
|
|
// Send message
|
|
Transport.send(message);
|
|
_log.debug("Sent message successfully to " + email );
|
|
} catch (Exception mex) {
|
|
mex.printStackTrace();
|
|
_log.error("Sent message ERROR to " + email );
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
*
|
|
* @param aslSession
|
|
* @param portalUrl the url of the portal
|
|
* @param name the name of the invited person
|
|
* @param lastName the last name of the invited person
|
|
* @param email the email address of the invite person
|
|
* @param fromFullName who is inviting
|
|
* @param vreName the name of the environment where you are inviting the person
|
|
* @param vreDescription the description of the environment where you are inviting the person
|
|
* @return the email text
|
|
*/
|
|
private String getTextEmail(
|
|
ASLSession aslSession,
|
|
String portalUrl,
|
|
String name,
|
|
String lastName,
|
|
String email,
|
|
String fromFullName,
|
|
String vreName,
|
|
String vreDescription) {
|
|
|
|
long organizationId = aslSession.getGroupId();
|
|
|
|
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: " + portalUrl + "/group/data-e-infrastructure-gateway/join-new?orgid="+organizationId)
|
|
.append("\n\n")
|
|
.append("Please note: if you do not have an account yet, sign up first: " + portalUrl + "/web/guest/home?p_p_id=58&_58_struts_action=%2Flogin%2Fcreate_account")
|
|
.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 <sender> and destroy and delete any copies you may have received.");
|
|
|
|
return body.toString();
|
|
|
|
}
|
|
|
|
/**
|
|
* Convert html into simple text
|
|
*
|
|
*/
|
|
protected static String convertHTML2Text(String html) {
|
|
if (html == null) {
|
|
return null;
|
|
}
|
|
String removedMarkup = html.replaceAll("&", "&");
|
|
removedMarkup = removedMarkup.replaceAll(">", ">");
|
|
removedMarkup = removedMarkup.replaceAll("<", "<");
|
|
String text = removedMarkup;
|
|
try {
|
|
Document document = Jsoup.parse(removedMarkup);
|
|
Element body = document.body();
|
|
text = buildStringFromNode(body).toString();
|
|
}
|
|
catch (Exception e) {
|
|
_log.error("While converting HTML into text: " +e.getMessage());
|
|
return removedMarkup;
|
|
}
|
|
return text;
|
|
}
|
|
|
|
private static StringBuffer buildStringFromNode(Node node) {
|
|
StringBuffer buffer = new StringBuffer();
|
|
|
|
if (node instanceof TextNode) {
|
|
TextNode textNode = (TextNode) node;
|
|
buffer.append(textNode.text().trim());
|
|
}
|
|
|
|
for (Node childNode : node.childNodes()) {
|
|
buffer.append(buildStringFromNode(childNode));
|
|
}
|
|
|
|
if (node instanceof Element) {
|
|
Element element = (Element) node;
|
|
String tagName = element.tagName();
|
|
if ("p".equals(tagName) || "br".equals(tagName) || "div".equals(tagName) || "h1".equals(tagName) || "h2".equals(tagName) || "h3".equals(tagName) || "h4".equals(tagName)) {
|
|
buffer.append("\n");
|
|
}
|
|
}
|
|
|
|
return buffer;
|
|
}
|
|
}
|