package org.gcube.portlets.admin; 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.plugins.AbstractPlugin; import org.gcube.common.storagehub.client.proxies.UserManagerClient; import org.gcube.vomanagement.usermanagement.GroupManager; import org.gcube.vomanagement.usermanagement.RoleManager; import org.gcube.vomanagement.usermanagement.UserManager; import org.gcube.vomanagement.usermanagement.impl.LiferayRoleManager; import org.gcube.vomanagement.usermanagement.model.GCubeRole; import org.gcube.vomanagement.usermanagement.model.GCubeUser; import com.liferay.portal.kernel.log.Log; import com.liferay.portal.kernel.log.LogFactoryUtil; /** * * @author Massimiliano Assante ISTI-CNR * */ public class RemoveUserFromJCR { private static Log _log = LogFactoryUtil.getLog(RemoveUserFromJCR.class); private String username2Delete; private GroupManager gm; private UserManager uMan; public RemoveUserFromJCR(String username2Delete, GroupManager gm, UserManager uMan) { this.username2Delete = username2Delete; this.gm = gm; this.uMan = uMan; } public boolean remove() { try { //get the super user String infraContext = "/"+PortalContext.getConfiguration().getInfrastructureName(); long groupId = gm.getGroupIdFromInfrastructureScope(infraContext); RoleManager rm = new LiferayRoleManager(); long roleId = rm.getRoleId(RemoveAccountPortlet.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 " + RemoveAccountPortlet.AUTORISED_INFRA_ROLE + " on context: " + infraContext); return false; } 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()); } authorizationService().setTokenRoles(theAdminToken, rolesString); SecurityTokenProvider.instance.set(theAdminToken); UserManagerClient userClient = AbstractPlugin.users().build(); userClient.removeUser(username2Delete); return true; } } catch (Exception e) { _log.error("Could not delete " + username2Delete + " from JCR ", e); return false; } } }