package org.gcube.portal.removeaccount.thread; 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.usersaccount.Constants; 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; private RoleManager rm; public RemoveUserFromJCR(String username2Delete, GroupManager gm, UserManager uMan) { this.username2Delete = username2Delete; this.gm = gm; this.uMan = uMan; this.rm = new LiferayRoleManager(); } public boolean remove() { try { _log.debug("in RemoveUserFromJCR remove() for " + username2Delete ); //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 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); _log.debug("Autorising drop workspace with infra manager token of " + theAdminToken); StorageHubClient shc = new StorageHubClient(); _log.debug("BEFORE stohub.deleteUserAccount " + username2Delete); shc.deleteUserAccount(username2Delete); return true; } } catch (Exception e) { e.printStackTrace(); _log.error("Could not delete " + username2Delete + " from JCR an error occurred on the service"); return false; } } }