diff options
author | Andreas Fitzek <andreas.fitzek@iaik.tugraz.at> | 2015-07-14 13:27:56 +0200 |
---|---|---|
committer | Andreas Fitzek <andreas.fitzek@iaik.tugraz.at> | 2015-07-14 13:27:56 +0200 |
commit | 030ad8ea8455922ad59c095d3a9ecbfc462ff69f (patch) | |
tree | 3fb0ab24b8432dae25efab6ef3e3b77bd623b1d5 /pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/servlets/SignNowServlet.java | |
parent | 38a852e11c1edd313ab0882ac7bda00a82546fbb (diff) | |
download | pdf-as-4-030ad8ea8455922ad59c095d3a9ecbfc462ff69f.tar.gz pdf-as-4-030ad8ea8455922ad59c095d3a9ecbfc462ff69f.tar.bz2 pdf-as-4-030ad8ea8455922ad59c095d3a9ecbfc462ff69f.zip |
many fixes for html5 js viewer integration
Diffstat (limited to 'pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/servlets/SignNowServlet.java')
-rw-r--r-- | pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/servlets/SignNowServlet.java | 202 |
1 files changed, 202 insertions, 0 deletions
diff --git a/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/servlets/SignNowServlet.java b/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/servlets/SignNowServlet.java new file mode 100644 index 00000000..58ce0167 --- /dev/null +++ b/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/servlets/SignNowServlet.java @@ -0,0 +1,202 @@ +package at.gv.egiz.pdfas.web.servlets; + +import java.io.IOException; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import at.gv.egiz.pdfas.common.exceptions.PDFASError; +import at.gv.egiz.pdfas.web.config.WebConfiguration; +import at.gv.egiz.pdfas.web.exception.PdfAsWebException; +import at.gv.egiz.pdfas.web.helper.PdfAsHelper; +import at.gv.egiz.pdfas.web.helper.PdfAsParameterExtractor; +import at.gv.egiz.pdfas.web.stats.StatisticEvent; +import at.gv.egiz.pdfas.web.stats.StatisticFrontend; +import at.gv.egiz.pdfas.web.stats.StatisticEvent.Status; + +public class SignNowServlet extends HttpServlet { + + /** + * + */ + private static final long serialVersionUID = -8729046942909293640L; + + private static final Logger logger = LoggerFactory + .getLogger(SignNowServlet.class); + + /** + * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse + * response) + */ + protected void doGet(HttpServletRequest request, + HttpServletResponse response) throws ServletException, IOException { + logger.debug("Get signing request"); + + StatisticEvent statisticEvent = PdfAsHelper.getStatisticEvent(request, + response); + + try { + this.process(request, response, statisticEvent); + } catch (Exception e) { + + statisticEvent.setStatus(Status.ERROR); + statisticEvent.setException(e); + if (e instanceof PDFASError) { + statisticEvent.setErrorCode(((PDFASError) e).getCode()); + } + statisticEvent.setEndNow(); + statisticEvent.setTimestampNow(); + StatisticFrontend.getInstance().storeEvent(statisticEvent); + statisticEvent.setLogged(true); + + PdfAsHelper.setSessionException(request, response, e.getMessage(), + e); + PdfAsHelper.gotoError(getServletContext(), request, response); + } + } + + protected void doPost(HttpServletRequest request, + HttpServletResponse response) throws ServletException, IOException { + logger.debug("Get signing request"); + + StatisticEvent statisticEvent = PdfAsHelper.getStatisticEvent(request, + response); + + try { + this.process(request, response, statisticEvent); + } catch (Exception e) { + + statisticEvent.setStatus(Status.ERROR); + statisticEvent.setException(e); + if (e instanceof PDFASError) { + statisticEvent.setErrorCode(((PDFASError) e).getCode()); + } + statisticEvent.setEndNow(); + statisticEvent.setTimestampNow(); + StatisticFrontend.getInstance().storeEvent(statisticEvent); + statisticEvent.setLogged(true); + + PdfAsHelper.setSessionException(request, response, e.getMessage(), + e); + PdfAsHelper.gotoError(getServletContext(), request, response); + } + } + + protected void process(HttpServletRequest request, + HttpServletResponse response, StatisticEvent statisticEvent) throws Exception { + + String connector = PdfAsHelper.getConnector(request); + + if (connector == null) { + connector = PdfAsParameterExtractor.getConnector(request); + } + + if (connector == null) { + throw new PdfAsWebException("No connector defined signature"); + } + + String transactionId = PdfAsHelper.getTransactionid(request); + + byte[] pdfData = PdfAsHelper.getPdfData(request); + + if (pdfData == null) { + throw new PdfAsWebException("No pdf data available"); + } + + PdfAsHelper.clearPdfData(request); + + String positioningString = PdfAsHelper.buildPosString(request, response); + logger.debug("Build position string: {}", positioningString); + + // IPlainSigner signer; + if (connector.equals("bku") || connector.equals("onlinebku") + || connector.equals("mobilebku")) { + // start asynchronous signature creation + + if (connector.equals("bku")) { + if (WebConfiguration.getLocalBKUURL() == null) { + throw new PdfAsWebException( + "Invalid connector bku is not supported"); + } + } + + if (connector.equals("onlinebku")) { + if (WebConfiguration.getLocalBKUURL() == null) { + throw new PdfAsWebException( + "Invalid connector onlinebku is not supported"); + } + } + + if (connector.equals("mobilebku")) { + if (WebConfiguration.getLocalBKUURL() == null) { + throw new PdfAsWebException( + "Invalid connector mobilebku is not supported"); + } + } + + PdfAsHelper.setStatisticEvent(request, response, statisticEvent); + + PdfAsHelper.startSignature(request, response, getServletContext(), + pdfData, connector, + positioningString, + transactionId, PdfAsHelper.getSignatureType(request), + PdfAsHelper.getPreProcessorMap(request), + PdfAsHelper.getOverwriteMap(request)); + return; + } else if (connector.equals("jks") || connector.equals("moa")) { + // start synchronous siganture creation + + if (connector.equals("jks")) { + + String keyIdentifier = PdfAsHelper.getKeyIdentifier(request); + + boolean ksEnabled = false; + + if (keyIdentifier != null) { + ksEnabled = WebConfiguration + .getKeystoreEnabled(keyIdentifier); + } else { + ksEnabled = WebConfiguration.getKeystoreDefaultEnabled(); + } + + if (!ksEnabled) { + if (keyIdentifier != null) { + throw new PdfAsWebException("JKS connector [" + + keyIdentifier + "] disabled or not existing."); + } else { + throw new PdfAsWebException( + "DEFAULT JKS connector disabled."); + } + } + } + + if (connector.equals("moa")) { + if (!WebConfiguration.getMOASSEnabled()) { + throw new PdfAsWebException( + "Invalid connector moa is not supported"); + } + } + + byte[] pdfSignedData = PdfAsHelper.synchornousSignature(request, + response, pdfData); + PdfAsHelper.setSignedPdf(request, response, pdfSignedData); + + statisticEvent.setStatus(Status.OK); + statisticEvent.setEndNow(); + statisticEvent.setTimestampNow(); + StatisticFrontend.getInstance().storeEvent(statisticEvent); + statisticEvent.setLogged(true); + + PdfAsHelper.gotoProvidePdf(getServletContext(), request, response); + return; + } else { + throw new PdfAsWebException("Invalid connector (bku | moa | jks)"); + } + + } +} |