package org.gcube.gcat.utils; import java.io.InputStream; import java.util.Properties; import javax.ws.rs.WebApplicationException; import org.gcube.common.authorization.client.Constants; 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.slf4j.Logger; import org.slf4j.LoggerFactory; /** * @author Luca Frosini (ISTI - CNR) */ public class ApplicationMode { private static final Logger logger = LoggerFactory.getLogger(ApplicationMode.class); private static final String PROPERTY_FILENAME = "config.properties"; private static final String TOKEN_VARNAME = "TOKEN"; private static final String CATALOGUE_APPLICATION_TOKEN; public static String getCatalogueApplicationToken() { return CATALOGUE_APPLICATION_TOKEN; } static { try { Properties properties = new Properties(); InputStream input = Constants.class.getClassLoader().getResourceAsStream(PROPERTY_FILENAME); // load a properties file properties.load(input); CATALOGUE_APPLICATION_TOKEN = properties.getProperty(TOKEN_VARNAME); }catch (Exception e) { throw new WebApplicationException(e); } } private final String originalToken; public ApplicationMode() { String applicationtoken = SecurityTokenProvider.instance.get(); if(applicationtoken.compareTo(CATALOGUE_APPLICATION_TOKEN)!=0) { this.originalToken = applicationtoken; }else { logger.warn("You are already in application Mode. Operation on this instance will not have any effect."); this.originalToken = null; } } public static void setToken(String token) { SecurityTokenProvider.instance.set(token); ScopeProvider.instance.set(ContextUtility.getCurrentContext()); try { 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); }catch (Exception e) { logger.error("Unable to set Caller"); } } public synchronized void start() { if(originalToken!=null) { setToken(CATALOGUE_APPLICATION_TOKEN); }else { logger.warn("You are already in application Mode. start() does not provide any effect."); } } public synchronized void end() { if(originalToken!=null) { setToken(originalToken); }else { logger.warn("You are already in application Mode. end() does not provide any effect."); } } }