diff --git a/src/main/java/org/gcube/datatransfer/resolver/GeonetworkRequestCriteria.java b/src/main/java/org/gcube/datatransfer/resolver/GeonetworkRequestCriteria.java index 52e3acc..ef685ea 100644 --- a/src/main/java/org/gcube/datatransfer/resolver/GeonetworkRequestCriteria.java +++ b/src/main/java/org/gcube/datatransfer/resolver/GeonetworkRequestCriteria.java @@ -14,10 +14,30 @@ public class GeonetworkRequestCriteria { private String scope; private final String FILTER_PUBLIC_IDS = "FILTER_PUBLIC_IDS"; private boolean valueOfFilterPublicIds; + private boolean authOnGeonetwork; + private boolean noAuthOnGeonetwork; - GeonetworkRequestCriteria(String scope, boolean valueOfFilterPublicIds){ + /** + * Instantiates a new geonetwork request criteria. + * + * @param scope the scope + * @param valueOfFilterPublicIds the value of filter public ids + * @param noAuthOnGeonetowrk the no auth on geonetowrk + */ + GeonetworkRequestCriteria(String scope, boolean valueOfFilterPublicIds, boolean noAuthOnGeonetowrk){ this.scope = scope; this.valueOfFilterPublicIds = valueOfFilterPublicIds; + this.noAuthOnGeonetwork = noAuthOnGeonetowrk; + } + + + + /** + * @return the noAuthOnGeonetwork + */ + public boolean isNoAuthOnGeonetwork() { + + return noAuthOnGeonetwork; } @@ -57,6 +77,7 @@ public class GeonetworkRequestCriteria { } + /* (non-Javadoc) * @see java.lang.Object#toString() */ @@ -64,15 +85,16 @@ public class GeonetworkRequestCriteria { public String toString() { StringBuilder builder = new StringBuilder(); - builder.append("GeonetworkQueryCriteria [scope="); + builder.append("GeonetworkRequestCriteria [scope="); builder.append(scope); builder.append(", FILTER_PUBLIC_IDS="); builder.append(FILTER_PUBLIC_IDS); builder.append(", valueOfFilterPublicIds="); builder.append(valueOfFilterPublicIds); + builder.append(", authOnGeonetwork="); + builder.append(authOnGeonetwork); builder.append("]"); return builder.toString(); } - } diff --git a/src/main/java/org/gcube/datatransfer/resolver/GeonetworkRequestDecoder.java b/src/main/java/org/gcube/datatransfer/resolver/GeonetworkRequestDecoder.java index d4cf114..e0bb205 100644 --- a/src/main/java/org/gcube/datatransfer/resolver/GeonetworkRequestDecoder.java +++ b/src/main/java/org/gcube/datatransfer/resolver/GeonetworkRequestDecoder.java @@ -43,8 +43,9 @@ public class GeonetworkRequestDecoder { GeonetworkRequestCriteria rc = getGeonetworkRequestCriteria(params[0]); logger.debug("scope value is: "+rc.getScope()); - newURI = UriResolverRewriteFilter.SERVLET_GEONETWORK + "?" + GeonetworkResolver.SCOPE + "=" + rc.getScope() +"&"+ GeonetworkResolver.PARAMETER_FILTER_PUBLIC_IDS +"="+rc.isValueOfFilterPublicIds(); + newURI = UriResolverRewriteFilter.SERVLET_GEONETWORK + "?" + GeonetworkResolver.SCOPE + "=" + rc.getScope() +"&"+ GeonetworkResolver.PARAMETER_FILTER_PUBLIC_IDS +"="+rc.isValueOfFilterPublicIds() +"&"+GeonetworkResolver.PARAMETER_NO_AUTHENTICATION+"="+rc.isNoAuthOnGeonetwork(); logger.debug(GeonetworkResolver.PARAMETER_FILTER_PUBLIC_IDS +" is: "+rc.isValueOfFilterPublicIds()); + logger.debug(GeonetworkResolver.PARAMETER_NO_AUTHENTICATION +" is: "+rc.isNoAuthOnGeonetwork()); if(params.length>1){ String remainPath = ""; @@ -75,14 +76,16 @@ public class GeonetworkRequestDecoder { int index = request.indexOf(UriResolverRewriteFilter.REQUEST_PARAMETER_SEPARATOR); String scope = ""; boolean filterPublicIds = false; + boolean authOnGN = false; logger.trace("Index of "+UriResolverRewriteFilter.REQUEST_PARAMETER_SEPARATOR+ " is "+index); if(index!=-1){ scope = request.substring(0,index); filterPublicIds = StringUtils.containsIgnoreCase(request,UriResolverRewriteFilter.PARAMETER_FILTER_PUBLIC_IDS); + authOnGN = StringUtils.containsIgnoreCase(request,UriResolverRewriteFilter.PARAMETER_NO_AUTHENTICATION); }else scope = request; - return new GeonetworkRequestCriteria("/"+scope.replaceAll("_", "/"), filterPublicIds); + return new GeonetworkRequestCriteria("/"+scope.replaceAll("_", "/"), filterPublicIds, authOnGN); } diff --git a/src/main/java/org/gcube/datatransfer/resolver/UriResolverRewriteFilter.java b/src/main/java/org/gcube/datatransfer/resolver/UriResolverRewriteFilter.java index 75b61c4..96ad191 100644 --- a/src/main/java/org/gcube/datatransfer/resolver/UriResolverRewriteFilter.java +++ b/src/main/java/org/gcube/datatransfer/resolver/UriResolverRewriteFilter.java @@ -27,6 +27,7 @@ public class UriResolverRewriteFilter implements Filter{ public static final String SERVLET_GEONETWORK = "/geonetwork"; public static final String PARAMETER_FILTER_PUBLIC_IDS = "filterpublicids"; + public static final String PARAMETER_NO_AUTHENTICATION = "noauthentication"; public static final String REQUEST_PARAMETER_SEPARATOR = "#"; protected static final String SMP_ID = "smp-id"; protected static final String SERVLET_RESOLVER_BY_ID = "id"; diff --git a/src/main/java/org/gcube/datatransfer/resolver/gis/geonetwork/GeonetworkResolver.java b/src/main/java/org/gcube/datatransfer/resolver/gis/geonetwork/GeonetworkResolver.java index 4233905..861c228 100644 --- a/src/main/java/org/gcube/datatransfer/resolver/gis/geonetwork/GeonetworkResolver.java +++ b/src/main/java/org/gcube/datatransfer/resolver/gis/geonetwork/GeonetworkResolver.java @@ -77,6 +77,7 @@ public class GeonetworkResolver extends HttpServlet{ public static final String RESET_CACHED_SCOPE = "resetcachedscope"; public static final String CSW_SERVER = "srv/en/csw"; public static final String PARAMETER_FILTER_PUBLIC_IDS = UriResolverRewriteFilter.PARAMETER_FILTER_PUBLIC_IDS; + public static final String PARAMETER_NO_AUTHENTICATION = UriResolverRewriteFilter.PARAMETER_NO_AUTHENTICATION; /** The logger. */ private static final Logger logger = LoggerFactory.getLogger(GeonetworkResolver.class); @@ -244,7 +245,9 @@ public class GeonetworkResolver extends HttpServlet{ String scope = req.getParameter(SCOPE); String remainValue = req.getParameter(REMAIN_PATH); String filterPublicIDs = req.getParameter(PARAMETER_FILTER_PUBLIC_IDS); - boolean filterPublicMetadataIDs = false; + String noAuthentication = req.getParameter(PARAMETER_NO_AUTHENTICATION); + boolean filterPublicMetadataIDsB = false; + boolean noAuthenticationB = false; if (scope == null || scope.equals("")) { logger.debug("Scope not found"); @@ -253,11 +256,17 @@ public class GeonetworkResolver extends HttpServlet{ } if(filterPublicIDs!=null && Boolean.parseBoolean(filterPublicIDs)){ - filterPublicMetadataIDs = true; + filterPublicMetadataIDsB = true; } + if(noAuthentication!=null && Boolean.parseBoolean(noAuthentication)){ + noAuthenticationB = true; + } + + logger.info("SCOPE is: " + scope); - logger.info(PARAMETER_FILTER_PUBLIC_IDS +" is "+filterPublicMetadataIDs); + logger.info(PARAMETER_FILTER_PUBLIC_IDS +" is "+filterPublicMetadataIDsB); + logger.info(PARAMETER_NO_AUTHENTICATION +" is "+noAuthenticationB); try { @@ -309,15 +318,15 @@ public class GeonetworkResolver extends HttpServlet{ } FilterGetRecords filterGetRecords = null; - if(filterPublicMetadataIDs){ + if(filterPublicMetadataIDsB){ filterGetRecords = new FilterGetRecords(byteArray.toString()); } - if(account.getUser()!=null){ + if(account.getUser()!=null && !noAuthenticationB){ boolean authorized = GNAuthentication.login(httpUtils, geonetworkParams.getUrl(), account.getUser(), account. getPassword()); logger.trace("Authorized on "+geonetworkParams +" ? "+authorized); }else - logger.info("Skipping authentication ckan user is null"); + logger.info("Skipping authentication, either ckan user is null or noAuthentication is required"); logger.info("Sending CSW POST request to URL: "+gnCSWlURL);