diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..57a9e4b --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,17 @@ + +# Changelog for VRE Deploy Portlet + +All notable changes to this project will be documented in this file. +This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + + +## [v4.3.1-SNAPSHOT] - 2021-02-02 + +Ported to git + +modified to support the new IAM Keycloak based + + +## [v1.0.0] - 2008-10-21 + +First release, for changes between 1.0 version and 4.2 see changelog xml in distro folder. diff --git a/FUNDING.md b/FUNDING.md new file mode 100644 index 0000000..6fa9eac --- /dev/null +++ b/FUNDING.md @@ -0,0 +1,26 @@ +# Acknowledgments + +The projects leading to this software have received funding from a series of European Union programmes including: + +- the Sixth Framework Programme for Research and Technological Development + - [DILIGENT](https://cordis.europa.eu/project/id/004260) (grant no. 004260). +- the Seventh Framework Programme for research, technological development and demonstration + - [D4Science](https://cordis.europa.eu/project/id/212488) (grant no. 212488); + - [D4Science-II](https://cordis.europa.eu/project/id/239019) (grant no.239019); + - [ENVRI](https://cordis.europa.eu/project/id/283465) (grant no. 283465); + - [iMarine](https://cordis.europa.eu/project/id/283644) (grant no. 283644); + - [EUBrazilOpenBio](https://cordis.europa.eu/project/id/288754) (grant no. 288754). +- the H2020 research and innovation programme + - [SoBigData](https://cordis.europa.eu/project/id/654024) (grant no. 654024); + - [PARTHENOS](https://cordis.europa.eu/project/id/654119) (grant no. 654119); + - [EGI-Engage](https://cordis.europa.eu/project/id/654142) (grant no. 654142); + - [ENVRI PLUS](https://cordis.europa.eu/project/id/654182) (grant no. 654182); + - [BlueBRIDGE](https://cordis.europa.eu/project/id/675680) (grant no. 675680); + - [PerformFISH](https://cordis.europa.eu/project/id/727610) (grant no. 727610); + - [AGINFRA PLUS](https://cordis.europa.eu/project/id/731001) (grant no. 731001); + - [DESIRA](https://cordis.europa.eu/project/id/818194) (grant no. 818194); + - [ARIADNEplus](https://cordis.europa.eu/project/id/823914) (grant no. 823914); + - [RISIS 2](https://cordis.europa.eu/project/id/824091) (grant no. 824091); + - [EOSC-Pillar](https://cordis.europa.eu/project/id/857650) (grant no. 857650); + - [Blue Cloud](https://cordis.europa.eu/project/id/862409) (grant no. 862409); + - [SoBigData-PlusPlus](https://cordis.europa.eu/project/id/871042) (grant no. 871042); \ No newline at end of file diff --git a/pom.xml b/pom.xml index 3dc51db..da0b88b 100644 --- a/pom.xml +++ b/pom.xml @@ -13,7 +13,7 @@ org.gcube.portlets.admin vre-deploy war - 4.3.0 + 4.3.1-SNAPSHOT gCube VRE Deploy Wizard Portlet gCube VRE Deploy Wizard Portlet. @@ -82,6 +82,12 @@ home-library provided + + org.gcube.portal + oidc-library-portal + [1.0.0-SNAPSHOT, 2.0.0-SNAPSHOT) + provided + org.gcube.portlets.user gcube-widgets diff --git a/src/main/java/org/gcube/portlets/admin/vredeployer/server/VREDeployerServiceImpl.java b/src/main/java/org/gcube/portlets/admin/vredeployer/server/VREDeployerServiceImpl.java index c8371e4..da5bb55 100644 --- a/src/main/java/org/gcube/portlets/admin/vredeployer/server/VREDeployerServiceImpl.java +++ b/src/main/java/org/gcube/portlets/admin/vredeployer/server/VREDeployerServiceImpl.java @@ -54,6 +54,7 @@ import org.gcube.portal.custom.communitymanager.ThemesIdManager; import org.gcube.portal.custom.communitymanager.components.GCUBESiteLayout; import org.gcube.portal.custom.communitymanager.impl.GCubeSiteManagerImpl; import org.gcube.portal.custom.scopemanager.scopehelper.ScopeHelper; +import org.gcube.portal.oidc.lr62.OIDCUmaUtil; import org.gcube.portlets.admin.vredeployer.client.VredeployerService; import org.gcube.portlets.admin.vredeployer.client.model.VREFunctionalityModel; import org.gcube.portlets.admin.vredeployer.shared.ResourceCategory; @@ -79,7 +80,9 @@ import org.gcube.vomanagement.usermanagement.exception.UserManagementSystemExcep 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 org.gcube.vremanagement.vremodel.cl.stubs.types.FunctionalityItem; import org.gcube.vremanagement.vremodel.cl.stubs.types.GHN; import org.gcube.vremanagement.vremodel.cl.stubs.types.GHNsPerFunctionality; @@ -359,11 +362,11 @@ public class VREDeployerServiceImpl extends RemoteServiceServlet implements Vre } for (String func : funCategories.keySet()) { - System.out.println("-"+func); + log.debug("-"+func); for(ResourceCategory category : funCategories.get(func)) { - System.out.println("--"+category.getName()); + log.debug("--"+category.getName()); for(ResourceCategoryItem rc: category.getItems()) { - System.out.println("----"+rc.getName() + " : " + rc.isSelected()); + log.debug("----"+rc.getName() + " : " + rc.isSelected()); } } } @@ -394,7 +397,7 @@ public class VREDeployerServiceImpl extends RemoteServiceServlet implements Vre List services = toWorkWith.foundServices(); if (services != null) { for (RunningInstanceMessage se : services) { - System.out.println(se.serviceName() + " - " + se.serviceClass()); + log.debug(se.serviceName() + " - " + se.serviceClass()); } } @@ -553,7 +556,7 @@ public class VREDeployerServiceImpl extends RemoteServiceServlet implements Vre log.info("ADDING user designer and manager, found designer: " + designer + " found manager: "+manager); - long vreCreatedId = createCommunityAndLayoutAndHLFolder(vreName, description); + long vreCreatedId = createCommunityAndLayoutAndVREFolder(vreName, description, designer, manager); log.info("--- createCommunityAndLayout COMPLETED, vreCreatedId="+vreCreatedId); String vreScope = ""; @@ -696,43 +699,44 @@ public class VREDeployerServiceImpl extends RemoteServiceServlet implements Vre GroupManager gm = new LiferayGroupManager(); String previousToken = SecurityTokenProvider.instance.get(); //get the super user + log.info("Getting super user with role {}", GatewayRolesNames.INFRASTRUCTURE_MANAGER.getRoleName()); + //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); - 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 done"); - authorizationService().setTokenRoles(theAdminToken, rolesString); - SecurityTokenProvider.instance.set(theAdminToken); - String newVreContext = gm.getInfrastructureScope(vreCreated.getGroupId()); - StorageHubClient shc = new StorageHubClient(); - String vreFolderName = Util.getVREGroupFromContext(newVreContext); - VREFolderManager vreFolderMaanger = shc.getVreFolderManager(vreFolderName); - vreFolderMaanger.createVRE(AccessType.WRITE_OWNER, designer); - vreFolderMaanger.setAdmin(designer); - if (designer.compareTo(manager) != 0) { - vreFolderMaanger.addUser(manager); - vreFolderMaanger.setAdmin(manager); - } - - log.info("Created the VRE Folder on storageHub: {} ", vreFolderName); - - SecurityTokenProvider.instance.set(previousToken); + long rootgroupId = gm.getGroupIdFromInfrastructureScope(infraContext); + User theAdmin = LiferayUserManager.getRandomUserWithRole(rootgroupId, GatewayRolesNames.INFRASTRUCTURE_MANAGER); + if (theAdmin == null) { + log.error("Cannot create VRE Folder for this new VRE, There is no user having role {} on context: " + GatewayRolesNames.INFRASTRUCTURE_MANAGER.getRoleName()); + } + String adminUsername = theAdmin.getScreenName(); + log.info("Got the super user: {}",adminUsername); + String theAdminToken = PortalContext.getConfiguration().getCurrentUserToken(infraContext, adminUsername); + List rolesString = new ArrayList(); + List theAdminRoles = new LiferayRoleManager().listRolesByUserAndGroup(theAdmin.getUserId(), rootgroupId); + for (GCubeRole gCubeRole : theAdminRoles) { + rolesString.add(gCubeRole.getRoleName()); + } + rolesString.add(GatewayRolesNames.INFRASTRUCTURE_MANAGER.getRoleName()); + log.info("legacy authorizationService().setTokenRoles done"); + authorizationService().setTokenRoles(theAdminToken, rolesString); + SecurityTokenProvider.instance.set(theAdminToken); + + OIDCUmaUtil.provideConfiguredPortalClientUMATokenInThreadLocal("/" + PortalContext.getConfiguration().getInfrastructureName()); + System.out.println("\n\n***** new authorizationService PortalClient UMA-Token In ThreadLocal done **** "); + + String newVreContext = gm.getInfrastructureScope(vreCreated.getGroupId()); + StorageHubClient shc = new StorageHubClient(); + String vreFolderName = Util.getVREGroupFromContext(newVreContext); + VREFolderManager vreFolderMaanger = shc.getVreFolderManager(vreFolderName); + vreFolderMaanger.createVRE(AccessType.WRITE_OWNER, designer); + vreFolderMaanger.setAdmin(designer); + if (designer.compareTo(manager) != 0) { + vreFolderMaanger.addUser(manager); + vreFolderMaanger.setAdmin(manager); + } + + log.info("Created the VRE Folder on storageHub: {} ", vreFolderName); + + SecurityTokenProvider.instance.set(previousToken); //} } /** @@ -791,11 +795,7 @@ public class VREDeployerServiceImpl extends RemoteServiceServlet implements Vre //*** Overall deploy status report part toReturn.setGlobalStatus(convStatus(toConvert.getStatus())); - - //*** Cloud deploy report part - GHNonCloudReport cDeploy = toConvert.getCloudDeployingReport(); - - System.out.println("***** GHNonCloudReport Not Selected ******"); + log.trace("***** GHNonCloudReport Not Selected ******"); ClientCloudReport cdp = new ClientCloudReport(); cdp.setStatus(DeployStatus.SKIP); toReturn.setCloudReport(cdp); @@ -880,7 +880,7 @@ public class VREDeployerServiceImpl extends RemoteServiceServlet implements Vre /** * Creates the community and its layout in Liferay */ - private long createCommunityAndLayoutAndHLFolder(String vreName, String description) { + private long createCommunityAndLayoutAndVREFolder(String vreName, String description, String designer, String manager) { if (vreExists(vreName)) { log.warn("VRE Exists already"); @@ -901,11 +901,8 @@ public class VREDeployerServiceImpl extends RemoteServiceServlet implements Vre String desc = (session.getAttribute(DESCRIPTION) == null) ? "No Description found": session.getAttribute(DESCRIPTION).toString(); //desc - - String designer = (String) session.getAttribute(DESIGNER); - log.info("Designer found Name : " + designer); - String manager = (String) session.getAttribute(MANAGER); - log.info("Manager found Name : " + manager); + log.info("Designer assigned: " + designer); + log.info("Manager assigned : " + manager); try { @@ -919,8 +916,8 @@ public class VREDeployerServiceImpl extends RemoteServiceServlet implements Vre long groupId = vreCreated.getGroupId(); Group lrGroup = GroupLocalServiceUtil.getGroup(groupId); - GCubeUser userBean = new LiferayUserManager().getUserByUsername(session.getUsername()); - User lrUser = UserLocalServiceUtil.getUser(userBean.getUserId()); + GCubeUser currentVREManagerUserBean = new LiferayUserManager().getUserByUsername(session.getUsername()); + User lrUser = UserLocalServiceUtil.getUser(currentVREManagerUserBean.getUserId()); SiteManagerUtil.createLayout(lrGroup, lrUser, siteLayout); @@ -931,17 +928,17 @@ public class VREDeployerServiceImpl extends RemoteServiceServlet implements Vre log.info("Assigned theme with id: " + themid + " to groupid: " + groupId); - //the method above create a VRE and assign the manager Role to the person that triggers the creation + //the method above creates a VRE and assign the manager Role to the person that triggers the creation //however the VRE-Designer and the VRE-Manager persons of the VRE could be different and need to be created too UserManager uman = new LiferayUserManager(); //if the manager is not the one who triggered the creation - String currUser = session.getUsername(); + String currUser = currentVREManagerUserBean.getUsername(); log.info("***Username of who triggered the creation is: " + currUser); log.info("Trying to create VRE Group Folder through Storage Hub ..."); createVRESharedGroupFolder(uman, vreCreated, designer, manager, description); - log.info("--- createVRESharedGroupFolder OK, sending Message to designer."); + log.info("--- createVRESharedGroupFolder OK, now assigning the designer and manager to the Site (VRE)"); RoleManager rm = new LiferayRoleManager(); @@ -949,23 +946,24 @@ public class VREDeployerServiceImpl extends RemoteServiceServlet implements Vre //add the role VRE-Manager long userId = uman.getUserId(manager); uman.assignUserToGroup(groupId, userId); - log.info("Added manager " + manager + " to group " + vreName + " with Success"); + log.info("\n\n*** Added selected VRE-Manager " + manager + " to group " + vreName + " with Success"); - log.info("Assigning Role: VRE-Manager"); + log.info("\n\n*** Now trying assigning Site Role VRE-Manager to " + manager); long roleId = rm.getRoleIdByName(VRE_MANAGER); rm.assignRoleToUser(userId, groupId, roleId); - log.info("Admin Role VRE-Manager Associated to user " + manager + " .... returning ..."); - + log.info("Site Role VRE-Manager associated to user " + manager + " with Success"); } //if the designer is different if (designer.compareTo(manager) != 0) { + log.info("\n\n*** the VRE-Designer is not equal to the VRE-Manager, need to add " + designer + " to this Site (VRE)"); //add the role VRE-Designer long userId = uman.getUserId(designer); uman.assignUserToGroup(groupId, userId); log.info("Added designer " + designer + " to group " + vreName + " with Success"); + log.info("\n\n*** Now trying assigning Site Role VRE-Designer to " + designer); long roleId = rm.getRoleIdByName(VRE_DESIGNER); rm.assignRoleToUser(userId, groupId, roleId); - log.info("Admin Role VRE-Designer Associated to user " + designer + " .... returning ..."); + log.info("Site Role VRE-Designer associated to user " + designer + " .... returning ..."); } return groupId;