You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
93 lines
2.9 KiB
Java
93 lines
2.9 KiB
Java
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.");
|
|
}
|
|
}
|
|
|
|
}
|