fixing full scope

This commit is contained in:
Francesco Mangiacrapa 2021-03-08 12:36:19 +01:00
parent e72a2b14b1
commit b16efacd9f
2 changed files with 25 additions and 19 deletions

View File

@ -129,14 +129,14 @@ public class ThreddsWorkspaceSyncServiceImpl extends RemoteServiceServlet implem
/** /**
* Gets the available THREDDS catalogues for target scope. * Gets the available THREDDS catalogues for target scope.
* *
* @param targetScope the target scope * @param targetFullScope the target scope
* @return the available catalogues for scope * @return the available catalogues for scope
* @throws Exception the exception * @throws Exception the exception
*/ */
@Override @Override
public List<ThCatalogueBean> getAvailableCataloguesForScope(String targetScope) throws Exception { public List<ThCatalogueBean> getAvailableCataloguesForScope(String targetFullScope) throws Exception {
if(targetScope==null) if(targetFullScope==null)
throw new Exception("Invalid scope null"); throw new Exception("Invalid scope null");
String originalScope = null; String originalScope = null;
@ -150,19 +150,20 @@ public class ThreddsWorkspaceSyncServiceImpl extends RemoteServiceServlet implem
originalScope = wsScope; originalScope = wsScope;
originalToken = wsUserToken; originalToken = wsUserToken;
String targetScopeUserToken = PortalContext.getConfiguration().getCurrentUserToken(targetScope, user.getUsername()); String targetScopeUserToken = PortalContext.getConfiguration().getCurrentUserToken(targetFullScope, user.getUsername());
listCtlgs = getSyncService().getAvailableCataloguesByToken(targetScope, wsUserToken, targetScopeUserToken); listCtlgs = getSyncService().getAvailableCataloguesByToken(targetFullScope, wsUserToken, targetScopeUserToken);
logger.debug("Retuning "+listCtlgs.size()+" Catalogues for scope: "+targetScope); logger.debug("Retuning "+listCtlgs.size()+" Catalogues for scope: "+targetFullScope);
if(logger.isDebugEnabled()){ if(logger.isDebugEnabled()){
for (ThCatalogueBean thCatalogueBean : listCtlgs) { for (ThCatalogueBean thCatalogueBean : listCtlgs) {
logger.debug(thCatalogueBean.toString()); logger.debug(thCatalogueBean.toString());
} }
} }
}catch (Exception e) { }catch (Exception e) {
logger.error("Error on checking available Catalogue in the scope: "+targetScope, e); logger.error("Error on checking available Catalogue in the scope: "+targetFullScope, e);
}finally { }finally {
if(originalScope!=null && originalScope.compareTo(targetScope)!=0) {
if(originalScope!=null && originalScope.compareTo(targetFullScope)!=0) {
logger.info("Resetting the scope: "+originalScope + " was original WS context"); logger.info("Resetting the scope: "+originalScope + " was original WS context");
ScopeProvider.instance.set(originalScope); ScopeProvider.instance.set(originalScope);
if(originalToken!=null) { if(originalToken!=null) {
@ -252,10 +253,13 @@ public class ThreddsWorkspaceSyncServiceImpl extends RemoteServiceServlet implem
List<GCubeGroup> listOfGroups = new ArrayList<GCubeGroup>(filteredGroupsForGatw); List<GCubeGroup> listOfGroups = new ArrayList<GCubeGroup>(filteredGroupsForGatw);
logger.info("list of VREs in the gateway "+gatewayHostname+" are "+listOfGroups.size()); logger.info("list of VREs in the gateway "+gatewayHostname+" are "+listOfGroups.size());
for (GCubeGroup gCubeGroup : listOfGroups) { for (GCubeGroup gCubeGroup : listOfGroups) {
long groupId = gCubeGroup.getGroupId();
String fullScope = groupManager.getInfrastructureScope(groupId);
logger.debug("For groupId: "+groupId+" got full scope: "+fullScope);
GcubeScopeType scopeType=null; GcubeScopeType scopeType=null;
if(groupManager.isVRE(gCubeGroup.getGroupId())){ if(groupManager.isVRE(groupId)){
scopeType = GcubeScopeType.VRE; scopeType = GcubeScopeType.VRE;
}else if(groupManager.isVO(gCubeGroup.getGroupId())){ }else if(groupManager.isVO(groupId)){
scopeType = GcubeScopeType.VO; scopeType = GcubeScopeType.VO;
} }
// }else if(groupManager.isRootVO(gCubeGroup.getGroupId())){ // }else if(groupManager.isRootVO(gCubeGroup.getGroupId())){
@ -265,7 +269,7 @@ public class ThreddsWorkspaceSyncServiceImpl extends RemoteServiceServlet implem
if(scopeType!=null){ if(scopeType!=null){
GatewayRolesThredds roles = WsUtil.getThreddsRoleFor(user, gCubeGroup); GatewayRolesThredds roles = WsUtil.getThreddsRoleFor(user, gCubeGroup);
//Adding only the scope where the user has the THREDDS_ADMIN role //Adding only the scope where the user has the THREDDS_ADMIN role
GcubeScope gcubeScope = checkDataManagerCapacityAndThreddsCatalogue(roles, gCubeGroup, groupManager, scopeType); GcubeScope gcubeScope = checkDataManagerCapacityAndThreddsCatalogue(roles, gCubeGroup.getGroupName(), fullScope, groupManager, scopeType);
if(gcubeScope!=null) { if(gcubeScope!=null) {
listOfScopes.add(gcubeScope); listOfScopes.add(gcubeScope);
} }
@ -274,8 +278,9 @@ public class ThreddsWorkspaceSyncServiceImpl extends RemoteServiceServlet implem
GCubeGroup theRootVO = groupManager.getRootVO(); GCubeGroup theRootVO = groupManager.getRootVO();
GatewayRolesThredds roles = WsUtil.getThreddsRoleFor(user, theRootVO); GatewayRolesThredds roles = WsUtil.getThreddsRoleFor(user, theRootVO);
String rootVOFullScope = groupManager.getInfrastructureScope(theRootVO.getGroupId());
///ADDING THE ROOT SCOPE if the user has the THREDDS_ADMIN role in the ROOT-VO ///ADDING THE ROOT SCOPE if the user has the THREDDS_ADMIN role in the ROOT-VO
GcubeScope gcubeScope = checkDataManagerCapacityAndThreddsCatalogue(roles, theRootVO, groupManager, GcubeScopeType.ROOT); GcubeScope gcubeScope = checkDataManagerCapacityAndThreddsCatalogue(roles, theRootVO.getGroupName(), rootVOFullScope, groupManager, GcubeScopeType.ROOT);
if(gcubeScope!=null) { if(gcubeScope!=null) {
listOfScopes.add(gcubeScope); listOfScopes.add(gcubeScope);
} }
@ -309,22 +314,23 @@ public class ThreddsWorkspaceSyncServiceImpl extends RemoteServiceServlet implem
* - the scope has an available THREDDS catalogue configured * - the scope has an available THREDDS catalogue configured
* *
* @param role the role * @param role the role
* @param scope the scope * @param scopeName the scope name e.g. devVRE
* @param fullScope the full scope e.g. /gcube/devsec/devVRE
* @param groupManager the group manager * @param groupManager the group manager
* @param scopeType the scope type * @param scopeType the scope type
* @return the gcube scope {@link GcubeScope} if the two conditions (see description) are satisfied, null otherwise * @return the gcube scope {@link GcubeScope} if the two conditions (see description) are satisfied, null otherwise
* @throws Exception the exception * @throws Exception the exception
*/ */
private GcubeScope checkDataManagerCapacityAndThreddsCatalogue(GatewayRolesThredds role, GCubeGroup scope, GroupManager groupManager, GcubeScopeType scopeType) throws Exception { private GcubeScope checkDataManagerCapacityAndThreddsCatalogue(GatewayRolesThredds role, String scopeName, String fullScope, GroupManager groupManager, GcubeScopeType scopeType) throws Exception {
logger.debug("checking Data-Manager capacity and THREEDS catalogues for role: "+role, "scope name: "+scopeName+", scope: "+fullScope + " scope type: "+scopeType);
if(role!=null && role.getRoleName().equalsIgnoreCase(GatewayRolesNames.DATA_MANAGER.getRoleName())){ if(role!=null && role.getRoleName().equalsIgnoreCase(GatewayRolesNames.DATA_MANAGER.getRoleName())){
try { try {
List<ThCatalogueBean> list = getAvailableCataloguesForScope(scope.getGroupName()); List<ThCatalogueBean> list = getAvailableCataloguesForScope(fullScope);
if(list!=null) { if(list!=null) {
return new GcubeScope(scope.getGroupName(), groupManager.getInfrastructureScope(scope.getGroupId()), scopeType); return new GcubeScope(scopeName, fullScope, scopeType);
} }
}catch (Exception e) { }catch (Exception e) {
logger.error("Error on checking available catalogue for scope: "+scope.getGroupName(), e); logger.error("Error on checking available catalogue for scope: "+fullScope, e);
} }
} }
return null; return null;

View File

@ -173,7 +173,7 @@ public class WsUtil {
} }
} }
logger.info("For user: "+user+" in the scope: "+scope.getGroupName()+" read the role/s: " + threddsRoles); logger.info("For user: "+user.getUsername()+" in the scope: "+scope.getGroupName()+" read the role/s: " + threddsRoles);
GatewayRolesThredds toReturn = null; GatewayRolesThredds toReturn = null;
if (threddsRoles.contains(GatewayRolesThredds.DATA_MANAGER)) if (threddsRoles.contains(GatewayRolesThredds.DATA_MANAGER))