From dfd13a0cb435b04adfd66217a2ada0c29c6e9e20 Mon Sep 17 00:00:00 2001 From: Massimiliano Assante Date: Mon, 4 Jul 2016 17:20:20 +0000 Subject: [PATCH] Initial import. git-svn-id: http://svn.research-infrastructures.eu/public/d4science/gcube/trunk/portal/liferay62-plugins/user-registration-hook@129902 82a268e6-3cf1-43bd-a215-b396298e98cf --- .classpath | 32 +++++ .project | 42 ++++++ .settings/.jsdtscope | 13 ++ .settings/org.eclipse.core.resources.prefs | 4 + .settings/org.eclipse.jdt.core.prefs | 8 ++ .settings/org.eclipse.m2e.core.prefs | 4 + .settings/org.eclipse.wst.common.component | 10 ++ ....eclipse.wst.common.project.facet.core.xml | 8 ++ ...rg.eclipse.wst.jsdt.ui.superType.container | 1 + .../org.eclipse.wst.jsdt.ui.superType.name | 1 + .settings/org.eclipse.wst.validation.prefs | 2 + pom.xml | 129 ++++++++++++++++++ .../MyCreateUserAccountListener.java | 89 ++++++++++++ src/main/resources/clientlog4j.properties | 12 ++ src/main/resources/portal.properties | 3 + src/main/webapp/WEB-INF/liferay-hook.xml | 6 + .../WEB-INF/liferay-plugin-package.properties | 9 ++ src/main/webapp/WEB-INF/web.xml | 4 + 18 files changed, 377 insertions(+) create mode 100644 .classpath create mode 100644 .project create mode 100644 .settings/.jsdtscope create mode 100644 .settings/org.eclipse.core.resources.prefs create mode 100644 .settings/org.eclipse.jdt.core.prefs create mode 100644 .settings/org.eclipse.m2e.core.prefs create mode 100644 .settings/org.eclipse.wst.common.component create mode 100644 .settings/org.eclipse.wst.common.project.facet.core.xml create mode 100644 .settings/org.eclipse.wst.jsdt.ui.superType.container create mode 100644 .settings/org.eclipse.wst.jsdt.ui.superType.name create mode 100644 .settings/org.eclipse.wst.validation.prefs create mode 100644 pom.xml create mode 100644 src/main/java/org/gcube/portal/usersaccount/MyCreateUserAccountListener.java create mode 100644 src/main/resources/clientlog4j.properties create mode 100644 src/main/resources/portal.properties create mode 100644 src/main/webapp/WEB-INF/liferay-hook.xml create mode 100644 src/main/webapp/WEB-INF/liferay-plugin-package.properties create mode 100644 src/main/webapp/WEB-INF/web.xml diff --git a/.classpath b/.classpath new file mode 100644 index 0000000..0f4a4c2 --- /dev/null +++ b/.classpath @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.project b/.project new file mode 100644 index 0000000..0d8b01b --- /dev/null +++ b/.project @@ -0,0 +1,42 @@ + + + user-registration-hook + + + + + + org.eclipse.wst.jsdt.core.javascriptValidator + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.wst.common.project.facet.core.builder + + + + + org.eclipse.wst.validation.validationbuilder + + + + + org.eclipse.m2e.core.maven2Builder + + + + + + org.eclipse.jem.workbench.JavaEMFNature + org.eclipse.wst.common.modulecore.ModuleCoreNature + org.eclipse.jdt.core.javanature + org.eclipse.m2e.core.maven2Nature + org.eclipse.wst.common.project.facet.core.nature + org.eclipse.wst.jsdt.core.jsNature + + diff --git a/.settings/.jsdtscope b/.settings/.jsdtscope new file mode 100644 index 0000000..b72a6a4 --- /dev/null +++ b/.settings/.jsdtscope @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/.settings/org.eclipse.core.resources.prefs b/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000..abdea9a --- /dev/null +++ b/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,4 @@ +eclipse.preferences.version=1 +encoding//src/main/java=UTF-8 +encoding//src/main/resources=UTF-8 +encoding/=UTF-8 diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000..69c31cd --- /dev/null +++ b/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,8 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6 +org.eclipse.jdt.core.compiler.compliance=1.6 +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning +org.eclipse.jdt.core.compiler.source=1.6 diff --git a/.settings/org.eclipse.m2e.core.prefs b/.settings/org.eclipse.m2e.core.prefs new file mode 100644 index 0000000..e6f7678 --- /dev/null +++ b/.settings/org.eclipse.m2e.core.prefs @@ -0,0 +1,4 @@ +activeProfiles=Liferay-v6.2-CE-(Tomcat-7)-(2) +eclipse.preferences.version=1 +resolveWorkspaceProjects=true +version=1 diff --git a/.settings/org.eclipse.wst.common.component b/.settings/org.eclipse.wst.common.component new file mode 100644 index 0000000..eedc2aa --- /dev/null +++ b/.settings/org.eclipse.wst.common.component @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/.settings/org.eclipse.wst.common.project.facet.core.xml b/.settings/org.eclipse.wst.common.project.facet.core.xml new file mode 100644 index 0000000..1e1fabd --- /dev/null +++ b/.settings/org.eclipse.wst.common.project.facet.core.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/.settings/org.eclipse.wst.jsdt.ui.superType.container b/.settings/org.eclipse.wst.jsdt.ui.superType.container new file mode 100644 index 0000000..3bd5d0a --- /dev/null +++ b/.settings/org.eclipse.wst.jsdt.ui.superType.container @@ -0,0 +1 @@ +org.eclipse.wst.jsdt.launching.baseBrowserLibrary \ No newline at end of file diff --git a/.settings/org.eclipse.wst.jsdt.ui.superType.name b/.settings/org.eclipse.wst.jsdt.ui.superType.name new file mode 100644 index 0000000..05bd71b --- /dev/null +++ b/.settings/org.eclipse.wst.jsdt.ui.superType.name @@ -0,0 +1 @@ +Window \ No newline at end of file diff --git a/.settings/org.eclipse.wst.validation.prefs b/.settings/org.eclipse.wst.validation.prefs new file mode 100644 index 0000000..04cad8c --- /dev/null +++ b/.settings/org.eclipse.wst.validation.prefs @@ -0,0 +1,2 @@ +disabled=06target +eclipse.preferences.version=1 diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..21bf86d --- /dev/null +++ b/pom.xml @@ -0,0 +1,129 @@ + + + + 4.0.0 + + maven-parent + org.gcube.tools + 1.0.0 + + + org.gcube.portal.liferay + user-registration-hook + war + user-registration-hook Hook + 1.0.0-SNAPSHOT + + + + + com.liferay.maven.plugins + liferay-maven-plugin + ${liferay.maven.plugin.version} + + ${liferay.auto.deploy.dir} + ${liferay.app.server.deploy.dir} + ${liferay.app.server.lib.global.dir} + ${liferay.app.server.portal.dir} + ${liferay.version} + hook + + + + maven-compiler-plugin + 2.5 + + UTF-8 + 1.6 + 1.6 + + + + maven-resources-plugin + 2.5 + + UTF-8 + + + + + + + + org.gcube.distribution + maven-portal-bom + LATEST + pom + import + + + + + + org.gcube.dvos + usermanagement-core + provided + + + org.gcube.common.portal + portal-manager + provided + + + com.sun.mail + javax.mail + provided + + + org.slf4j + slf4j-log4j12 + + + org.slf4j + slf4j-api + + + com.liferay.portal + portal-service + ${liferay.version} + provided + + + com.liferay.portal + util-java + ${liferay.version} + provided + + + javax.portlet + portlet-api + provided + + + javax.servlet + servlet-api + 2.4 + provided + + + javax.servlet.jsp + jsp-api + 2.0 + provided + + + + + Liferay-v6.2-CE-(Tomcat-7)-(2) + + 6.2.5 + 6.2.5 + /Users/massi/portal/liferay-portal-6.2-ce-ga6/deploy + /Users/massi/portal/liferay-portal-6.2-ce-ga6/tomcat-7.0.62/webapps + /Users/massi/portal/liferay-portal-6.2-ce-ga6/tomcat-7.0.62/lib/ext + /Users/massi/portal/liferay-portal-6.2-ce-ga6/tomcat-7.0.62/webapps/ROOT + + + + \ No newline at end of file diff --git a/src/main/java/org/gcube/portal/usersaccount/MyCreateUserAccountListener.java b/src/main/java/org/gcube/portal/usersaccount/MyCreateUserAccountListener.java new file mode 100644 index 0000000..fa64eda --- /dev/null +++ b/src/main/java/org/gcube/portal/usersaccount/MyCreateUserAccountListener.java @@ -0,0 +1,89 @@ +package org.gcube.portal.usersaccount; + +import java.util.List; + +import org.gcube.common.portal.PortalContext; +import org.gcube.common.portal.mailing.EmailNotification; +import org.gcube.vomanagement.usermanagement.GroupManager; +import org.gcube.vomanagement.usermanagement.RoleManager; +import org.gcube.vomanagement.usermanagement.UserManager; +import org.gcube.vomanagement.usermanagement.exception.RoleRetrievalFault; +import org.gcube.vomanagement.usermanagement.impl.LiferayGroupManager; +import org.gcube.vomanagement.usermanagement.impl.LiferayRoleManager; +import org.gcube.vomanagement.usermanagement.impl.LiferayUserManager; +import org.gcube.vomanagement.usermanagement.model.GCubeUser; +import org.gcube.vomanagement.usermanagement.model.GatewayRolesNames; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.liferay.portal.ModelListenerException; +import com.liferay.portal.model.BaseModelListener; +import com.liferay.portal.model.User; +/** + * + * @author Massimiliano Assante, CNR-ISTI + * + * Model Listeners are used to listen for events on models and do something in response. + * They’re similar in concept to custom action hooks, which perform actions in response to portal events (user login, for example). + * Model listeners implement the ModelListener interface. + * + * @see https://dev.liferay.com/develop/tutorials/-/knowledge_base/6-2/creating-model-listeners + */ +public class MyCreateUserAccountListener extends BaseModelListener { + private static final Logger _log = LoggerFactory.getLogger(MyCreateUserAccountListener.class); + final String SUBJECT = "New user account notification"; + + @Override + public void onAfterCreate(User user) throws ModelListenerException { + System.out.println("onAfterCreate User INTERCEPTED " + user.getFullName()); + handleUserRegistration(user); + } + + private void handleUserRegistration(User user) { + UserManager um = new LiferayUserManager(); + GroupManager gm = new LiferayGroupManager(); + RoleManager rm = new LiferayRoleManager(); + try { + System.out.println("addUser hook ON"); + String rootVoName = PortalContext.getConfiguration().getInfrastructureName(); + long groupId = gm.getGroupIdFromInfrastructureScope("/"+rootVoName); + long infraManagerRoleId = -1; + try { + infraManagerRoleId = rm.getRoleIdByName(GatewayRolesNames.INFRASTRUCTURE_MANAGER.getRoleName()); + } + catch (RoleRetrievalFault e) { + _log.warn("There is no (Site) Role " + infraManagerRoleId + " in this portal. Will not notify about newly user accounts."); + return; + } + _log.trace("Root is: " + rootVoName + " Scanning roles ...."); + + List managers = um.listUsersByGroupAndRole(groupId, infraManagerRoleId); + if (managers == null || managers.isEmpty()) { + _log.warn("There are no users with (Site) Role " + infraManagerRoleId + " on " + rootVoName + " in this portal. Will not notify about newly user accounts."); + } + else { + for (GCubeUser manager : managers) { + sendNotification(manager, user); + _log.info("sent email to manager: " + manager.getEmail()); + } + } + + } catch (Exception e) { + e.printStackTrace(); + } + } + + private void sendNotification(GCubeUser manager, User user) { + StringBuilder body = new StringBuilder("Dear ").append(manager.getFirstName()) + .append("

").append("") + .append(user.getFullName()).append(" (").append(user.getScreenName()).append(")").append("").append(" registered to the portal with the following email:").append(user.getEmailAddress()) + .append("

") + .append("

") + .append("You received this email because you are an Infrastructure Manager in this portal") + .append("

"); + + + EmailNotification toSend = new EmailNotification(manager.getEmail(), SUBJECT, body.toString(), null); + toSend.sendEmail(); + } +} \ No newline at end of file diff --git a/src/main/resources/clientlog4j.properties b/src/main/resources/clientlog4j.properties new file mode 100644 index 0000000..4a2e1cd --- /dev/null +++ b/src/main/resources/clientlog4j.properties @@ -0,0 +1,12 @@ +log4j.rootLogger=DEBUG, A1 +log4j.appender.A1=org.apache.log4j.ConsoleAppender +log4j.appender.A1.layout=org.apache.log4j.PatternLayout + +# Print the date in ISO 8601 format +log4j.appender.A1.layout.ConversionPattern=%d [%t] %-5p %c - %m%n + +# Print only messages of level TRACE or above in the package org.gcube +log4j.logger.org.gcube=TRACE +log4j.logger.org.gcube.application.framework.core.session=INFO +log4j.logger.org.gcube.common.scope.impl.DefaultScopeProvider=ERROR +log4j.logger.com.netflix.astyanax.connectionpool.impl.CountingConnectionPoolMonitor=ERROR \ No newline at end of file diff --git a/src/main/resources/portal.properties b/src/main/resources/portal.properties new file mode 100644 index 0000000..c1ee47b --- /dev/null +++ b/src/main/resources/portal.properties @@ -0,0 +1,3 @@ +# +#Mon July 4 16:56:00 CET 2016 +value.object.listener.com.liferay.portal.model.User=org.gcube.portal.usersaccount.MyCreateUserAccountListener diff --git a/src/main/webapp/WEB-INF/liferay-hook.xml b/src/main/webapp/WEB-INF/liferay-hook.xml new file mode 100644 index 0000000..944195a --- /dev/null +++ b/src/main/webapp/WEB-INF/liferay-hook.xml @@ -0,0 +1,6 @@ + + + + + portal.properties + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/liferay-plugin-package.properties b/src/main/webapp/WEB-INF/liferay-plugin-package.properties new file mode 100644 index 0000000..d9ce867 --- /dev/null +++ b/src/main/webapp/WEB-INF/liferay-plugin-package.properties @@ -0,0 +1,9 @@ +name=user-registration-hook +module-group-id=liferay +module-incremental-version=1 +tags= +short-description= +change-log= +page-url=http://www.gcube.system.org +author=Massimiliano Assante +licenses=EUPL diff --git a/src/main/webapp/WEB-INF/web.xml b/src/main/webapp/WEB-INF/web.xml new file mode 100644 index 0000000..7d8c082 --- /dev/null +++ b/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file