diff --git a/src/main/java/org/gcube/portal/usersaccount/WorkspaceCreateAccountThread.java b/src/main/java/org/gcube/portal/usersaccount/WorkspaceCreateAccountThread.java index 6a46ff8..e7bf766 100644 --- a/src/main/java/org/gcube/portal/usersaccount/WorkspaceCreateAccountThread.java +++ b/src/main/java/org/gcube/portal/usersaccount/WorkspaceCreateAccountThread.java @@ -1,38 +1,76 @@ package org.gcube.portal.usersaccount; +import java.util.ArrayList; +import java.util.List; import org.gcube.common.authorization.library.provider.SecurityTokenProvider; +import static org.gcube.common.authorization.client.Constants.authorizationService; import org.gcube.common.portal.PortalContext; import org.gcube.common.scope.api.ScopeProvider; import org.gcube.common.storagehub.client.dsl.StorageHubClient; -import org.gcube.portal.oidc.lr62.OIDCUmaUtil; +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; public class WorkspaceCreateAccountThread implements Runnable { + private static Logger _log = LoggerFactory.getLogger(WorkspaceCreateAccountThread.class); + public static final String AUTORISED_INFRA_ROLE = "Infrastructure-Manager"; + private String newUserUserName; - private static Logger _log = LoggerFactory.getLogger(WorkspaceCreateAccountThread.class); + public WorkspaceCreateAccountThread(String newUserUserName, String newUserFullName, String newUserEmailAddress) { + super(); + this.newUserUserName = newUserUserName; + _log.info("Calling StorageHub for Workspace creation to new user: " + newUserUserName + " ("+newUserFullName+")"); + } - private String newUserUserName; - - public WorkspaceCreateAccountThread(String newUserUserName, String newUserFullName, String newUserEmailAddress) { - super(); - this.newUserUserName = newUserUserName; - _log.info("Calling SHUB for Workspace creation to new user: " + newUserUserName + " (" + newUserFullName + ")"); - } - - @Override - public void run() { - String context = "/" + PortalContext.getConfiguration().getInfrastructureName(); - String authorizationToken = PortalContext.getConfiguration().getCurrentUserToken(context, newUserUserName); - SecurityTokenProvider.instance.set(authorizationToken); - ScopeProvider.instance.set(context); - OIDCUmaUtil.provideConfiguredPortalClientUMATokenInThreadLocal(context); - try { - StorageHubClient shc = new StorageHubClient(); - shc.createUserAccount(newUserUserName); - _log.info("Done Workspace creation for user: " + newUserUserName); - } catch (Exception e) { - _log.error("Creating new account on the storage HUB", e); - } - } + @Override + public void run() { + getWS(newUserUserName, "/"+PortalContext.getConfiguration().getInfrastructureName()); + } + public static void getWS(String currentUsername, String context) { + String username = currentUsername; + String authorizationToken = PortalContext.getConfiguration().getCurrentUserToken(context, username); + SecurityTokenProvider.instance.set(authorizationToken); + ScopeProvider.instance.set(context); + String previousToken = authorizationToken; + try { + //get the super user + String infraContext = "/"+PortalContext.getConfiguration().getInfrastructureName(); + long groupId = new LiferayGroupManager().getGroupIdFromInfrastructureScope(infraContext); + RoleManager rm = new LiferayRoleManager(); + UserManager uMan = new LiferayUserManager(); + long roleId = rm.getRoleId(AUTORISED_INFRA_ROLE, groupId); + List users = uMan.listUsersByGroupAndRole(groupId, roleId); + if (users.isEmpty()) { + _log.error("Cannot create this user account on storageHub there is no user having role {} on context {}", AUTORISED_INFRA_ROLE , infraContext); + return; + } + else { + GCubeUser theAdmin = users.get(0); + String theAdminToken = PortalContext.getConfiguration().getCurrentUserToken(infraContext, theAdmin.getUsername()); + 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); + StorageHubClient shc = new StorageHubClient(); + shc.createUserAccount(currentUsername); + SecurityTokenProvider.instance.set(previousToken); + } + } + catch (Exception e) { + e.printStackTrace(); + SecurityTokenProvider.instance.set(previousToken); + return; + } + } } + +