/** * */ package org.gcube.dataharvest.utils; import java.io.IOException; import java.io.InputStream; 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.keycloak.KeycloakClientFactory; import org.gcube.common.keycloak.model.TokenResponse; import org.gcube.common.scope.api.ScopeProvider; import org.junit.AfterClass; import org.junit.BeforeClass; /** * @author Luca Frosini (ISTI - CNR) */ public class ContextTest { public static final String ROOT = "/d4science.research-infrastructures.eu"; protected static final String CONFIG_PROPERTIES_FILENAME = "config.properties"; protected static ContextAuthorization contextAuthorization; private static Properties getProperties(){ try { Properties properties = new Properties(); InputStream input = ContextTest.class.getClassLoader().getResourceAsStream(CONFIG_PROPERTIES_FILENAME); // load the properties file properties.load(input); return properties; } catch (IOException e) { throw new RuntimeException(e); } } private static void set(Secret secret) throws Exception { SecretManagerProvider.instance.reset(); SecretManager secretManager = new SecretManager(); SecretManagerProvider.instance.set(secretManager); secretManager.addSecret(secret); secretManager.set(); } public static void set(String fullContextName) throws Exception { Secret secret = getSecret(fullContextName); set(secret); } private static Secret getSecret(String fullContextName) throws Exception { return contextAuthorization.getSecretForContext(fullContextName); } private static TokenResponse getJWTAccessToken(String context) throws Exception { ScopeProvider.instance.set(context); int index = context.indexOf('/', 1); String root = context.substring(0, index == -1 ? context.length() : index); String clientSecret = getProperties().getProperty(root); TokenResponse tr = KeycloakClientFactory.newInstance().queryUMAToken(ContextAuthorization.CLIENT_ID, clientSecret, context, null); return tr; } private static Secret generateSecretByContextName(String context) throws Exception { TokenResponse tr = getJWTAccessToken(context); Secret secret = new JWTSecret(tr.getAccessToken()); return secret; } @BeforeClass public static void beforeClass() throws Exception { Secret secret = generateSecretByContextName(ROOT); set(secret); contextAuthorization = new ContextAuthorization(); SecretManagerProvider.instance.reset(); } @AfterClass public static void afterClass() throws Exception { SecretManagerProvider.instance.reset(); } }