/******************************************************************************* *******************************************************************************/ package at.gv.egiz.eidas.specific.modules.authmodule_eIDASv2; import java.io.IOException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.lang3.StringUtils; import org.apache.commons.text.StringEscapeUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import at.gv.egovernment.moa.id.auth.servlet.AbstractProcessEngineSignalController; /** * @author tlenz * */ @Controller public class eIDASSignalServlet extends AbstractProcessEngineSignalController { private static final Logger log = LoggerFactory.getLogger(eIDASSignalServlet.class); public eIDASSignalServlet() { super(); log.debug("Registering servlet " + getClass().getName() + " with mappings '"+ Constants.eIDAS_HTTP_ENDPOINT_SP_POST + "' and '"+ Constants.eIDAS_HTTP_ENDPOINT_SP_REDIRECT + "'."); } @RequestMapping(value = { Constants.eIDAS_HTTP_ENDPOINT_SP_POST, Constants.eIDAS_HTTP_ENDPOINT_SP_REDIRECT }, method = {RequestMethod.POST, RequestMethod.GET}) public void performCitizenCardAuthentication(HttpServletRequest req, HttpServletResponse resp) throws IOException { signalProcessManagement(req, resp); } @Override /** * Protocol specific implementation to get the pending-requestID * from http request object * * @param request The http Servlet-Request object * @return The Pending-request id * */ public String getPendingRequestId(HttpServletRequest request) { String sessionId = super.getPendingRequestId(request); try { // use SAML2 relayState if (sessionId == null) { log.trace("No transaction identifier from pendingReq. Search for SAML2 'RelayState' ..."); sessionId = StringEscapeUtils.escapeHtml4(request.getParameter("RelayState")); if (StringUtils.isEmpty(sessionId)) log.info("NO transaction identifier found! Stopping process ...."); else log.debug("Find transaction identifier in SAML2 'RelayState': " + sessionId); } else log.trace("Find transaction identifier from pendingReq."); } catch (Exception e) { log.warn("Unable to retrieve moa session id.", e); } return sessionId; } }