/** * Copyright (c) 2006 by Know-Center, Graz, Austria * * This software is the confidential and proprietary information of Know-Center, * Graz, Austria. You shall not disclose such Confidential Information and shall * use it only in accordance with the terms of the license agreement you entered * into with Know-Center. * * KNOW-CENTER MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF * THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE * IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR * NON-INFRINGEMENT. KNOW-CENTER SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY * LICENSEE AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS * DERIVATIVES. * * $Id: AsynchronousRedirectResponder.java,v 1.4 2006/10/11 07:39:13 wprinz Exp $ */ package at.knowcenter.wag.egov.egiz.web; import java.io.IOException; import java.util.ArrayList; import java.util.List; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import org.apache.log4j.Logger; import at.knowcenter.wag.egov.egiz.PdfASID; import at.knowcenter.wag.egov.egiz.cfg.ConfigLogger; import at.knowcenter.wag.egov.egiz.exceptions.ErrorCodeException; import at.knowcenter.wag.egov.egiz.exceptions.PresentableException; import at.knowcenter.wag.egov.egiz.framework.Signator; import at.knowcenter.wag.egov.egiz.framework.SignatorFactory; import at.knowcenter.wag.egov.egiz.sig.ConnectorFactory; import at.knowcenter.wag.egov.egiz.sig.SignatureResponse; import at.knowcenter.wag.egov.egiz.sig.connectors.BKUConnector; /** * Servlet that responds to the redirect requests of the local service (e.g. * BKU). * * @author wprinz */ public class AsynchronousRedirectResponder extends HttpServlet { /** * SVUID. */ private static final long serialVersionUID = -682360466333727236L; /** * The logger definition. */ private static final Logger logger_ = ConfigLogger.getLogger(AsynchronousRedirectResponder.class); protected void dispatch(HttpServletRequest request, HttpServletResponse response, String resource) throws ServletException, IOException { response.setContentType("text/html"); response.setCharacterEncoding("UTF-8"); RequestDispatcher disp = getServletContext().getRequestDispatcher(resource); disp.forward(request, response); } protected void dispatchToResults(List results, HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setAttribute("results", results); dispatch(request, response, "/jsp/results.jsp"); } protected void dispatchToRedirectRefreshPage (HttpServletRequest request, HttpServletResponse response, String refresh_url) throws ServletException, IOException { request.setAttribute("refresh_url", refresh_url); dispatch(request, response, LocalRequestHelper.REDIRECT_REFRESH_PAGE_JSP); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { logger_.debug("AsyncRedirResp"); SessionInformation si = null; HttpSession session = null; try { session = request.getSession(false); //String session_id_string = request.getParameter("session"); if (session == null) { throw new ErrorCodeException(600, "The session is missing."); } si = (SessionInformation) session.getAttribute(SessionAttributes.ATTRIBUTE_SESSION_INFORMATION); // long session_id = Long.parseLong(session_id_string); // si = SessionTable.get(session_id); if (si == null) { throw new ErrorCodeException(600, "The session is not found or is no longer valid."); } } catch (PresentableException e) { e.printStackTrace(); Sign.prepareDispatchToErrorPage(e, request); dispatch(request, response, "/jsp/error.jsp"); return; } try { if (si.finished == false) { String url = request.getRequestURL().toString(); logger_.debug("RequestURL = " + url); String refresh_url = response.encodeURL(url); logger_.debug("RefreshURL = " + refresh_url); dispatchToRedirectRefreshPage(request, response, refresh_url); return; } si.finished = false; if (si.current_operation < si.requests.length) { LocalRequestHelper.prepareDispatchToLocalConnectionPage(si.requests[si.current_operation], request, response); dispatch(request, response, LocalRequestHelper.LOCAL_CONNECTION_PAGE_JSP); return; } // all requests have been carried out. //session.removeAttribute(SessionAttributes.ATTRIBUTE_SESSION_INFORMATION); //SessionTable.remove(si.session_id); BKUConnector local_conn = (BKUConnector) ConnectorFactory.createConnector(si.connector); if (si.application.equals("verify")) { List results = new ArrayList(); for (int i = 0; i < si.response_string.length; i++) { SignatureResponse sig_resp = local_conn.analyzeVerifyResponse(si.response_string[i]); results.add(sig_resp); } dispatchToResults(results, request, response); } else { //logger_.debug("AsyncRedirResponder: si.response_string[0] = " + si.response_string[0]); logger_.debug("AsyncRedirResponder: si.current_op = " + si.current_operation); if (si.response_string[0] == null) { String url = request.getRequestURL().toString(); logger_.debug("RequestURL = " + url); String refresh_url = response.encodeURL(url); logger_.debug("RefreshURL = " + refresh_url); dispatchToRedirectRefreshPage(request, response, refresh_url); return ; } si.iui.signed_signature_object = local_conn.analyzeSignResponse(si.response_string[0], si.type); PdfASID algorithm = FormFields.translateSignatureModeToPdfASID(si.mode); Signator signator = SignatorFactory.createSignator(algorithm); si.sign_result = signator.finishSign(si.iui); Sign.returnSignResponse(si, response); } } catch (PresentableException e) { session.removeAttribute(SessionAttributes.ATTRIBUTE_SESSION_INFORMATION); //SessionTable.remove(si.session_id); e.printStackTrace(); Sign.prepareDispatchToErrorPage(e, request); dispatch(request, response, "/jsp/error.jsp"); } } }