From 8b945a4993cc7c88ba2da579745e4f5860455850 Mon Sep 17 00:00:00 2001 From: Massimiliano Assante Date: Wed, 5 Feb 2020 15:56:26 +0100 Subject: [PATCH] updated methods for performance improvement --- .../GCubeHookSiteRoleLocalService.java | 49 ++++++++++--------- .../plugins/GCubeHookUserLocalService.java | 35 ++++++------- .../portal/plugins/util/HookConstants.java | 7 --- 3 files changed, 42 insertions(+), 49 deletions(-) delete mode 100644 src/main/java/org/gcube/portal/plugins/util/HookConstants.java diff --git a/src/main/java/org/gcube/portal/plugins/GCubeHookSiteRoleLocalService.java b/src/main/java/org/gcube/portal/plugins/GCubeHookSiteRoleLocalService.java index 7d88099..f2de26d 100644 --- a/src/main/java/org/gcube/portal/plugins/GCubeHookSiteRoleLocalService.java +++ b/src/main/java/org/gcube/portal/plugins/GCubeHookSiteRoleLocalService.java @@ -12,15 +12,19 @@ import org.gcube.common.storagehub.client.dsl.StorageHubClient; import org.gcube.common.storagehub.client.dsl.Util; import org.gcube.common.storagehub.client.dsl.VREFolderManager; import org.gcube.vomanagement.usermanagement.GroupManager; +import org.gcube.vomanagement.usermanagement.RoleManager; 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.GatewayRolesNames; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.liferay.portal.kernel.exception.PortalException; import com.liferay.portal.kernel.exception.SystemException; import com.liferay.portal.model.Role; +import com.liferay.portal.model.User; import com.liferay.portal.model.UserGroupRole; import com.liferay.portal.service.RoleLocalServiceUtil; import com.liferay.portal.service.UserGroupRoleLocalService; @@ -54,10 +58,10 @@ public class GCubeHookSiteRoleLocalService extends UserGroupRoleLocalServiceWrap try { String context = gm.getInfrastructureScope(groupId); String username = UserLocalServiceUtil.getUser(userId).getScreenName(); - /* Commenting this part as when the user is just created it fails*/ -// String userToken = authorizationService().resolveTokenByUserAndContext(username, context); -// List userRoles = getUserRoles(roleIds); -// authorizationService().setTokenRoles(userToken, userRoles); + /* Check this part CAREFULLY as when the user is just created it fails*/ + String userToken = authorizationService().resolveTokenByUserAndContext(username, context); + List userRoles = getUserRoles(roleIds); + authorizationService().setTokenRoles(userToken, userRoles); _log.debug("Check if addUserGroupRoles is done in a VRE"); if (gm.isVRE(groupId)) { _log.debug("addUserGroupRoles performed in a VRE, groupId=" + groupId); @@ -103,27 +107,26 @@ public class GCubeHookSiteRoleLocalService extends UserGroupRoleLocalServiceWrap String previousToken = SecurityTokenProvider.instance.get(); //get the super user _log.info("//get the super user"); + String infraContext = "/"+PortalContext.getConfiguration().getInfrastructureName(); -// long rootgroupId = gm.getGroupIdFromInfrastructureScope(infraContext); -// RoleManager rm = new LiferayRoleManager(); -// long roleId = rm.getRoleId(HookConstants.AUTORISED_INFRA_ROLE, rootgroupId); -// List users = uMan.listUsersByGroupAndRole(rootgroupId, roleId); -// if (users.isEmpty()) { -// _log.error("Cannot add the user as VRE Folder admin: there is no user having role {} on context: {}", HookConstants.AUTORISED_INFRA_ROLE, infraContext); -// return false; -// } -// else { - //GCubeUser theAdmin = users.get(0); - String adminUsername = "lucio.lelii"; - _log.info("Got the super user: {}",adminUsername); + long rootgroupId = gm.getGroupIdFromInfrastructureScope(infraContext); + User theAdmin = LiferayUserManager.getRandomUserWithRole(rootgroupId, GatewayRolesNames.INFRASTRUCTURE_MANAGER); + if (theAdmin == null) { + _log.warn("Cannot add the user as VRE Folder admin: there is no user having role " + GatewayRolesNames.INFRASTRUCTURE_MANAGER); + return false; + } + else { + RoleManager rm = new LiferayRoleManager(); + String adminUsername = theAdmin.getScreenName(); + _log.info("Got the super user: " +adminUsername); String theAdminToken = PortalContext.getConfiguration().getCurrentUserToken(infraContext, adminUsername); List rolesString = new ArrayList(); -// List theAdminRoles = rm.listRolesByUserAndGroup(theAdmin.getUserId(), rootgroupId); -// for (GCubeRole gCubeRole : theAdminRoles) { -// rolesString.add(gCubeRole.getRoleName()); -// } - rolesString.add("Infrastructure-Manager"); - _log.info("authorizationService().setTokenRoles(theAdminToken, rolesString);",theAdminToken); + List theAdminRoles = rm.listRolesByUserAndGroup(theAdmin.getUserId(), rootgroupId); + for (GCubeRole gCubeRole : theAdminRoles) { + rolesString.add(gCubeRole.getRoleName()); + } + rolesString.add(GatewayRolesNames.INFRASTRUCTURE_MANAGER.getRoleName()); + _log.info("authorizationService().setTokenRoles(theAdminToken, rolesString);" +theAdminToken); authorizationService().setTokenRoles(theAdminToken, rolesString); SecurityTokenProvider.instance.set(theAdminToken); @@ -135,7 +138,7 @@ public class GCubeHookSiteRoleLocalService extends UserGroupRoleLocalServiceWrap vreFolderManager.removeAdmin(theUserToPromoteOrDeclass); SecurityTokenProvider.instance.set(previousToken); return true; -// } + } } diff --git a/src/main/java/org/gcube/portal/plugins/GCubeHookUserLocalService.java b/src/main/java/org/gcube/portal/plugins/GCubeHookUserLocalService.java index 1d41454..6ace958 100644 --- a/src/main/java/org/gcube/portal/plugins/GCubeHookUserLocalService.java +++ b/src/main/java/org/gcube/portal/plugins/GCubeHookUserLocalService.java @@ -13,7 +13,6 @@ import org.gcube.common.storagehub.client.proxies.GroupManagerClient; import org.gcube.portal.plugins.thread.CheckShareLatexUserThread; import org.gcube.portal.plugins.thread.RemoveUserTokenFromVREThread; import org.gcube.portal.plugins.thread.UpdateUserToLDAPGroupThread; -import org.gcube.portal.plugins.util.HookConstants; import org.gcube.vomanagement.usermanagement.GroupManager; import org.gcube.vomanagement.usermanagement.RoleManager; import org.gcube.vomanagement.usermanagement.UserManager; @@ -21,7 +20,7 @@ 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.gcube.vomanagement.usermanagement.model.GatewayRolesNames; import com.liferay.portal.kernel.exception.SystemException; import com.liferay.portal.kernel.log.Log; @@ -155,25 +154,23 @@ public class GCubeHookUserLocalService extends UserLocalServiceWrapper { String previousToken = SecurityTokenProvider.instance.get(); //get the super user String infraContext = "/"+PortalContext.getConfiguration().getInfrastructureName(); -// long rootgroupId = gm.getGroupIdFromInfrastructureScope(infraContext); -// RoleManager rm = new LiferayRoleManager(); -// long roleId = rm.getRoleId(HookConstants.AUTORISED_INFRA_ROLE, rootgroupId); -// List users = uMan.listUsersByGroupAndRole(rootgroupId, roleId); -// if (users.isEmpty()) { -// _log.error("Cannot add the user as VRE Folder admin: there is no user having role {} on context: {}", HookConstants.AUTORISED_INFRA_ROLE, infraContext); -// return false; -// } -// else { - //GCubeUser theAdmin = users.get(0); - String adminUsername = "lucio.lelii"; + long rootgroupId = gm.getGroupIdFromInfrastructureScope(infraContext); + User theAdmin = LiferayUserManager.getRandomUserWithRole(rootgroupId, GatewayRolesNames.INFRASTRUCTURE_MANAGER); + if (theAdmin == null) { + _log.warn("Cannot add the user as VRE Folder admin: there is no user having role " + GatewayRolesNames.INFRASTRUCTURE_MANAGER); + return false; + } + else { + RoleManager rm = new LiferayRoleManager(); + String adminUsername = theAdmin.getScreenName(); _log.info("Got the super user: " +adminUsername); String theAdminToken = PortalContext.getConfiguration().getCurrentUserToken(infraContext, adminUsername); List rolesString = new ArrayList(); -// List theAdminRoles = rm.listRolesByUserAndGroup(theAdmin.getUserId(), rootgroupId); -// for (GCubeRole gCubeRole : theAdminRoles) { -// rolesString.add(gCubeRole.getRoleName()); -// } - rolesString.add("Infrastructure-Manager"); + List theAdminRoles = rm.listRolesByUserAndGroup(theAdmin.getUserId(), rootgroupId); + for (GCubeRole gCubeRole : theAdminRoles) { + rolesString.add(gCubeRole.getRoleName()); + } + rolesString.add(GatewayRolesNames.INFRASTRUCTURE_MANAGER.getRoleName()); _log.info("authorizationService().setTokenRoles(theAdminToken, rolesString);" +theAdminToken); authorizationService().setTokenRoles(theAdminToken, rolesString); SecurityTokenProvider.instance.set(theAdminToken); @@ -184,7 +181,7 @@ public class GCubeHookUserLocalService extends UserLocalServiceWrapper { client.removeUserFromGroup(username2Add, getVREFolderNameFromContext(context)); SecurityTokenProvider.instance.set(previousToken); return true; - //} + } } private static String getVREFolderNameFromContext(String context) { diff --git a/src/main/java/org/gcube/portal/plugins/util/HookConstants.java b/src/main/java/org/gcube/portal/plugins/util/HookConstants.java deleted file mode 100644 index f15e900..0000000 --- a/src/main/java/org/gcube/portal/plugins/util/HookConstants.java +++ /dev/null @@ -1,7 +0,0 @@ -package org.gcube.portal.plugins.util; - -public class HookConstants { - - public static final String AUTORISED_INFRA_ROLE = "Infrastructure-Manager"; - -}