diff --git a/pom.xml b/pom.xml index 20a58cf..6728cc7 100644 --- a/pom.xml +++ b/pom.xml @@ -1,4 +1,5 @@ - 4.0.0 @@ -44,6 +45,21 @@ org.gcube.common authorization-client + + org.gcube.resources.discovery + discovery-client + runtime + + + org.gcube.resources.discovery + ic-client + runtime + + + org.gcube.resources + common-gcore-resources + runtime + com.fasterxml.jackson.core jackson-databind diff --git a/src/main/java/org/gcube/context/authorization/TokensUtil.java b/src/main/java/org/gcube/context/authorization/TokensUtil.java index e5dd4f3..4a82f54 100644 --- a/src/main/java/org/gcube/context/authorization/TokensUtil.java +++ b/src/main/java/org/gcube/context/authorization/TokensUtil.java @@ -2,7 +2,6 @@ package org.gcube.context.authorization; import static org.gcube.common.authorization.client.Constants.authorizationService; -import java.io.File; import java.util.ArrayList; import java.util.HashMap; import java.util.LinkedHashMap; @@ -10,42 +9,43 @@ import java.util.Map; import org.gcube.common.authorization.library.provider.SecurityTokenProvider; import org.gcube.common.authorization.library.provider.UserInfo; -import org.gcube.common.scope.impl.ScopeBean; -import org.gcube.resourcemanagement.support.server.managers.scope.ScopeManager; +import org.gcube.resourcemanagement.support.server.managers.context.ContextManager; +import org.gcube.resourcemanagement.support.shared.types.datamodel.D4SEnvironment; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ObjectNode; - public class TokensUtil { private static final Logger logger = LoggerFactory.getLogger(TokensUtil.class); - public static Map getTokenForContexts(File voFile, String username, String serviceName) throws Exception{ - Map scopeTokenMap = new HashMap(); + public static Map getTokenForContexts(String username, String serviceName) throws Exception{ + Map contextTokenMap = new HashMap(); + + /* ObjectMapper objectMapper = new ObjectMapper(); ObjectNode objectNode = objectMapper.createObjectNode(); + */ try { - LinkedHashMap map = ScopeManager.readScopes(voFile.getAbsolutePath()); - for(String scope : map.keySet()) { + LinkedHashMap contexts = ContextManager.readContextsWithUUIDs(); + for(String context : contexts.keySet()) { try { - String context = map.get(scope).toString(); + //D4SEnvironment d4sEnvironment = contexts.get(context); System.out.println("Going to generate Token for Context " + context); logger.info("Going to generate Token for Context {}", context); UserInfo userInfo = new UserInfo(username, new ArrayList<>()); String userToken = authorizationService().generateUserToken(userInfo, context); SecurityTokenProvider.instance.set(userToken); String generatedToken = authorizationService().generateExternalServiceToken(serviceName); - scopeTokenMap.put(context, generatedToken); - objectNode.put(context, generatedToken); + contextTokenMap.put(context, generatedToken); + + //objectNode.put(context, generatedToken); logger.info("Token for Context {} is {}", context, generatedToken); }catch (Exception e) { - logger.error("Error while elaborating {}", scope, e); + logger.error("Error while elaborating {}", context, e); throw e; } finally { SecurityTokenProvider.instance.reset(); @@ -55,23 +55,20 @@ public class TokensUtil { throw ex; } + /* File tokenFile = new File("tokens-"+serviceName+".json"); objectMapper.writeValue(tokenFile, objectNode); + */ - return scopeTokenMap; + return contextTokenMap; } public static void main(String[] args) throws Exception { - if(args.length!=3) { + if(args.length!=2) { System.out.println("Please provide 'vo file path' as first argument 'username' as second and 'external application name' as third"); return; } - File voFile = new File(args[0]); - if(!voFile.exists()) { - System.out.println(args[0] + " does not exists"); - return; - } - getTokenForContexts(voFile, args[1], args[2]); + getTokenForContexts(args[1], args[2]); } } diff --git a/src/test/java/org/gcube/context/names/ContextTest.java b/src/test/java/org/gcube/context/names/ContextTest.java new file mode 100644 index 0000000..46d3d20 --- /dev/null +++ b/src/test/java/org/gcube/context/names/ContextTest.java @@ -0,0 +1,86 @@ +/** + * + */ +package org.gcube.context.names; + +import java.io.IOException; +import java.io.InputStream; +import java.util.Properties; + +import org.gcube.common.authorization.client.Constants; +import org.gcube.common.authorization.client.exceptions.ObjectNotFound; +import org.gcube.common.authorization.library.AuthorizationEntry; +import org.gcube.common.authorization.library.provider.AuthorizationProvider; +import org.gcube.common.authorization.library.provider.ClientInfo; +import org.gcube.common.authorization.library.provider.SecurityTokenProvider; +import org.gcube.common.authorization.library.utils.Caller; +import org.gcube.common.scope.api.ScopeProvider; +import org.junit.AfterClass; +import org.junit.BeforeClass; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * @author Luca Frosini (ISTI - CNR) + * + */ +public class ContextTest { + + private static final Logger logger = LoggerFactory.getLogger(ContextTest.class); + + protected static Properties properties; + protected static final String PROPERTIES_FILENAME = "token.properties"; + + public static final String DEFAULT_TEST_SCOPE_NAME; + + static { + properties = new Properties(); + InputStream input = ContextTest.class.getClassLoader().getResourceAsStream(PROPERTIES_FILENAME); + + try { + // load the properties file + properties.load(input); + } catch(IOException e) { + throw new RuntimeException(e); + } + + //DEFAULT_TEST_SCOPE_NAME = "/gcube"; + DEFAULT_TEST_SCOPE_NAME = "/pred4s"; + //DEFAULT_TEST_SCOPE_NAME = "/d4science.research-infrastructures.eu"; + } + + public static String getCurrentScope(String token) throws ObjectNotFound, Exception { + AuthorizationEntry authorizationEntry = Constants.authorizationService().get(token); + String context = authorizationEntry.getContext(); + logger.info("Context of token {} is {}", token, context); + return context; + } + + public static void setContextByName(String fullContextName) throws ObjectNotFound, Exception { + String token = ContextTest.properties.getProperty(fullContextName); + setContext(token); + } + + public static void setContext(String token) throws ObjectNotFound, Exception { + SecurityTokenProvider.instance.set(token); + AuthorizationEntry authorizationEntry = Constants.authorizationService().get(token); + ClientInfo clientInfo = authorizationEntry.getClientInfo(); + logger.debug("User : {} - Type : {}", clientInfo.getId(), clientInfo.getType().name()); + String qualifier = authorizationEntry.getQualifier(); + Caller caller = new Caller(clientInfo, qualifier); + AuthorizationProvider.instance.set(caller); + ScopeProvider.instance.set(getCurrentScope(token)); + } + + @BeforeClass + public static void beforeClass() throws Exception { + setContextByName(DEFAULT_TEST_SCOPE_NAME); + } + + @AfterClass + public static void afterClass() throws Exception { + SecurityTokenProvider.instance.reset(); + ScopeProvider.instance.reset(); + } + +} diff --git a/src/test/java/org/gcube/context/names/TestContextList.java b/src/test/java/org/gcube/context/names/TestContextList.java index 55a6759..862b83a 100644 --- a/src/test/java/org/gcube/context/names/TestContextList.java +++ b/src/test/java/org/gcube/context/names/TestContextList.java @@ -1,11 +1,17 @@ package org.gcube.context.names; import java.io.File; +import java.util.Map; +import org.gcube.context.authorization.TokensUtil; import org.junit.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; -public class TestContextList { - +public class TestContextList extends ContextTest { + + private static final Logger logger = LoggerFactory.getLogger(TokensUtil.class); + @Test public void test() throws Exception { File src = new File("src"); @@ -19,4 +25,11 @@ public class TestContextList { } + + @Test + public void generateTokens() throws Exception { + Map tokens = TokensUtil.getTokenForContexts("luca.frosini", "gCat"); + logger.debug("{}", tokens); + + } } diff --git a/src/test/resources/.gitignore b/src/test/resources/.gitignore new file mode 100644 index 0000000..a8e4366 --- /dev/null +++ b/src/test/resources/.gitignore @@ -0,0 +1 @@ +/token.properties diff --git a/src/test/resources/scopedata.xml b/src/test/resources/scopedata.xml deleted file mode 100644 index a84d476..0000000 --- a/src/test/resources/scopedata.xml +++ /dev/null @@ -1,53 +0,0 @@ - - - - d4science - - - d4science - ServiceMap_d4science.research-infrastructures.eu.xml - /d4science.research-infrastructures.eu - - - d4science/D4Research - ServiceMap_D4Research.xml - /d4science.research-infrastructures.eu/D4Research - - - d4science/Edison - ServiceMap_Edison.xml - /d4science.research-infrastructures.eu/Edison - - - d4science/FARM - ServiceMap_FARM.xml - /d4science.research-infrastructures.eu/FARM - - - d4science/gCubeApps - ServiceMap_gCubeApps.xml - /d4science.research-infrastructures.eu/gCubeApps - - - d4science/OpenAIRE - ServiceMap_OpenAIRE.xml - /d4science.research-infrastructures.eu/OpenAIRE - - - d4science/ParthenosVO - ServiceMap_ParthenosVO.xml - /d4science.research-infrastructures.eu/ParthenosVO - - - d4science/SmartArea - ServiceMap_SmartArea.xml - /d4science.research-infrastructures.eu/SmartArea - - - d4science/SoBigData - ServiceMap_SoBigData.xml - /d4science.research-infrastructures.eu/SoBigData - - - -