/** * */ package at.knowcenter.wag.egov.egiz.web.servlets; import java.io.IOException; import javax.servlet.RequestDispatcher; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import at.gv.egiz.pdfas.impl.input.TextDataSourceImpl; import at.gv.egiz.pdfas.exceptions.web.SessionExpiredException; import at.gv.egiz.pdfas.framework.input.DataSource; import at.gv.egiz.pdfas.web.SignSessionInformation; import at.gv.egiz.pdfas.web.VerifySessionInformation; import at.gv.egiz.pdfas.web.helper.SessionHelper; import at.gv.egiz.pdfas.utils.StreamUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import at.knowcenter.wag.egov.egiz.PdfAS; import at.knowcenter.wag.egov.egiz.pdf.BinarySignatureHolder; import at.knowcenter.wag.egov.egiz.pdf.SignatureHolder; import at.knowcenter.wag.egov.egiz.sig.SignatureData; import at.knowcenter.wag.egov.egiz.sig.SignatureDataImpl; /** * 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); protected void dispatch(HttpServletRequest request, HttpServletResponse response, String resource) throws ServletException, IOException { dispatch(request, response, resource, getServletContext()); } protected static void dispatch(HttpServletRequest request, HttpServletResponse response, String resource, ServletContext context) throws ServletException, IOException { response.setContentType("text/html"); response.setCharacterEncoding("UTF-8"); RequestDispatcher disp = context.getRequestDispatcher(resource); disp.forward(request, response); } /** * @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$ try { Object sessionObject = SessionHelper.getSession(request); if (sessionObject instanceof SignSessionInformation) { SignSessionInformation si = (SignSessionInformation) sessionObject; processSign(request, response, si); } else { VerifySessionInformation si = (VerifySessionInformation) sessionObject; processVerify(request, response, si); } } catch (SessionExpiredException e) { log.error(e); SignServlet.prepareDispatchToErrorPage(e, request); dispatch(request, response, "/jsp/error.jsp"); } } protected void processSign(HttpServletRequest request, HttpServletResponse response, SignSessionInformation si) throws ServletException, IOException { writeSignatureData(si.si.getSignatureData(), response); } protected void processVerify(HttpServletRequest request, HttpServletResponse response, VerifySessionInformation si) throws ServletException, IOException { SignatureData sd = null; SignatureHolder holder = null; if (si.currentLocalOperation != null) { holder = si.currentLocalOperation.getCurrentSignatureHolder(); } else { holder = si.moa_holder; } log.debug("holder = " + holder.toString()); sd = PdfAS.convertSignatureHolderToSignatureData(holder); // if (holder.getSignatureObject().isBinary()) // { // BinarySignatureHolder bsh = (BinarySignatureHolder) holder; // // byte[] data = CodingHelper.decodeBase64(text_to_be_verified); // sd = new SignatureDataImpl(bsh.getSignedPdf(), "application/pdf"); // } // else // { // String text_to_be_verified = holder.getSignedText(); // DataSource ds = new TextDataSourceImpl(text_to_be_verified); // sd = new SignatureDataImpl(ds, "text/plain", "UTF-8"); // } log.debug("sd = " + sd.toString() + ", " + sd.getDataSource().getClass().getName() + ", " + sd.getDataSource().getLength() + ", " + sd.getMimeType() + ", " + sd.getCharacterEncoding()); writeSignatureData(sd, response); } protected void writeSignatureData(SignatureData sd, HttpServletResponse response) throws IOException { log.trace("Writing " + sd.getMimeType() + " data:"); //$NON-NLS-1$ //$NON-NLS-2$ response.setContentType(sd.getMimeType()); response.setCharacterEncoding(sd.getCharacterEncoding()); StreamUtils.writeInputStreamToOutputStream(sd.getDataSource().createInputStream(), response.getOutputStream()); // response.getOutputStream().write(sd.getData()); log.trace("Writing SignatureData finished."); //$NON-NLS-1$ } }