From 2d295bf216f4dec9e01fda720e10a082a2e2ac67 Mon Sep 17 00:00:00 2001 From: Luca Frosini Date: Thu, 9 Feb 2023 16:41:26 +0100 Subject: [PATCH] Upgraded ContextTest to new auth --- .../resourceregistry/api/ContextTest.java | 102 +++++++++++++----- 1 file changed, 73 insertions(+), 29 deletions(-) diff --git a/src/test/java/org/gcube/informationsystem/resourceregistry/api/ContextTest.java b/src/test/java/org/gcube/informationsystem/resourceregistry/api/ContextTest.java index acc83c3..e10b37c 100644 --- a/src/test/java/org/gcube/informationsystem/resourceregistry/api/ContextTest.java +++ b/src/test/java/org/gcube/informationsystem/resourceregistry/api/ContextTest.java @@ -9,76 +9,120 @@ import java.util.Properties; import org.gcube.common.authorization.utils.manager.SecretManager; import org.gcube.common.authorization.utils.manager.SecretManagerProvider; +import org.gcube.common.authorization.utils.secret.JWTSecret; import org.gcube.common.authorization.utils.secret.Secret; import org.gcube.common.authorization.utils.secret.SecretUtility; +import org.gcube.common.keycloak.KeycloakClientFactory; +import org.gcube.common.keycloak.model.TokenResponse; +import org.gcube.common.scope.api.ScopeProvider; +import org.gcube.informationsystem.model.reference.properties.Header; import org.junit.AfterClass; import org.junit.BeforeClass; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * @author Luca Frosini (ISTI - CNR) */ public class ContextTest { - protected static Properties properties; - protected static final String PROPERTIES_FILENAME = "token.properties"; + private static final Logger logger = LoggerFactory.getLogger(ContextTest.class); - public static final String ROOT; - public static final String VO; - public static final String VRE; + protected static final String CONFIG_INI_FILENAME = "config.ini"; + + public static final String PARENT_DEFAULT_TEST_SCOPE; + public static final String DEFAULT_TEST_SCOPE; + public static final String ALTERNATIVE_TEST_SCOPE; + + public static final String GCUBE; + public static final String DEVNEXT; + public static final String NEXTNEXT; + public static final String DEVSEC; + public static final String DEVVRE; + + protected static final Properties properties; + + protected static final String CLIENT_ID_PROPERTY_KEY = "client_id"; + protected static final String CLIENT_SECRET_PROPERTY_KEY = "client_secret"; + + protected static final String clientID; + protected static final String clientSecret; static { - properties = new Properties(); - InputStream input = ContextTest.class.getClassLoader().getResourceAsStream(PROPERTIES_FILENAME); + GCUBE = "/gcube"; + DEVNEXT = GCUBE + "/devNext"; + NEXTNEXT = DEVNEXT + "/NextNext"; + DEVSEC = GCUBE + "/devsec"; + DEVVRE = DEVSEC + "/devVRE"; + PARENT_DEFAULT_TEST_SCOPE = "/gcube"; + DEFAULT_TEST_SCOPE = DEVNEXT; + ALTERNATIVE_TEST_SCOPE = NEXTNEXT; + + properties = new Properties(); + InputStream input = ContextTest.class.getClassLoader().getResourceAsStream(CONFIG_INI_FILENAME); try { // load the properties file properties.load(input); - } catch(IOException e) { + + clientID = properties.getProperty(CLIENT_ID_PROPERTY_KEY); + clientSecret = properties.getProperty(CLIENT_SECRET_PROPERTY_KEY); + + } catch (IOException e) { throw new RuntimeException(e); } - // DEFAULT_TEST_SCOPE_NAME = "/pred4s/preprod/preVRE"; - // DEFAULT_TEST_SCOPE_NAME = "/gcube/devsec/devVRE"; - - ROOT = "/gcube"; - VO = ROOT + "/devsec"; - VRE = VO + "/devVRE"; - // VO = ROOT + "/devNext"; - // VRE = VO + "/NextNext"; - } public static void set(Secret secret) throws Exception { SecretManagerProvider.instance.reset(); - SecretManager secretManager = new SecretManager(); - SecretManagerProvider.instance.set(secretManager); + SecretManager secretManager = new SecretManager(); secretManager.addSecret(secret); - secretManager.set(); + SecretManagerProvider.instance.set(secretManager); + SecretManagerProvider.instance.get().set(); + } + + public static void setContextByName(String fullContextName) throws Exception { + Secret secret = getSecretByContextName(fullContextName); + set(secret); + } + + + private static TokenResponse getJWTAccessToken(String context) throws Exception { + ScopeProvider.instance.set(context); + TokenResponse tr = KeycloakClientFactory.newInstance().queryUMAToken(clientID, clientSecret, context, null); + return tr; + } + + public static Secret getSecretByContextName(String context) throws Exception { + TokenResponse tr = getJWTAccessToken(context); + Secret secret = new JWTSecret(tr.getAccessToken()); + return secret; } public static void setContext(String token) throws Exception { Secret secret = getSecret(token); set(secret); } - - public static void setContextByName(String fullContextName) throws Exception { - Secret secret = getSecretByContextName(fullContextName); - set(secret); - } private static Secret getSecret(String token) throws Exception { Secret secret = SecretUtility.getSecretByTokenString(token); return secret; } - private static Secret getSecretByContextName(String fullContextName) throws Exception { - String token = ContextTest.properties.getProperty(fullContextName); - return getSecret(token); + public static String getUser() { + String user = Header.UNKNOWN_USER; + try { + user = SecretManagerProvider.instance.get().getUser().getUsername(); + } catch(Exception e) { + logger.error("Unable to retrieve user. {} will be used", user); + } + return user; } @BeforeClass public static void beforeClass() throws Exception { - setContextByName(VRE); + setContextByName(DEFAULT_TEST_SCOPE); } @AfterClass