diff --git a/.classpath b/.classpath index ac5d2ad..dda1718 100644 --- a/.classpath +++ b/.classpath @@ -6,12 +6,6 @@ - - - - - - diff --git a/.settings/org.eclipse.wst.common.component b/.settings/org.eclipse.wst.common.component index 0e8e488..c8aa868 100644 --- a/.settings/org.eclipse.wst.common.component +++ b/.settings/org.eclipse.wst.common.component @@ -3,8 +3,10 @@ - + + uses + diff --git a/pom.xml b/pom.xml index f6d1e25..2b105f9 100644 --- a/pom.xml +++ b/pom.xml @@ -13,7 +13,7 @@ org.gcube.portlets.user invite-friends-vre war - 1.0.1-SNAPSHOT + 1.1.0-SNAPSHOT Invite Friends to VRE scm:svn:http://svn.d4science.research-infrastructures.eu/gcube/trunk/portlets/user/${project.artifactId} @@ -53,6 +53,11 @@ + + org.gcube.common.portal + portal-manager + provided + com.google.gwt gwt-servlet @@ -71,6 +76,11 @@ ${gwtVersion} provided + + org.gcube.portal + invites-common-library + [0.1.0-SNAPSHOT,) + com.github.gwtbootstrap gwt-bootstrap @@ -149,7 +159,7 @@ compile - generateAsync + diff --git a/src/main/java/org/gcube/portlets/user/invitefriends/client/InviteServiceAsync.java b/src/main/java/org/gcube/portlets/user/invitefriends/client/InviteServiceAsync.java new file mode 100644 index 0000000..a8a4dcb --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/invitefriends/client/InviteServiceAsync.java @@ -0,0 +1,9 @@ +package org.gcube.portlets.user.invitefriends.client; + +import com.google.gwt.user.client.rpc.AsyncCallback; + +public interface InviteServiceAsync { + + void sendInviteEmail(String name, String lastName, String email, AsyncCallback callback); + +} diff --git a/src/main/java/org/gcube/portlets/user/invitefriends/server/InviteServiceImpl.java b/src/main/java/org/gcube/portlets/user/invitefriends/server/InviteServiceImpl.java index cdca7eb..0d57aad 100644 --- a/src/main/java/org/gcube/portlets/user/invitefriends/server/InviteServiceImpl.java +++ b/src/main/java/org/gcube/portlets/user/invitefriends/server/InviteServiceImpl.java @@ -1,26 +1,12 @@ package org.gcube.portlets.user.invitefriends.server; -import java.io.File; -import java.io.FileInputStream; -import java.io.IOException; -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.gcube.application.framework.core.session.SessionManager; +import org.gcube.common.portal.PortalContext; import org.gcube.portal.custom.communitymanager.OrganizationsUtil; import org.gcube.portal.custom.scopemanager.scopehelper.ScopeHelper; +import org.gcube.portal.invites.InvitesManager; import org.gcube.portlets.user.invitefriends.client.InviteService; -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; @@ -35,10 +21,7 @@ import com.liferay.portal.util.PortalUtil; public class InviteServiceImpl extends RemoteServiceServlet implements InviteService { private final static Logger _log = LoggerFactory.getLogger(InviteServiceImpl.class); - private final static String MAIL_SERVICE_HOST = "localhost"; - private final static String MAIL_SERVICE_PORT = "25"; - private static final String SENDER_EMAIL = "notificationSenderEmail"; - + /** * the current ASLSession * @return the session @@ -61,44 +44,8 @@ public class InviteServiceImpl extends RemoteServiceServlet implements InviteSer @Override public Boolean sendInviteEmail(String name, String lastName, String email) throws IllegalArgumentException { ASLSession aslSession = getASLSession(); - 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(getSenderEmail(), 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(name, lastName, email, fromFullName, vreName)); - - // 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; - } - - - private String getTextEmail(String name, String lastName, String email, String fromFullName, String vreName) { String portalUrl = null; String vreDescription = null; long organizationId = getASLSession().getGroupId(); @@ -110,98 +57,12 @@ public class InviteServiceImpl extends RemoteServiceServlet implements InviteSer _log.warn("While trying to send email for invitation to " + email); return null; } - - 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 and destroy and delete any copies you may have received."); - - return body.toString(); - - } - - /** - * read the sender email for notifications name from a property file and returns it - */ - private static String getSenderEmail() { - //get the portles to look for from the property file - Properties props = new Properties(); - String toReturn = ""; - - try { - String propertyfile = OrganizationsUtil.getTomcatFolder()+"conf/gcube-data.properties"; - File propsFile = new File(propertyfile); - FileInputStream fis = new FileInputStream(propsFile); - props.load( fis); - toReturn = props.getProperty(SENDER_EMAIL); - } - //catch exception in case properties file does not exist - catch(IOException e) { - toReturn = "do-not-reply@d4science.org"; - _log.error("gcube-data.properties file not found under $CATALINA_HOME/conf dir, returning default Email" + toReturn); - return toReturn; - } - _log.debug("Returning SENDER_EMAIL: " + toReturn ); - return toReturn; - } - - /** - * 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; + String portalSenderEmail = PortalContext.getConfiguration().getSenderEmail(); + return InvitesManager.getInstance().sendInviteEmail(aslSession, portalSenderEmail, portalUrl, fromFullName, lastName, email, vreDescription); } - 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; - } }