3751: Create Ckan Data Catalogue Portlet

Task-Url: https://support.d4science.org/issues/3751

Added code to perfom logout during browser closing
Updated and fixed CkanConnectorAccessPoint

git-svn-id: http://svn.d4science-ii.research-infrastructures.eu/gcube/trunk/portlets/user/gcube-ckan-datacatalog@129352 82a268e6-3cf1-43bd-a215-b396298e98cf
This commit is contained in:
Francesco Mangiacrapa 2016-06-23 12:57:20 +00:00
parent eb23d0318c
commit 7fe5e298b8
4 changed files with 104 additions and 72 deletions

View File

@ -2,6 +2,9 @@ package org.gcube.portlets.gcubeckan.gcubeckandatacatalog.server;
import static org.gcube.common.authorization.client.Constants.authorizationService;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
@ -90,20 +93,10 @@ public class GcubeCkanDataCatalogServiceImpl extends RemoteServiceServlet implem
logger.info("queryStringParameters detected like Base64 and decoded like: "+queryStringParameters);
}
String ckanContext = getServletContext().getInitParameter(CKANCONNECTORCONTEXT);
logger.debug(CKANCONNECTORCONTEXT + " is: "+ckanContext);
ASLSession session = getASLSession(this.getThreadLocalRequest().getSession());
GcoreEndpointReader ckanEndPoint = SessionUtil.getCkanEndPoint(session);
String ckanConnectorUri = ckanEndPoint.getCkanResourceEntyName();
logger.debug(ckanConnectorUri + "is : "+ckanConnectorUri);
ckanConnectorUri = ckanConnectorUri.startsWith(HTTP) && !ckanConnectorUri.startsWith(HTTPS)?ckanConnectorUri.replaceFirst(HTTP, HTTPS):ckanConnectorUri;
ckanConnectorUri = ckanConnectorUri.contains(PORT_HTTP)?ckanConnectorUri.replace(PORT_HTTP, PORT_HTTPS):ckanConnectorUri;
ckanConnectorUri+=ckanContext;
logger.debug("CKanConnector URI + Context: "+ckanConnectorUri);
logger.debug("adding parameters...");
CkanConnectorAccessPoint ckAP = getCkanConnectorAccessPoint(ckanConnectorUri, pathInfoParameter, queryStringParameters);
logger.info("returning ckanConnectorUri: "+ckAP);
CkanConnectorAccessPoint ckAP = getCkanConnectorAccessPoint(pathInfoParameter, queryStringParameters);
SessionUtil.saveCkanAccessPoint(this.getThreadLocalRequest().getSession(), ckAP);
logger.info("Builded URI to CKAN Connector: "+ckAP.buildURI());
logger.debug("returning ckanConnectorUri: "+ckAP);
return ckAP;
// return "http://ckan-d-d4s.d4science.org";
}catch(Exception e ){
@ -115,43 +108,42 @@ public class GcubeCkanDataCatalogServiceImpl extends RemoteServiceServlet implem
/**
* Gets the ckan connector parameters.
* Gets the ckan connector access point.
*
* @param ckanConnectorBaseUrl the ckan connector base url
* @param pathInfoParameter the path info parameters
* @param pathInfoParameter the path info parameter
* @param queryStringParameters the query string parameters
* @return the ckan connector parameters
* @return the ckan connector access point
*/
private CkanConnectorAccessPoint getCkanConnectorAccessPoint(String ckanConnectorBaseUrl, String pathInfoParameter, String queryStringParameters) {
// String ckanHideHeader = getServletContext().getInitParameter(CKANHIDEHEADER);
// logger.debug(CKANHIDEHEADER + " is: "+ckanHideHeader);
private CkanConnectorAccessPoint getCkanConnectorAccessPoint(String pathInfoParameter, String queryStringParameters) {
//CKAN BASE URL
ASLSession session = getASLSession(this.getThreadLocalRequest().getSession());
GcoreEndpointReader ckanEndPoint = SessionUtil.getCkanEndPoint(session);
String ckanConnectorBaseUrl = ckanEndPoint.getCkanResourceEntyName();
ckanConnectorBaseUrl = ckanConnectorBaseUrl.startsWith(HTTP) && !ckanConnectorBaseUrl.startsWith(HTTPS)?ckanConnectorBaseUrl.replaceFirst(HTTP, HTTPS):ckanConnectorBaseUrl;
ckanConnectorBaseUrl = ckanConnectorBaseUrl.contains(PORT_HTTP)?ckanConnectorBaseUrl.replace(PORT_HTTP, PORT_HTTPS):ckanConnectorBaseUrl;
logger.debug("Base URL is: "+ckanConnectorBaseUrl);
CkanConnectorAccessPoint ckan = new CkanConnectorAccessPoint(ckanConnectorBaseUrl);
//
// String pathInfo = "";
// if(pathInfoParameter!=null && !pathInfoParameter.isEmpty()){
// pathInfo=pathInfoParameter.startsWith("/")?pathInfoParameter:"/"+pathInfoParameter;
// }
//GET CONTEXT
String ckanContext = getServletContext().getInitParameter(CKANCONNECTORCONTEXT);
logger.debug(CKANCONNECTORCONTEXT + " is: "+ckanContext);
ckan.addPathInfo(pathInfoParameter);
ckanContext= ckanContext!=null?ckanContext:"";
if(pathInfoParameter!=null && pathInfoParameter.length()>0){
pathInfoParameter=pathInfoParameter.startsWith("/")?pathInfoParameter:"/"+pathInfoParameter;
}else
pathInfoParameter = "";
logger.debug("External Path Info parameter: "+pathInfoParameter);
//ADD PATH INFO
ckan.addPathInfo(ckanContext+pathInfoParameter);
logger.debug("CKanConnector pathInfo: "+ckan.getPathInfoParameter());
ckan.addQueryString(queryStringParameters);
// String queryString ="";
// if(queryStringParameters!=null && !queryStringParameters.isEmpty()){
// queryString = "?"+queryStringParameters;
// }
// String gcubeTokenParameter = null;
// if(SessionUtil.isIntoPortal()){
// gcubeTokenParameter = GCUBE_TOKEN_PARAMETER+"="+getGcubeSecurityToken();
// }else{
// logger.warn("******** Using TEST_USER security token!!!");
// gcubeTokenParameter = GCUBE_TOKEN_PARAMETER+"="+TEST_SEC_TOKEN;
// }
//GET TOKEN
String gcubeTokenValue = null;
if(SessionUtil.isIntoPortal()){
gcubeTokenValue = getGcubeSecurityToken();
@ -161,35 +153,13 @@ public class GcubeCkanDataCatalogServiceImpl extends RemoteServiceServlet implem
}
ckan.addGubeToken(gcubeTokenValue);
// ckan.addGenericParameter(ckanHideHeader, "true");
// //ADDING CKAN HH (HIDE HEADER PARAMETER)
// queryString = queryString.isEmpty()?"?"+ckanHideHeader:"&"+ckanHideHeader;
// //ADDING GCUBE TOKEN PARAMETER
// queryString+="&"+gcubeTokenParameter;
//ADDING LIST OF VRE TO WHICH USER BELONGS
if(!SessionUtil.isIntoPortal()){
return ckan;
}
ASLSession session = getASLSession(this.getThreadLocalRequest().getSession());
List<String> listVres = UserUtil.getListVreForUser(session.getUserEmailAddress());
// String vres = "";
// if(listVres!=null && listVres.size()>0){
// for (String vre : listVres) {
// vres+=vre+",";
// }
// vres = vres.substring(0, vres.length()-1).toLowerCase(); //remove last "," and to lower case. A CKAN Organization ID must be lower case
// }
// logger.debug("List of VREs contains: " +vres);
// if(vres.length()>0){
// queryString+="&"+LIST_OF_VRES_PARAMETER+"="+vres;
// }
// ckan.addGubeToken(gcubeTokenParameter);
ckan.addListOfVREs(listVres);
return ckan;
@ -396,11 +366,32 @@ public class GcubeCkanDataCatalogServiceImpl extends RemoteServiceServlet implem
HttpSession httpSession = this.getThreadLocalRequest().getSession();
ASLSession session = getASLSession(httpSession);
String username = session.getUsername();
logger.debug("Logout from CKAN for: "+username);
CkanConnectorAccessPoint ckanAP = SessionUtil.getCkanAccessPoint(this.getThreadLocalRequest().getSession());
// String token = getGcubeSecurityToken();
logger.info("Logout from CKAN for: "+username +" by token: "+ckanAP.getGcubeTokenValue());
String ckanConnectorLogut = getServletContext().getInitParameter(CKANCONNECTORLOGOUT);
logger.debug(CKANCONNECTORLOGOUT + " is: "+ckanConnectorLogut);
CkanConnectorAccessPoint ckan = new CkanConnectorAccessPoint(ckanAP.getBaseUrl());
ckan.addPathInfo(ckanConnectorLogut);
ckan.addGubeToken(ckanAP.getGcubeTokenValue());
URL url;
try {
String deleteURI = ckan.buildURI();
logger.debug("Perfoming HTTP delete to URI: "+deleteURI);
url = new URL(ckan.buildURI());
HttpURLConnection httpCon = (HttpURLConnection) url.openConnection();
httpCon.setDoOutput(true);
httpCon.setRequestProperty("Content-Type", "application/x-www-form-urlencoded" );
httpCon.setRequestMethod("DELETE");
httpCon.connect();
logger.debug("Logout Completed");
}
catch (IOException e) {
logger.error("An error occured during performing Logout from CKAN for: "+username +" by token: "+ckanAP.getGcubeTokenValue(), e);
}
}
}

View File

@ -3,7 +3,10 @@
*/
package org.gcube.portlets.gcubeckan.gcubeckandatacatalog.server;
import javax.servlet.http.HttpSession;
import org.gcube.application.framework.core.session.ASLSession;
import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.shared.CkanConnectorAccessPoint;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -19,6 +22,7 @@ import com.liferay.portal.service.UserLocalServiceUtil;
public class SessionUtil {
public static final String CKAN_END_POINT = "CKAN_END_POINT";
public static final String CKAN_ACCESS_POINT = "CKAN_ACCESS_POINT";
private static Logger logger = LoggerFactory.getLogger(SessionUtil.class);
@ -55,4 +59,26 @@ public class SessionUtil {
return false;
}
}
/**
* @param ckAP
*/
public static void saveCkanAccessPoint(HttpSession session, CkanConnectorAccessPoint ckAP) {
session.setAttribute(CKAN_ACCESS_POINT, ckAP);
}
/**
* Gets the ckan access point.
*
* @param session the session
* @return the ckan access point
*/
public static CkanConnectorAccessPoint getCkanAccessPoint(HttpSession session) {
return (CkanConnectorAccessPoint) session.getAttribute(CKAN_ACCESS_POINT);
}
}

View File

@ -29,7 +29,7 @@ public class CkanConnectorAccessPoint implements Serializable{
private List<String> listOfVRes;
/**
*
* Instantiates a new ckan connector access point.
*/
public CkanConnectorAccessPoint() {
}
@ -118,15 +118,20 @@ public class CkanConnectorAccessPoint implements Serializable{
*/
public String buildURI(){
String path = "";
String query = "";
if(pathInfoParameter!=null && !pathInfoParameter.isEmpty())
pathInfoParameter=pathInfoParameter.startsWith("/")?pathInfoParameter:"/"+pathInfoParameter;
path=pathInfoParameter.startsWith("/")?pathInfoParameter:"/"+pathInfoParameter;
else
pathInfoParameter="";
path="";
if(queryStringParameters==null)
queryStringParameters="";
if(queryStringParameters==null || queryStringParameters.isEmpty())
query="";
else
query = queryStringParameters;
return baseUrl+pathInfoParameter+"?"+queryStringParameters;
return baseUrl+path+"?"+query;
}
@ -134,6 +139,8 @@ public class CkanConnectorAccessPoint implements Serializable{
/**
* Gets the base url.
*
* @return the baseUrl
*/
public String getBaseUrl() {
@ -143,6 +150,8 @@ public class CkanConnectorAccessPoint implements Serializable{
/**
* Gets the path info parameter.
*
* @return the pathInfoParameter
*/
public String getPathInfoParameter() {
@ -152,6 +161,8 @@ public class CkanConnectorAccessPoint implements Serializable{
/**
* Gets the query string parameters.
*
* @return the queryStringParameters
*/
public String getQueryStringParameters() {
@ -161,6 +172,8 @@ public class CkanConnectorAccessPoint implements Serializable{
/**
* Gets the gcube token value.
*
* @return the gcubeTokenValue
*/
public String getGcubeTokenValue() {
@ -170,6 +183,8 @@ public class CkanConnectorAccessPoint implements Serializable{
/**
* Gets the list of v res.
*
* @return the listOfVRes
*/
public List<String> getListOfVRes() {

View File

@ -19,7 +19,7 @@
<context-param>
<description>ckan connector logout from CKAN</description>
<param-name>CkanConnectorLogout</param-name>
<param-value>/gcube/service/connect</param-value>
<param-value>/gcube/service/disconnect</param-value>
</context-param>
<!-- Servlets -->