Removed unused import
Performed a Refactor from TokenSetter to RequestHandler git-svn-id: http://svn.research-infrastructures.eu/public/d4science/gcube/trunk/data-transfer/uri-resolver@178597 82a268e6-3cf1-43bd-a215-b396298e98cf
This commit is contained in:
parent
c66d6fbb69
commit
d375c91890
|
@ -3,8 +3,6 @@
|
|||
*/
|
||||
package org.gcube.datatransfer.resolver;
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* The Class ConstantsResolver.
|
||||
*
|
||||
|
@ -25,20 +23,9 @@ public class ConstantsResolver {
|
|||
public static final String QUERY_PARAM_CONTENT_TYPE = "contentType";
|
||||
public static final String QUERY_PARAM_FILE_NAME = "fileName";
|
||||
|
||||
public static final String[] resourcesHardCoded = {"ctlg"};
|
||||
|
||||
/*static {
|
||||
Map<String, String> aMap = new HashMap<String, String>();
|
||||
aMap.put("smp", "smp");
|
||||
aMap.put("id", "id");
|
||||
aMap.put("gis", "gis");
|
||||
aMap.put("storage", "storage");
|
||||
aMap.put("ctlg", "ctlg");
|
||||
aMap.put("catalogue", "catalogue");
|
||||
aMap.put("geonetwork", "geonetwork");
|
||||
aMap.put("shub", "shub");
|
||||
aMap.put("parthenos_registry", "parthenos_registry");
|
||||
aMap.put("knime", "knime");
|
||||
aMap = Collections.unmodifiableMap(aMap);
|
||||
}*/
|
||||
//The default resource candidate to manage the input requests not matching any resolver services
|
||||
public static final String defaultServiceToRedirect= "storage";
|
||||
|
||||
}
|
||||
|
|
|
@ -1,12 +1,10 @@
|
|||
package org.gcube.datatransfer.resolver;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import javax.ws.rs.Path;
|
||||
|
||||
import org.gcube.data.analysis.dminvocation.model.DataMinerInvocation;
|
||||
import org.gcube.datatransfer.resolver.init.UriResolverSmartGearManagerInit;
|
||||
import org.gcube.datatransfer.resolver.requesthandler.TokenSetter;
|
||||
import org.gcube.datatransfer.resolver.requesthandler.RequestHandler;
|
||||
import org.gcube.datatransfer.resolver.services.CatalogueResolver;
|
||||
import org.gcube.smartgears.annotations.ManagedBy;
|
||||
import org.glassfish.jersey.server.ResourceConfig;
|
||||
|
@ -15,11 +13,9 @@ import org.glassfish.jersey.server.ResourceConfig;
|
|||
@ManagedBy(UriResolverSmartGearManagerInit.class)
|
||||
public class UriResolver extends ResourceConfig {
|
||||
|
||||
private static List<String> listOfResources;
|
||||
|
||||
public UriResolver() {
|
||||
// Register all resources present under the package.
|
||||
packages(CatalogueResolver.class.getPackage().getName(), TokenSetter.class.getPackage().getName());
|
||||
packages(CatalogueResolver.class.getPackage().getName(), RequestHandler.class.getPackage().getName());
|
||||
packages(DataMinerInvocation.class.getPackage().getName());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
package org.gcube.datatransfer.resolver;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
|
@ -189,7 +190,10 @@ public class UriResolverServices {
|
|||
log.trace("The Application Classes are {}", applicationClasses);
|
||||
|
||||
if(listResourcePath.isEmpty()){
|
||||
log.info("Reference to the List of Resources/Services is empty, creating it...");
|
||||
readResources(applicationClasses);
|
||||
log.info("Hard-Coding the resource/s: ");
|
||||
listResourcePath.addAll(Arrays.asList(ConstantsResolver.resourcesHardCoded));
|
||||
}
|
||||
|
||||
return listResourcePath;
|
||||
|
|
|
@ -3,10 +3,6 @@
|
|||
*/
|
||||
package org.gcube.datatransfer.resolver.gis.geonetwork;
|
||||
|
||||
import it.geosolutions.geonetwork.util.GNSearchRequest;
|
||||
import it.geosolutions.geonetwork.util.GNSearchResponse;
|
||||
import it.geosolutions.geonetwork.util.GNSearchResponse.GNMetadata;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
|
@ -16,6 +12,10 @@ import org.gcube.spatial.data.geonetwork.GeoNetworkReader;
|
|||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import it.geosolutions.geonetwork.util.GNSearchRequest;
|
||||
import it.geosolutions.geonetwork.util.GNSearchResponse;
|
||||
import it.geosolutions.geonetwork.util.GNSearchResponse.GNMetadata;
|
||||
|
||||
|
||||
/**
|
||||
* The Class FilterGetRecords.
|
||||
|
|
|
@ -3,14 +3,14 @@
|
|||
*/
|
||||
package org.gcube.datatransfer.resolver.parthenos;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
import lombok.ToString;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
|
|
|
@ -0,0 +1,131 @@
|
|||
package org.gcube.datatransfer.resolver.requesthandler;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.net.URI;
|
||||
import java.util.List;
|
||||
|
||||
import javax.servlet.ServletContext;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.ws.rs.container.ContainerRequestContext;
|
||||
import javax.ws.rs.container.ContainerRequestFilter;
|
||||
import javax.ws.rs.container.ContainerResponseContext;
|
||||
import javax.ws.rs.container.ContainerResponseFilter;
|
||||
import javax.ws.rs.container.PreMatching;
|
||||
import javax.ws.rs.container.ResourceContext;
|
||||
import javax.ws.rs.core.Application;
|
||||
import javax.ws.rs.core.Context;
|
||||
import javax.ws.rs.ext.Provider;
|
||||
|
||||
import org.gcube.common.authorization.library.provider.SecurityTokenProvider;
|
||||
import org.gcube.common.scope.api.ScopeProvider;
|
||||
import org.gcube.datatransfer.resolver.ConstantsResolver;
|
||||
import org.gcube.datatransfer.resolver.UriResolverServices;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
|
||||
/**
|
||||
* The Class RequestHandler.
|
||||
*
|
||||
* @author Francesco Mangiacrapa at ISTI-CNR (francesco.mangiacrapa@isti.cnr.it)
|
||||
*
|
||||
* Mar 15, 2019
|
||||
*/
|
||||
@Provider
|
||||
@PreMatching
|
||||
public class RequestHandler implements ContainerRequestFilter, ContainerResponseFilter {
|
||||
|
||||
public static final String ROOT_SCOPE = "root-scope";
|
||||
|
||||
public static final String ROOT_APP_TOKEN = "root-app-token";
|
||||
|
||||
private static final Logger log = LoggerFactory.getLogger(RequestHandler.class);
|
||||
|
||||
@Context ServletContext context;
|
||||
|
||||
@Context
|
||||
HttpServletRequest webRequest;
|
||||
|
||||
@Context
|
||||
Application application;
|
||||
|
||||
@Context
|
||||
ResourceContext resourceContext;
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see javax.ws.rs.container.ContainerRequestFilter#filter(javax.ws.rs.container.ContainerRequestContext)
|
||||
*/
|
||||
@Override
|
||||
public void filter(ContainerRequestContext reqContext) throws IOException {
|
||||
log.info(RequestHandler.class.getSimpleName() +" Request called");
|
||||
|
||||
if(SecurityTokenProvider.instance.get()==null)
|
||||
SecurityTokenProvider.instance.set(context.getInitParameter(ROOT_APP_TOKEN));
|
||||
|
||||
if(ScopeProvider.instance.get()==null)
|
||||
ScopeProvider.instance.set(context.getInitParameter(ROOT_SCOPE));
|
||||
|
||||
log.info("Token and Scope Provider set called");
|
||||
|
||||
List<String> listOfPath = UriResolverServices.getInstance().getListOfResourcePath(application.getClasses());
|
||||
log.debug("The resources are: {}", listOfPath);
|
||||
|
||||
String path = reqContext.getUriInfo().getPath();
|
||||
log.debug("The path is: {}", path);
|
||||
|
||||
if(path==null || path.isEmpty()) {
|
||||
log.debug("The path is null or empty, redirecting to /index");
|
||||
URI newRequestURI = reqContext.getUriInfo().getBaseUriBuilder().path("/index").build();
|
||||
reqContext.setRequestUri(newRequestURI);
|
||||
return;
|
||||
}
|
||||
|
||||
String[] splittePath = null;
|
||||
boolean resourceToRedirectFound = false;
|
||||
String candidateResource = "";
|
||||
try {
|
||||
splittePath = path.split("/");
|
||||
if(splittePath!=null && splittePath.length>0) {
|
||||
String resourceName = splittePath[0];
|
||||
if(resourceName!=null && !resourceName.isEmpty()) {
|
||||
for (String resource : listOfPath) {
|
||||
if(resource.startsWith(resourceName)) {
|
||||
candidateResource = resourceName;
|
||||
resourceToRedirectFound = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}else
|
||||
log.warn("It was not possible to get the resource name from the splitted path {}. No action performed", path);
|
||||
}else {
|
||||
log.warn("It was not possible to split the path {}. No action performed", path);
|
||||
}
|
||||
}catch (Exception e) {
|
||||
log.error("Error trying to retrieve the service able to manage the request. No action performed", e);
|
||||
}
|
||||
|
||||
if(resourceToRedirectFound) {
|
||||
log.debug("The input request '{}' can be managed by the service '{}'. No redirect performed", path, candidateResource);
|
||||
}else {
|
||||
log.info("No resource/service found to manage the input request '{}'", path);
|
||||
String newPath = String.format("/%s/%s", ConstantsResolver.defaultServiceToRedirect,path);
|
||||
//log.debug("The path to redirect is '{}'", newPath);
|
||||
URI newRequestURI = reqContext.getUriInfo().getBaseUriBuilder().path(newPath).build();
|
||||
log.info("Redirect to URI path '{}'", newRequestURI.toString());
|
||||
reqContext.setRequestUri(newRequestURI);
|
||||
}
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see javax.ws.rs.container.ContainerResponseFilter#filter(javax.ws.rs.container.ContainerRequestContext, javax.ws.rs.container.ContainerResponseContext)
|
||||
*/
|
||||
@Override
|
||||
public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext)
|
||||
throws IOException {
|
||||
log.info(RequestHandler.class.getSimpleName() +" Response called");
|
||||
SecurityTokenProvider.instance.reset();
|
||||
ScopeProvider.instance.reset();
|
||||
log.info("Token and Scope Provider reset called");
|
||||
|
||||
}
|
||||
}
|
|
@ -1,95 +0,0 @@
|
|||
package org.gcube.datatransfer.resolver.requesthandler;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.net.URI;
|
||||
import java.util.List;
|
||||
|
||||
import javax.servlet.ServletContext;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.ws.rs.container.ContainerRequestContext;
|
||||
import javax.ws.rs.container.ContainerRequestFilter;
|
||||
import javax.ws.rs.container.ContainerResponseContext;
|
||||
import javax.ws.rs.container.ContainerResponseFilter;
|
||||
import javax.ws.rs.container.ResourceContext;
|
||||
import javax.ws.rs.core.Application;
|
||||
import javax.ws.rs.core.Context;
|
||||
import javax.ws.rs.core.UriInfo;
|
||||
import javax.ws.rs.ext.Provider;
|
||||
|
||||
import org.gcube.common.authorization.library.provider.SecurityTokenProvider;
|
||||
import org.gcube.common.scope.api.ScopeProvider;
|
||||
import org.gcube.datatransfer.resolver.MultiReadHttpServletRequest;
|
||||
import org.gcube.datatransfer.resolver.UriResolverServices;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
|
||||
/**
|
||||
* The Class TokenSetter.
|
||||
*
|
||||
* @author Francesco Mangiacrapa at ISTI-CNR (francesco.mangiacrapa@isti.cnr.it)
|
||||
* Feb 19, 2019
|
||||
*/
|
||||
@Provider
|
||||
public class TokenSetter implements ContainerRequestFilter, ContainerResponseFilter {
|
||||
|
||||
public static final String ROOT_SCOPE = "root-scope";
|
||||
|
||||
public static final String ROOT_APP_TOKEN = "root-app-token";
|
||||
|
||||
private static final Logger log = LoggerFactory.getLogger(TokenSetter.class);
|
||||
|
||||
@Context ServletContext context;
|
||||
|
||||
@Context
|
||||
HttpServletRequest webRequest;
|
||||
|
||||
@Context
|
||||
Application application;
|
||||
|
||||
@Context
|
||||
ResourceContext resourceContext;
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see javax.ws.rs.container.ContainerRequestFilter#filter(javax.ws.rs.container.ContainerRequestContext)
|
||||
*/
|
||||
@Override
|
||||
public void filter(ContainerRequestContext reqContext) throws IOException {
|
||||
log.info("TokenSetter Request called");
|
||||
|
||||
if(SecurityTokenProvider.instance.get()==null)
|
||||
SecurityTokenProvider.instance.set(context.getInitParameter(ROOT_APP_TOKEN));
|
||||
|
||||
if(ScopeProvider.instance.get()==null)
|
||||
ScopeProvider.instance.set(context.getInitParameter(ROOT_SCOPE));
|
||||
|
||||
|
||||
MultiReadHttpServletRequest multiReadRequest = new MultiReadHttpServletRequest(webRequest);
|
||||
String requestURI = multiReadRequest.getRequestURI();
|
||||
String queryString = multiReadRequest.getQueryString();
|
||||
log.debug("Request URI: " + requestURI + ", QueryString: " +queryString+ ", Path Info: "+multiReadRequest.getPathInfo());
|
||||
List<String> listOfPath = UriResolverServices.getInstance().getListOfResourcePath(application.getClasses());
|
||||
log.info("The resources are: {}", listOfPath);
|
||||
|
||||
UriInfo uriInfo = reqContext.getUriInfo();
|
||||
String prefix = "/redirect";
|
||||
String path = uriInfo.getRequestUri().getPath();
|
||||
log.info("The path is: {}", path);
|
||||
if(requestURI.startsWith("qqqqq")){
|
||||
URI newRequestURI = uriInfo.getBaseUriBuilder().path("new").build();
|
||||
reqContext.setRequestUri(newRequestURI);
|
||||
}
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see javax.ws.rs.container.ContainerResponseFilter#filter(javax.ws.rs.container.ContainerRequestContext, javax.ws.rs.container.ContainerResponseContext)
|
||||
*/
|
||||
@Override
|
||||
public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext)
|
||||
throws IOException {
|
||||
log.info("TokenSetter Response called");
|
||||
SecurityTokenProvider.instance.reset();
|
||||
ScopeProvider.instance.reset();
|
||||
|
||||
}
|
||||
}
|
|
@ -43,7 +43,7 @@ import org.gcube.common.storagehub.model.Metadata;
|
|||
import org.gcube.data.analysis.dminvocation.ActionType;
|
||||
import org.gcube.data.analysis.dminvocation.DataMinerInvocationManager;
|
||||
import org.gcube.data.analysis.dminvocation.model.DataMinerInvocation;
|
||||
import org.gcube.datatransfer.resolver.requesthandler.TokenSetter;
|
||||
import org.gcube.datatransfer.resolver.requesthandler.RequestHandler;
|
||||
import org.gcube.datatransfer.resolver.services.error.ExceptionManager;
|
||||
import org.gcube.datatransfer.resolver.services.exceptions.InternalServerException;
|
||||
import org.gcube.datatransfer.resolver.util.ScopeUtil;
|
||||
|
@ -113,7 +113,7 @@ public class AnalyticsCreateResolver {
|
|||
// logger.info("SecurityTokenProvider contextToken: "+contextToken);
|
||||
logger.info("ScopeProvider has scope: "+scope);
|
||||
|
||||
String appToken = req.getServletContext().getInitParameter(TokenSetter.ROOT_APP_TOKEN);
|
||||
String appToken = req.getServletContext().getInitParameter(RequestHandler.ROOT_APP_TOKEN);
|
||||
|
||||
if(contextToken.compareTo(appToken)==0){
|
||||
logger.error("Token not passed, SecurityTokenProvider contains the root app token: "+appToken.substring(0,10)+"...");
|
||||
|
|
|
@ -0,0 +1,48 @@
|
|||
package org.gcube.datatransfer.resolver.services;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.InputStream;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.ws.rs.GET;
|
||||
import javax.ws.rs.Path;
|
||||
import javax.ws.rs.Produces;
|
||||
import javax.ws.rs.WebApplicationException;
|
||||
import javax.ws.rs.core.Context;
|
||||
import javax.ws.rs.core.MediaType;
|
||||
|
||||
import org.gcube.datatransfer.resolver.services.error.ExceptionManager;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
@Path("cr7huevos")
|
||||
public class CR7Huevos {
|
||||
|
||||
private static Logger logger = LoggerFactory.getLogger(UriResolverIndex.class);
|
||||
|
||||
@GET
|
||||
@Produces({MediaType.TEXT_HTML})
|
||||
@Path("")
|
||||
public InputStream index(@Context HttpServletRequest req) throws WebApplicationException{
|
||||
|
||||
String indexFile = "/WEB-INF/jsp/cr7huevos.jsp";
|
||||
|
||||
try{
|
||||
logger.info(CR7Huevos.class.getSimpleName() +" called");
|
||||
String realPath = req.getServletContext().getRealPath(indexFile);
|
||||
return new FileInputStream(new File(realPath));
|
||||
}catch (Exception e) {
|
||||
|
||||
if(!(e instanceof WebApplicationException)){
|
||||
//UNEXPECTED EXCEPTION managing it as WebApplicationException
|
||||
String error = "Index.jsp not found. Please, contact the support!";
|
||||
throw ExceptionManager.internalErrorException(req, error, this.getClass(), null);
|
||||
}
|
||||
//ALREADY MANAGED AS WebApplicationException
|
||||
logger.error("Exception:", e);
|
||||
throw (WebApplicationException) e;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -17,7 +17,7 @@ import org.gcube.common.authorization.library.provider.SecurityTokenProvider;
|
|||
import org.gcube.common.scope.api.ScopeProvider;
|
||||
import org.gcube.common.scope.impl.ScopeBean;
|
||||
import org.gcube.common.scope.impl.ScopeBean.Type;
|
||||
import org.gcube.datatransfer.resolver.requesthandler.TokenSetter;
|
||||
import org.gcube.datatransfer.resolver.requesthandler.RequestHandler;
|
||||
import org.gcube.datatransfer.resolver.services.error.ExceptionManager;
|
||||
import org.gcube.datatransfer.resolver.util.Util;
|
||||
import org.slf4j.Logger;
|
||||
|
@ -57,7 +57,7 @@ public class KnimeCreateResolver {
|
|||
// logger.info("SecurityTokenProvider contextToken: "+contextToken);
|
||||
logger.info("ScopeProvider has scope: "+scope);
|
||||
|
||||
String appToken = req.getServletContext().getInitParameter(TokenSetter.ROOT_APP_TOKEN);
|
||||
String appToken = req.getServletContext().getInitParameter(RequestHandler.ROOT_APP_TOKEN);
|
||||
|
||||
if(contextToken.compareTo(appToken)==0){
|
||||
logger.error("Token not passed, SecurityTokenProvider contains the root app token: "+appToken.substring(0,10)+"...");
|
||||
|
|
|
@ -37,7 +37,7 @@ public class UriResolverIndex {
|
|||
String indexFile = "/WEB-INF/jsp/index.jsp";
|
||||
|
||||
try{
|
||||
logger.info("UriResolverIndex called");
|
||||
logger.info(UriResolverIndex.class.getSimpleName() +" called");
|
||||
String realPath = req.getServletContext().getRealPath(indexFile);
|
||||
return new FileInputStream(new File(realPath));
|
||||
}catch (Exception e) {
|
||||
|
|
|
@ -4,12 +4,6 @@
|
|||
|
||||
package org.gcube.datatransfer.resolver.util;
|
||||
|
||||
import it.geosolutions.geonetwork.exception.GNLibException;
|
||||
import it.geosolutions.geonetwork.exception.GNServerException;
|
||||
import it.geosolutions.geonetwork.util.GNSearchRequest;
|
||||
import it.geosolutions.geonetwork.util.GNSearchResponse;
|
||||
import it.geosolutions.geonetwork.util.GNSearchResponse.GNMetadata;
|
||||
|
||||
import java.io.BufferedInputStream;
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
|
@ -45,6 +39,12 @@ import org.w3c.dom.Element;
|
|||
import org.w3c.dom.Node;
|
||||
import org.w3c.dom.NodeList;
|
||||
|
||||
import it.geosolutions.geonetwork.exception.GNLibException;
|
||||
import it.geosolutions.geonetwork.exception.GNServerException;
|
||||
import it.geosolutions.geonetwork.util.GNSearchRequest;
|
||||
import it.geosolutions.geonetwork.util.GNSearchResponse;
|
||||
import it.geosolutions.geonetwork.util.GNSearchResponse.GNMetadata;
|
||||
|
||||
|
||||
/**
|
||||
* The Class GetResponseRecordFilter.
|
||||
|
|
|
@ -0,0 +1,21 @@
|
|||
<!DOCTYPE HTML>
|
||||
<html lang="en-US">
|
||||
<head>
|
||||
<style type="text/css">
|
||||
body {
|
||||
background-color: #f8f6f2;
|
||||
color: #225f97;
|
||||
font-family: 'Droid Sans', arial, sans-serif;
|
||||
font-size: 16px;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div>
|
||||
<img style="-webkit-user-select: none; cursor: zoom-out;"
|
||||
src="https://www.sportmediaset.mediaset.it/binary/26.$plit/C_29_fotogallery_1024745__ImageGallery__imageGalleryItem_4_image.jpg"
|
||||
width="2598" height="2074">
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
Loading…
Reference in New Issue