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:
parent
d7a7922126
commit
5ba5151323
|
@ -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
|
||||
|
|
6
pom.xml
6
pom.xml
|
@ -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>
|
||||
|
|
|
@ -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
|
||||
*/
|
||||
|
|
|
@ -24,4 +24,9 @@ public interface GcubeCkanDataCatalogService extends RemoteService {
|
|||
String getUser();
|
||||
|
||||
void logoutFromCkan();
|
||||
|
||||
/**
|
||||
* @return
|
||||
*/
|
||||
String logoutURIFromCkan();
|
||||
}
|
||||
|
|
|
@ -33,4 +33,7 @@ public interface GcubeCkanDataCatalogServiceAsync {
|
|||
*/
|
||||
void logoutFromCkan(AsyncCallback<Void> callback);
|
||||
|
||||
|
||||
void logoutURIFromCkan(AsyncCallback<String> callback);
|
||||
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}*/
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -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()
|
||||
|
|
Loading…
Reference in New Issue