Added test code to perform CKAN logout

git-svn-id: http://svn.d4science-ii.research-infrastructures.eu/gcube/trunk/portlets/user/gcube-ckan-datacatalog@129498 82a268e6-3cf1-43bd-a215-b396298e98cf
This commit is contained in:
Francesco Mangiacrapa 2016-06-28 10:45:24 +00:00
parent d7a7922126
commit 5ba5151323
7 changed files with 130 additions and 30 deletions

View File

@ -1,5 +1,6 @@
eclipse.preferences.version=1
jarsExcludedFromWebInfLib=
lastWarOutDir=/home/francesco-mangiacrapa/wseclipseluna/gcube-ckan-datacatalog-TRUNK-1.0.0-SNAPSHOT/target/gcube-ckan-datacatalog-1.0.0-SNAPSHOT
launchConfigExternalUrlPrefix=
warSrcDir=src/main/webapp
warSrcDirIsOutput=false

View File

@ -102,6 +102,12 @@
<version>[1.0.0-SNAPSHOT, 2.0.0-SNAPSHOT)</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.2</version>
</dependency>
<dependency>
<groupId>org.gcube.applicationsupportlayer</groupId>
<artifactId>aslcore</artifactId>

View File

@ -25,11 +25,6 @@ import org.gcube.portlets.widgets.ckandatapublisherwidget.client.ui.CreateDatase
import com.github.gwtbootstrap.client.ui.Modal;
import com.google.gwt.event.shared.HandlerManager;
import com.google.gwt.http.client.Request;
import com.google.gwt.http.client.RequestBuilder;
import com.google.gwt.http.client.RequestCallback;
import com.google.gwt.http.client.RequestException;
import com.google.gwt.http.client.Response;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;
@ -177,11 +172,17 @@ public class CkanEventHandlerManager {
@Override
public void onLogout(NotifyLogoutEvent editMetadataEvent) {
// open("https://ckan-d-d4s.d4science.org:443/ckan-connector/gcube/service/disconnect?gcube-token=4620e6d0-2313-4f48-9d54-eb3efd01a810", "_blank", null);
// String url = GWT.getHostPageBaseURL()+"CkanLogoutCatalog.html?logout=https://ckan-d-d4s.d4science.org:443/ckan-connector/gcube/service/disconnect?gcube-token=4620e6d0-2313-4f48-9d54-eb3efd01a810";
// Window.open(url, "_blank", null);
// logutWindow("https://ckan-d-d4s.d4science.org:443/ckan-connector/gcube/service/disconnect?gcube-token=4620e6d0-2313-4f48-9d54-eb3efd01a810", false);
// logutWindow("https://ckan-d-d4s.d4science.org:443/ckan-connector/gcube/service/disconnect?gcube-token=4620e6d0-2313-4f48-9d54-eb3efd01a810", true);
// com.google.gwt.user.client.Window.open(GCubeCkanDataCatalog.CKAN_LOGUT_SERVICE, "_blank", "");
// com.google.gwt.user.client.Window.open("https://ckan-d-d4s.d4science.org:443/ckan-connector/gcube/service/disconnect?gcube-token=4620e6d0-2313-4f48-9d54-eb3efd01a810", "_blank", "");
RequestBuilder logutRequestBuilder = new RequestBuilder(RequestBuilder.GET, GCubeCkanDataCatalog.CKAN_LOGUT_SERVICE);
/*RequestBuilder logutRequestBuilder = new RequestBuilder(RequestBuilder.GET, GCubeCkanDataCatalog.CKAN_LOGUT_SERVICE);
logutRequestBuilder.setCallback(new RequestCallback() {
@ -202,24 +203,7 @@ public class CkanEventHandlerManager {
logutRequestBuilder.send();
} catch ( RequestException e ) {
Window.alert("Error on logout");
}
/*GCubeCkanDataCatalog.service.logoutFromCkan(new AsyncCallback<Void>() {
@Override
public void onFailure(Throwable caught) {
// TODO Auto-generated method stub
}
@Override
public void onSuccess(Void result) {
// TODO Auto-generated method stub
}
});*/
}*/
}
});
@ -233,6 +217,18 @@ public class CkanEventHandlerManager {
});
}
private static native void logutWindow(String uri, boolean timeout)/*-{
var newWindow = window.open(uri, '_blank', 'width=50,height=50');
newWindow.onload = function() {
setTimeout();
};
setTimeout(function() {
newWindow.close();
}, 500);
return false;
}-*/;
/**
* @return
*/

View File

@ -24,4 +24,9 @@ public interface GcubeCkanDataCatalogService extends RemoteService {
String getUser();
void logoutFromCkan();
/**
* @return
*/
String logoutURIFromCkan();
}

View File

@ -33,4 +33,7 @@ public interface GcubeCkanDataCatalogServiceAsync {
*/
void logoutFromCkan(AsyncCallback<Void> callback);
void logoutURIFromCkan(AsyncCallback<String> callback);
}

View File

@ -5,10 +5,7 @@ package org.gcube.portlets.gcubeckan.gcubeckandatacatalog.server;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.List;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
@ -17,6 +14,12 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.http.Header;
import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.gcube.application.framework.core.session.ASLSession;
import org.gcube.application.framework.core.session.SessionManager;
import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.shared.CkanConnectorAccessPoint;
@ -28,6 +31,7 @@ import eu.trentorise.opendata.traceprov.internal.org.apache.commons.io.IOUtils;
/**
* The Class CkanLogout.
*
* @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it
* Jun 27, 2016
@ -62,11 +66,76 @@ public class CkanLogout extends HttpServlet {
ckan.addGubeToken(ckanAP.getGcubeTokenValue());
URL url;
String deleteURI = ckan.buildURI();
// resp.sendRedirect(deleteURI);
CloseableHttpResponse httpResponse = null;
try {
String deleteURI = ckan.buildURI();
CloseableHttpClient httpclient = HttpClients.createDefault();
HttpGet httpget = new HttpGet(deleteURI);
httpResponse = httpclient.execute(httpget);
if(httpResponse.getStatusLine().getStatusCode()==HttpStatus.SC_OK){
resp.setStatus(HttpStatus.SC_OK);
Header[] headers = httpResponse.getAllHeaders();
for (Header header : headers) {
logger.trace("header key: "+header.getName() +", value: "+header.getValue());
if(header.getName()==null){
logger.trace("skip key: "+header.getName() +", value: "+header.getValue());
}else
resp.setHeader(header.getName(),header.getValue());
}
try {
HttpEntity entity = httpResponse.getEntity();
if (entity != null) {
resp.setHeader("Content-Length", String.valueOf(entity.getContentLength()));
// resp.setContentLength(entity.getContentLength());
Header encoding = entity.getContentEncoding();
logger.trace("Encoding: "+encoding.getName() + ", "+encoding.getValue());
// String encod = encoding == null ? GcubeCkanDataCatalogServiceImpl.UTF_8 : encoding.getName();
// resp.setCharacterEncoding(encoding);
resp.setStatus(HttpStatus.SC_OK);
resp.setContentType(resp.getContentType());
InputStream in = entity.getContent();
try {
ServletOutputStream out = resp.getOutputStream();
IOUtils.copy(in, out);
logger.info("Logout Completed, response code: "+HttpStatus.SC_OK);
} finally {
in.close();
}
}
}catch(Exception e){
logger.warn("An error occurred during copying CKAN logout response",e);
}
}else{
logger.warn("An error occurred during perfoming CKAN logout, Response status is: "+httpResponse.getStatusLine().getStatusCode());
HttpEntity entity = httpResponse.getEntity();
if (entity != null) {
InputStream in = entity.getContent();
if(in!=null){
logger.error("Response error: "+IOUtils.toString(in));
}
}
}
}catch(Exception e){
logger.warn("An error occurred during perfoming CKAN logout", e);
}finally {
if(httpResponse!=null)
httpResponse.close();
}
/*try {
logger.debug("Perfoming HTTP delete to URI: "+deleteURI);
url = new URL(deleteURI);
HttpURLConnection httpCon = (HttpURLConnection) url.openConnection();
req.getCookies();
// httpCon.setDoOutput(true);
// httpCon.setRequestProperty("Content-Type", "application/x-www-form-urlencoded" );
// httpCon.setRequestProperty(key, value);
@ -113,7 +182,7 @@ public class CkanLogout extends HttpServlet {
}
catch (IOException e) {
logger.error("An error occured during performing Logout from CKAN for: "+username +" by token: "+ckanAP.getGcubeTokenValue(), e);
}
}*/
}
/**

View File

@ -15,6 +15,7 @@ import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.commons.codec.binary.Base64;
import org.apache.http.HttpStatus;
import org.gcube.application.framework.core.session.ASLSession;
import org.gcube.application.framework.core.session.SessionManager;
import org.gcube.common.scope.api.ScopeProvider;
@ -37,7 +38,6 @@ import org.slf4j.LoggerFactory;
import com.google.gwt.user.server.rpc.RemoteServiceServlet;
import eu.trentorise.opendata.jackan.internal.org.apache.http.HttpStatus;
import eu.trentorise.opendata.traceprov.internal.org.apache.commons.io.IOUtils;
/**
* The server side implementation of the RPC service.
@ -384,6 +384,26 @@ public class GcubeCkanDataCatalogServiceImpl extends RemoteServiceServlet implem
}
@Override
public String logoutURIFromCkan() {
HttpSession httpSession = this.getThreadLocalRequest().getSession();
ASLSession session = getASLSession(httpSession);
String username = session.getUsername();
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;
return ckan.buildURI();
}
/* (non-Javadoc)
* @see org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.GcubeCkanDataCatalogService#logoutFromCkan()