diff --git a/src/main/java/org/gcube/data/access/connector/AuthenticationRequest.java b/src/main/java/org/gcube/data/access/connector/AuthenticationRequest.java new file mode 100644 index 0000000..fe1b0f7 --- /dev/null +++ b/src/main/java/org/gcube/data/access/connector/AuthenticationRequest.java @@ -0,0 +1,61 @@ +package org.gcube.data.access.connector; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.Enumeration; +import java.util.List; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletRequestWrapper; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class AuthenticationRequest extends HttpServletRequestWrapper { + + private final static String AUTHENTICATION = "Authentication"; + private Logger logger; + + public AuthenticationRequest(HttpServletRequest request) { + super(request); + this.logger = LoggerFactory.getLogger(this.getClass()); + } + + public String getHeader(String name) { + this.logger.debug("getHeader : " + name); + + HttpServletRequest request = (HttpServletRequest) getRequest(); + + // if header name request is "Authorization" then update value + if (AUTHENTICATION.equals(name)) { + // TODO get authorization from IS + this.logger.debug("Set AUTHENTICATION"); + return "BASIC YWRtaW46Z2Vvc2VydmVy"; + } + + return request.getHeader(name); + } + + public Enumeration getHeaderNames() { + this.logger.debug("getHeaderNames"); + + HttpServletRequest request = (HttpServletRequest) getRequest(); + + // modify list of headers + List list = new ArrayList(); + + Enumeration e = request.getHeaderNames(); + while (e.hasMoreElements()) { + // add the names of the request headers into the list + String n = (String) e.nextElement(); + list.add(n); + } + + // add Authentication + list.add(AUTHENTICATION); + this.logger.debug("add Authentication"); + // create an enumeration from the list and return + Enumeration en = Collections.enumeration(list); + return en; + } +} diff --git a/src/main/java/org/gcube/data/access/connector/GeoServerConnectorRequestHandler.java b/src/main/java/org/gcube/data/access/connector/GeoServerConnectorRequestHandler.java new file mode 100644 index 0000000..ca7a5ea --- /dev/null +++ b/src/main/java/org/gcube/data/access/connector/GeoServerConnectorRequestHandler.java @@ -0,0 +1,50 @@ +package org.gcube.data.access.connector; + +import java.util.Enumeration; +import javax.servlet.http.HttpServletRequest; +import javax.xml.bind.annotation.XmlRootElement; + +import org.gcube.smartgears.handlers.application.RequestEvent; +import org.gcube.smartgears.handlers.application.RequestHandler; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +@XmlRootElement (name= GeoServerConnectorRequestHandler.REQUEST_HANDLER_NAME) +public class GeoServerConnectorRequestHandler extends RequestHandler { + + public static final String REQUEST_HANDLER_NAME = "authentication-filter"; + + private Logger logger; + + public GeoServerConnectorRequestHandler() { + this.logger = LoggerFactory.getLogger(this.getClass()); + } + + @Override + public String getName() { + return REQUEST_HANDLER_NAME; + } + + @Override + public void handleRequest(RequestEvent e) { + + this.logger.debug("Handling request"); + HttpServletRequest httpServletRequest = e.request(); + + // create the AuthenticationRequest object to wrap the HttpServletRequest + AuthenticationRequest request = new AuthenticationRequest(httpServletRequest); + + // TODO delete (just to show the headers!!!) + Enumeration en = request.getHeaderNames(); + while (en.hasMoreElements()) { + String n = (String) en.nextElement(); + String v = request.getHeader(n); + this.logger.debug(n + " : " + v + "\n"); + } + } + + @Override + public String toString() { + return getName(); + } +} diff --git a/src/main/resources/META-INF/MANIFEST.MF b/src/main/resources/META-INF/MANIFEST.MF new file mode 100644 index 0000000..1a31e21 --- /dev/null +++ b/src/main/resources/META-INF/MANIFEST.MF @@ -0,0 +1,6 @@ +Manifest-Version: 1.0 +Archiver-Version: Plexus Archiver +Created-By: Apache Maven +Built-By: Pasquy +Build-Jdk: 1.7.0_75 + diff --git a/src/main/resources/META-INF/services/org.gcube.smartgears.handlers.application.ApplicationHandler b/src/main/resources/META-INF/services/org.gcube.smartgears.handlers.application.ApplicationHandler new file mode 100644 index 0000000..9d1b1cf --- /dev/null +++ b/src/main/resources/META-INF/services/org.gcube.smartgears.handlers.application.ApplicationHandler @@ -0,0 +1 @@ +org.gcube.data.access.connector.GeoServerConnectorRequestHandler \ No newline at end of file