/** * */ package at.knowcenter.wag.egov.egiz.web.servlets; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; 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.commons.logging.Log; import org.apache.commons.logging.LogFactory; import at.knowcenter.wag.egov.egiz.pdf.SignatureHolder; import at.knowcenter.wag.egov.egiz.sig.SignatureData; import at.knowcenter.wag.egov.egiz.sig.SignatureDataImpl; import at.knowcenter.wag.egov.egiz.sig.SignatureObject; import at.knowcenter.wag.egov.egiz.tools.CodingHelper; import at.knowcenter.wag.egov.egiz.web.SessionAttributes; import at.knowcenter.wag.egov.egiz.web.SessionInformation; /** * Retrieves the Signature Data from the session and returns it. * * @author wprinz */ public class RetrieveSignatureDataServlet extends HttpServlet { /** * SVUID. */ private static final long serialVersionUID = -5387006236836240538L; /** * The log. */ private static Log log = LogFactory.getLog(RetrieveSignatureDataServlet.class); /** * @see javax.servlet.http.HttpServlet#doGet(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { log.debug("Request for receiving signature data."); //$NON-NLS-1$ HttpSession session = request.getSession(false); if (session == null) { String msg = "There is no session associated with this request."; //$NON-NLS-1$ log.error(msg); throw new ServletException(msg); } SessionInformation si = (SessionInformation) session.getAttribute(SessionAttributes.ATTRIBUTE_SESSION_INFORMATION); if (si == null) { String msg = "The session is not found or no longer valid."; //$NON-NLS-1$ log.error(msg); throw new ServletException(msg); } SignatureData sd = null; if (si.application.equals("sign")) { sd = si.iui.signature_data; } else { SignatureHolder holder = (SignatureHolder) si.signature_holders.get(si.current_operation); SignatureObject s = holder.getSignatureObject(); // TODO make better String text_to_be_verified = holder.getSignedText(); if (holder.getSignatureObject().isBinary()) { byte[] data = CodingHelper.decodeBase64(text_to_be_verified); sd = new SignatureDataImpl(data, "application/pdf"); } else { sd = new SignatureDataImpl(text_to_be_verified.getBytes("UTF-8"), "text/plain", "UTF-8"); } } log.debug("Writing " + sd.getMimeType() + " data:"); //$NON-NLS-1$ //$NON-NLS-2$ response.setContentType(sd.getMimeType()); response.setCharacterEncoding(sd.getCharacterEncoding()); //response.getOutputStream().write(sd.getData()); //:::: InputStream is = new ByteArrayInputStream(sd.getData()); final int bufferSize = 1024; byte[] buffer = new byte[bufferSize]; int len = -1; while ((len = is.read(buffer)) != -1) { response.getOutputStream().write(buffer, 0, len); } response.getOutputStream().flush(); //:::: log.debug("Writing SignatureData finished."); //$NON-NLS-1$ } }