package org.gcube.portal.usersaccount; import static org.gcube.common.authorization.client.Constants.authorizationService; import java.util.ArrayList; import java.util.List; import org.gcube.common.authorization.library.provider.SecurityTokenProvider; import org.gcube.common.portal.PortalContext; import org.gcube.common.storagehub.client.dsl.StorageHubClient; import org.gcube.portal.notifications.thread.NewUserAccountNotificationThread; import org.gcube.portal.removeaccount.thread.RemoveUserTokenFromInfraThread; import org.gcube.portal.removeaccount.thread.RemovedUserAccountThread; import org.gcube.portal.removeaccount.thread.RemovedUserFromLDAPThread; import org.gcube.vomanagement.usermanagement.GroupManager; import org.gcube.vomanagement.usermanagement.RoleManager; import org.gcube.vomanagement.usermanagement.UserManager; 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.GCubeRole; import org.gcube.vomanagement.usermanagement.model.GCubeUser; 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"; private GroupManager gm; private UserManager uMan; private RoleManager rm; @Override public void onAfterCreate(User user) throws ModelListenerException { _log.info("onAfterCreate NewUserAccount listener for: " + user.getScreenName() + " / " + user.getFullName()); Thread emailManagersThread = new Thread(new NewUserAccountNotificationThread(user.getScreenName(), user.getFullName(), user.getEmailAddress())); emailManagersThread.start(); Thread WorkspaceAccountCreationThread = new Thread(new WorkspaceCreateAccountThread(user.getScreenName(), user.getFullName(), user.getEmailAddress())); WorkspaceAccountCreationThread.start(); } @Override public void onBeforeRemove(User user) throws ModelListenerException { gm = new LiferayGroupManager(); uMan = new LiferayUserManager(); rm = new LiferayRoleManager(); _log.info("onBeforeRemove userAccount listener for: " + user.getScreenName() + " / " + user.getFullName()); String username2Delete = user.getScreenName(); _log.info("Trying to remove user from JCR and not notify infra-managers ..."); try { _log.debug("Getting super user with role {}", Constants.AUTORISED_INFRA_ROLE); //get the super user String infraContext = "/"+PortalContext.getConfiguration().getInfrastructureName(); long groupId = gm.getGroupIdFromInfrastructureScope(infraContext); long roleId = rm.getRoleId(Constants.AUTORISED_INFRA_ROLE, groupId); List users = uMan.listUsersByGroupAndRole(groupId, roleId); if (users.isEmpty()) { _log.error("Cannot delete the user: there is no user having role " + Constants.AUTORISED_INFRA_ROLE + " on context: " + infraContext); return; } else { GCubeUser theAdmin = users.get(0); String adminUsername = theAdmin.getUsername(); String theAdminToken = PortalContext.getConfiguration().getCurrentUserToken(infraContext, adminUsername); List theAdminRoles = rm.listRolesByUserAndGroup(theAdmin.getUserId(), groupId); List rolesString = new ArrayList(); for (GCubeRole gCubeRole : theAdminRoles) { rolesString.add(gCubeRole.getRoleName()); } Thread dropUserWorkspaceThread = new Thread(new RemovedUserAccountThread(username2Delete, theAdminToken, rolesString)); dropUserWorkspaceThread.start(); } _log.info("Trying to remove user from LDAP ..."); Thread removeFromLDAPThread = new Thread(new RemovedUserFromLDAPThread(username2Delete)); removeFromLDAPThread.start(); _log.info("Trying to remove user from Auth ..."); Thread deleteAllUserAuthThread = new Thread(new RemoveUserTokenFromInfraThread(username2Delete)); deleteAllUserAuthThread.start(); } catch (Exception e) { e.printStackTrace(); } } // @Override // public void onAfterRemove(User user) }