parent
196429c84b
commit
c1abd152e3
|
@ -1,5 +1,5 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?><project-modules id="moduleCoreId" project-version="1.5.0">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -7,8 +7,14 @@
|
|||
|
||||
|
||||
|
||||
<wb-module deploy-name="uri-resolver-2.7.3">
|
||||
|
||||
|
||||
|
||||
|
||||
<wb-module deploy-name="uri-resolver-2.8.1-SNAPSHOT">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -17,7 +23,10 @@
|
|||
|
||||
|
||||
<wb-resource deploy-path="/" source-path="/target/m2e-wtp/web-resources"/>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -26,7 +35,10 @@
|
|||
|
||||
|
||||
<wb-resource deploy-path="/" source-path="/src/main/webapp" tag="defaultRootSource"/>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -35,7 +47,10 @@
|
|||
|
||||
|
||||
<wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/java"/>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -44,10 +59,10 @@
|
|||
|
||||
|
||||
<wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/resources"/>
|
||||
<dependent-module archiveName="uri-resolver-manager-1.5.0.jar" deploy-path="/WEB-INF/lib" handle="module:/resource/uri-resolver-manager/uri-resolver-manager">
|
||||
<dependency-type>uses</dependency-type>
|
||||
</dependent-module>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -56,7 +71,10 @@
|
|||
|
||||
|
||||
<property name="context-root" value="uri-resolver"/>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -65,7 +83,10 @@
|
|||
|
||||
|
||||
<property name="java-output-path" value="/uri-resolver/target/classes"/>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -74,7 +95,10 @@
|
|||
|
||||
|
||||
</wb-module>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
15
CHANGELOG.md
15
CHANGELOG.md
|
@ -4,11 +4,22 @@
|
|||
All notable changes to this project will be documented in this file.
|
||||
This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||
|
||||
## [v2.7.3] - 2022-04-27
|
||||
## [v2.8.1-SNAPSHOT] - 2022-06-13
|
||||
|
||||
**New**
|
||||
|
||||
- [#23156] CatalogueResolver enhanced to manage (create/resolve) an input query string
|
||||
|
||||
**Bug Fixing**
|
||||
|
||||
- [#23213] Fixing NoClassDefFoundError: org/geotoolkit/xml/XML
|
||||
- [#23495] Removed the check on the gcube token stored in thread local. The working context of VRE will be checked from ScopeProvider
|
||||
|
||||
|
||||
## [v2.7.3-SNAPSHOT] - 2022-04-27
|
||||
|
||||
**Bug Fixing**
|
||||
|
||||
- [#23213] Fixed NoClassDefFoundError: org/geotoolkit/xml/XML
|
||||
|
||||
## [v2.7.2] - 2022-04-06
|
||||
|
||||
|
|
4
pom.xml
4
pom.xml
|
@ -9,7 +9,7 @@
|
|||
</parent>
|
||||
<groupId>org.gcube.data.transfer</groupId>
|
||||
<artifactId>uri-resolver</artifactId>
|
||||
<version>2.7.3</version>
|
||||
<version>2.8.1-SNAPSHOT</version>
|
||||
<packaging>war</packaging>
|
||||
<description>The URI Resolver is an HTTP URI resolver implemented as a REST service which gives access trough HTTP to different gcube Resolvers and gCube Applications.</description>
|
||||
|
||||
|
@ -249,7 +249,7 @@
|
|||
<version>4.8.2</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
|
||||
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
|
|
|
@ -5,15 +5,14 @@ package org.gcube.datatransfer.resolver.catalogue;
|
|||
*
|
||||
* @author Francesco Mangiacrapa at ISTI-CNR francesco.mangiacrapa@isti.cnr.it
|
||||
*
|
||||
* Mar 24, 2022
|
||||
*
|
||||
* Binding Catalogue Request as a JSON
|
||||
* Apr 20, 2022
|
||||
*/
|
||||
public class CatalogueRequest {
|
||||
|
||||
private String gcube_scope;
|
||||
private String entity_context;
|
||||
private String entity_name;
|
||||
private String query_string;
|
||||
|
||||
/**
|
||||
* Gets the gcube_scope.
|
||||
|
@ -42,19 +41,22 @@ public class CatalogueRequest {
|
|||
return entity_name;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the query string.
|
||||
*
|
||||
* @return the query string
|
||||
*/
|
||||
public String getQuery_string() {
|
||||
return query_string;
|
||||
}
|
||||
|
||||
/**
|
||||
* To string.
|
||||
*
|
||||
* @return the string
|
||||
*/
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
* @see java.lang.Object#toString()
|
||||
*/
|
||||
@Override
|
||||
public String toString() {
|
||||
|
||||
StringBuilder builder = new StringBuilder();
|
||||
builder.append("CatalogueRequest [gcube_scope=");
|
||||
builder.append(gcube_scope);
|
||||
|
@ -62,6 +64,8 @@ public class CatalogueRequest {
|
|||
builder.append(entity_context);
|
||||
builder.append(", entity_name=");
|
||||
builder.append(entity_name);
|
||||
builder.append(", query_string=");
|
||||
builder.append(query_string);
|
||||
builder.append("]");
|
||||
return builder.toString();
|
||||
}
|
||||
|
|
|
@ -94,12 +94,12 @@ public class CatalogueStaticConfigurations{
|
|||
if(toPrivateCKANCatalogueURL.startsWith(prefix)) {
|
||||
toPrivateCKANCatalogueURL = toPrivateCKANCatalogueURL.replaceFirst(prefix, ""); //removing prefix
|
||||
String catalogueName = toPrivateCKANCatalogueURL.substring(0,toPrivateCKANCatalogueURL.indexOf(".d4science"));
|
||||
LOG.info("Catalogue Name extration returning value: "+catalogueName);
|
||||
LOG.info("Catalogue Name extraction returning value: "+catalogueName);
|
||||
return catalogueName;
|
||||
}
|
||||
}
|
||||
|
||||
LOG.info("Catalogue Name extration returning null");
|
||||
LOG.info("Catalogue Name extraction returning null");
|
||||
return null;
|
||||
}
|
||||
|
||||
|
|
|
@ -43,7 +43,6 @@ 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.RequestHandler;
|
||||
import org.gcube.datatransfer.resolver.services.error.ExceptionManager;
|
||||
import org.gcube.datatransfer.resolver.services.exceptions.InternalServerException;
|
||||
import org.gcube.datatransfer.resolver.util.ScopeUtil;
|
||||
|
@ -119,20 +118,11 @@ public class AnalyticsCreateResolver {
|
|||
|
||||
logger.debug("The body contains the request: " + jsonRequest.toString());
|
||||
|
||||
String contextToken = SecurityTokenProvider.instance.get();
|
||||
|
||||
String scope = ScopeProvider.instance.get();
|
||||
// logger.info("SecurityTokenProvider contextToken: "+contextToken);
|
||||
logger.info("ScopeProvider has scope: " + scope);
|
||||
|
||||
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) + "...");
|
||||
throw ExceptionManager.unauthorizedException(req,
|
||||
"You are not authorized. You must pass a token of VRE", this.getClass(), helpURI);
|
||||
}
|
||||
|
||||
String operatorID = jsonRequest.getOperatorId();
|
||||
|
||||
if (scope == null || scope.isEmpty()) {
|
||||
|
@ -148,8 +138,15 @@ public class AnalyticsCreateResolver {
|
|||
"Mandatory body parameter 'operatorId' not found or empty in the JSON object", this.getClass(),
|
||||
helpURI);
|
||||
}
|
||||
|
||||
|
||||
ScopeBean scopeBean = new ScopeBean(scope);
|
||||
if (scopeBean.is(Type.INFRASTRUCTURE) || scopeBean.is(Type.VO)) {
|
||||
logger.error(Type.INFRASTRUCTURE + "or " + Type.VO + " scope detected, you must set a scope of VRE");
|
||||
throw ExceptionManager.unauthorizedException(req,
|
||||
"You are not authorized. You must pass a token of VRE", this.getClass(), helpURI);
|
||||
}
|
||||
|
||||
|
||||
String publicLinkToDMInvFile = "";
|
||||
|
||||
if (scopeBean.is(Type.VRE)) {
|
||||
|
@ -162,7 +159,8 @@ public class AnalyticsCreateResolver {
|
|||
|
||||
File tempInvocationFile = null;
|
||||
try {
|
||||
|
||||
|
||||
String contextToken = SecurityTokenProvider.instance.get();
|
||||
String xmlRequest = DataMinerInvocationManager.getInstance().marshalingXML(jsonRequest, true, true);
|
||||
String uniqueName = createDMInvocationFileName(jsonRequest.getOperatorId());
|
||||
tempInvocationFile = createTempFile(uniqueName, ".xml", xmlRequest.getBytes());
|
||||
|
@ -186,8 +184,9 @@ public class AnalyticsCreateResolver {
|
|||
|
||||
StorageHubManagement storageHubManagement = new StorageHubManagement();
|
||||
Metadata metadata = new Metadata();
|
||||
Map<String, String> theMap = new HashMap<String, String>();
|
||||
Map<String, Object> theMap = new HashMap<String, Object>();
|
||||
theMap.put("owner", owner);
|
||||
metadata.setMap(theMap);
|
||||
URL thePublicLink = null;
|
||||
try {
|
||||
|
||||
|
|
|
@ -18,6 +18,7 @@ import javax.ws.rs.core.Context;
|
|||
import javax.ws.rs.core.MediaType;
|
||||
import javax.ws.rs.core.Response;
|
||||
|
||||
import org.apache.commons.codec.binary.Base64;
|
||||
import org.gcube.common.scope.api.ScopeProvider;
|
||||
import org.gcube.common.scope.impl.ScopeBean;
|
||||
import org.gcube.common.scope.impl.ScopeBean.Type;
|
||||
|
@ -111,8 +112,19 @@ public class CatalogueResolver {
|
|||
}
|
||||
} else {
|
||||
itemCatalogueURL = itemCatalogueURLs.getPrivateVRECataloguePortletURL();
|
||||
logger.info("The dataset " + itemCatalogueURLs.getItemName()
|
||||
+ " is a private item (to VRE) so using protected access to CKAN portlet: " + itemCatalogueURL);
|
||||
logger.info("Either the " + itemCatalogueURLs.getItemName()
|
||||
+ " is not an item (alias dataset) or it is a private item (to VRE) so using protected access to CKAN portlet: "
|
||||
+ itemCatalogueURL);
|
||||
}
|
||||
|
||||
String queryString = req.getQueryString();
|
||||
if (queryString != null) {
|
||||
logger.info("Query string found: " + queryString);
|
||||
byte[] stringEncBytes = Base64.encodeBase64(queryString.getBytes());
|
||||
String queryStringEnc = "query_string=" + new String(stringEncBytes);
|
||||
logger.info("Adding Base64 encoded: " + queryString);
|
||||
itemCatalogueURL += itemCatalogueURL.contains("?") ? "&" : "?";
|
||||
itemCatalogueURL += queryStringEnc;
|
||||
}
|
||||
|
||||
return Response.seeOther(new URL(itemCatalogueURL).toURI()).build();
|
||||
|
@ -190,6 +202,11 @@ public class CatalogueResolver {
|
|||
}
|
||||
|
||||
String linkURL = String.format("%s/%s/%s/%s", serverUrl, rc.getId(), vreName, jsonRequest.getEntity_name());
|
||||
|
||||
if (jsonRequest.getQuery_string() != null) {
|
||||
linkURL += "?" + jsonRequest.getQuery_string();
|
||||
}
|
||||
|
||||
logger.info("Returining Catalogue URL: " + linkURL);
|
||||
return Response.ok(linkURL).header("Location", linkURL).build();
|
||||
|
||||
|
|
|
@ -13,11 +13,9 @@ import javax.ws.rs.core.Context;
|
|||
import javax.ws.rs.core.MediaType;
|
||||
import javax.ws.rs.core.Response;
|
||||
|
||||
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.RequestHandler;
|
||||
import org.gcube.datatransfer.resolver.services.error.ExceptionManager;
|
||||
import org.gcube.datatransfer.resolver.util.Util;
|
||||
import org.slf4j.Logger;
|
||||
|
@ -60,22 +58,18 @@ public class KnimeCreateResolver {
|
|||
logger.info(this.getClass().getSimpleName() + " POST starts...");
|
||||
|
||||
try {
|
||||
String contextToken = SecurityTokenProvider.instance.get();
|
||||
|
||||
String scope = ScopeProvider.instance.get();
|
||||
// logger.info("SecurityTokenProvider contextToken: "+contextToken);
|
||||
logger.info("ScopeProvider has scope: " + scope);
|
||||
|
||||
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) + "...");
|
||||
ScopeBean scopeBean = new ScopeBean(scope);
|
||||
if (scopeBean.is(Type.INFRASTRUCTURE) || scopeBean.is(Type.VO)) {
|
||||
logger.error(Type.INFRASTRUCTURE + "or " + Type.VO + " scope detected, you must set a scope of VRE");
|
||||
throw ExceptionManager.unauthorizedException(req,
|
||||
"You are not authorized. You must pass a token of VRE", this.getClass(), helpURI);
|
||||
}
|
||||
|
||||
ScopeBean scopeBean = new ScopeBean(scope);
|
||||
|
||||
if (scopeBean.is(Type.VRE)) {
|
||||
|
||||
String vreName = scopeBean.name();
|
||||
|
|
|
@ -22,12 +22,12 @@ import javax.ws.rs.core.MediaType;
|
|||
import javax.ws.rs.core.Response;
|
||||
|
||||
import org.apache.commons.codec.binary.Base64;
|
||||
import org.gcube.common.authorization.library.provider.SecurityTokenProvider;
|
||||
import org.gcube.common.encryption.StringEncrypter;
|
||||
import org.gcube.common.resources.gcore.ServiceEndpoint;
|
||||
import org.gcube.common.resources.gcore.ServiceEndpoint.AccessPoint;
|
||||
import org.gcube.common.scope.api.ScopeProvider;
|
||||
import org.gcube.datatransfer.resolver.requesthandler.RequestHandler;
|
||||
import org.gcube.common.scope.impl.ScopeBean;
|
||||
import org.gcube.common.scope.impl.ScopeBean.Type;
|
||||
import org.gcube.datatransfer.resolver.services.error.ExceptionManager;
|
||||
import org.gcube.datatransfer.resolver.services.exceptions.NotFoundException;
|
||||
import org.gcube.resources.discovery.client.api.DiscoveryClient;
|
||||
|
@ -72,15 +72,12 @@ public class WekeoResolver {
|
|||
|
||||
try {
|
||||
|
||||
String contextToken = SecurityTokenProvider.instance.get();
|
||||
String scope = ScopeProvider.instance.get();
|
||||
logger.info("ScopeProvider has scope: " + scope);
|
||||
|
||||
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) + "...");
|
||||
|
||||
ScopeBean scopeBean = new ScopeBean(scope);
|
||||
if (scopeBean.is(Type.INFRASTRUCTURE) || scopeBean.is(Type.VO)) {
|
||||
logger.error(Type.INFRASTRUCTURE + "or " + Type.VO + " scope detected, you must set a scope of VRE");
|
||||
throw ExceptionManager.unauthorizedException(req,
|
||||
"You are not authorized. You must pass a token of VRE", this.getClass(), helpURI);
|
||||
}
|
||||
|
|
|
@ -15,19 +15,10 @@ import java.nio.file.StandardCopyOption;
|
|||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import javax.ws.rs.core.Response;
|
||||
import javax.ws.rs.core.Response.ResponseBuilder;
|
||||
|
||||
import org.apache.commons.io.FilenameUtils;
|
||||
import org.apache.commons.io.IOUtils;
|
||||
import org.apache.http.HttpStatus;
|
||||
import org.gcube.common.storagehub.client.StreamDescriptor;
|
||||
import org.gcube.common.storagehub.client.plugins.AbstractPlugin;
|
||||
import org.gcube.common.storagehub.client.proxies.ItemManagerClient;
|
||||
import org.gcube.datatransfer.resolver.applicationprofile.ApplicationProfileReader;
|
||||
import org.gcube.datatransfer.resolver.services.StorageHubResolver;
|
||||
import org.gcube.datatransfer.resolver.services.error.ExceptionManager;
|
||||
import org.gcube.datatransfer.resolver.shub.StorageHubMetadataResponseBuilder;
|
||||
import org.gcube.datatransfer.resolver.util.HTTPCallsUtils;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
@ -42,7 +33,7 @@ import org.slf4j.LoggerFactory;
|
|||
public class TestResolvers {
|
||||
|
||||
|
||||
public static final String URI_RESOLVER_SERVICE_ENDPOINT = "https://data1-d.d4science.net";
|
||||
public static final String URI_RESOLVER_SERVICE_ENDPOINT = "https://data.dev.d4science.org";
|
||||
|
||||
public static final Logger logger = LoggerFactory.getLogger(TestResolvers.class);
|
||||
|
||||
|
|
Loading…
Reference in New Issue