aboutsummaryrefslogtreecommitdiff
path: root/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/servlets
diff options
context:
space:
mode:
authorAndreas Fitzek <andreas.fitzek@iaik.tugraz.at>2015-07-14 13:27:56 +0200
committerAndreas Fitzek <andreas.fitzek@iaik.tugraz.at>2015-07-14 13:27:56 +0200
commit030ad8ea8455922ad59c095d3a9ecbfc462ff69f (patch)
tree3fb0ab24b8432dae25efab6ef3e3b77bd623b1d5 /pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/servlets
parent38a852e11c1edd313ab0882ac7bda00a82546fbb (diff)
downloadpdf-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')
-rw-r--r--pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/servlets/ExternSignServlet.java62
-rw-r--r--pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/servlets/PDFPositioningDataServlet.java70
-rw-r--r--pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/servlets/SignNowServlet.java202
3 files changed, 326 insertions, 8 deletions
diff --git a/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/servlets/ExternSignServlet.java b/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/servlets/ExternSignServlet.java
index 9e217058..a06177e3 100644
--- a/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/servlets/ExternSignServlet.java
+++ b/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/servlets/ExternSignServlet.java
@@ -26,6 +26,7 @@ package at.gv.egiz.pdfas.web.servlets;
import java.io.File;
import java.io.IOException;
import java.util.List;
+import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
@@ -289,8 +290,10 @@ public class ExternSignServlet extends HttpServlet {
HttpServletResponse response, byte[] pdfData, StatisticEvent statisticEvent) throws Exception {
// Get Connector
String connector = PdfAsParameterExtractor.getConnector(request);
+ PdfAsHelper.setConnector(request, connector);
String transactionId = PdfAsParameterExtractor.getTransactionId(request);
+ PdfAsHelper.setTransactionid(request, transactionId);
statisticEvent.setFilesize(pdfData.length);
statisticEvent.setProfileId(null);
@@ -329,8 +332,25 @@ public class ExternSignServlet extends HttpServlet {
PdfAsHelper.setSignatureDataHash(request, pdfDataHash);
logger.debug("Storing signatures data hash: " + pdfDataHash);
+ boolean manualPositioning = PdfAsParameterExtractor.isUserPositioning(request);
+
logger.debug("Starting signature creation with: " + connector);
+ String sigType = PdfAsParameterExtractor
+ .getSigType(request);
+ PdfAsHelper.setSignatureType(request, sigType);
+
+ Map<String, String> preProcessorMap = PdfAsParameterExtractor.getPreProcessorMap(request);
+ PdfAsHelper.setPreProcessorMap(request, preProcessorMap);
+
+ Map<String, String> overwriteMap = PdfAsParameterExtractor.getOverwriteMap(request);
+ PdfAsHelper.setOverwriteMap(request, overwriteMap);
+
+ String keyIdentifier = PdfAsParameterExtractor.getKeyIdentifier(request);
+ PdfAsHelper.setKeyIdentifier(request, keyIdentifier);
+
+ PdfAsHelper.setStatisticEvent(request, response, statisticEvent);
+
//IPlainSigner signer;
if (connector.equals("bku") || connector.equals("onlinebku") || connector.equals("mobilebku")) {
// start asynchronous signature creation
@@ -351,21 +371,33 @@ public class ExternSignServlet extends HttpServlet {
if(WebConfiguration.getLocalBKUURL() == null) {
throw new PdfAsWebException("Invalid connector mobilebku is not supported");
}
- }
+ }
- PdfAsHelper.setStatisticEvent(request, response, statisticEvent);
+ if(manualPositioning) {
+ // store pdf data
+ // redirect to viewer html
+ String token = PdfAsHelper.storePdfData(pdfData, request);
+
+ String pdfDataUrl = PdfAsHelper.generatePositioningURL(token, request, response);
+
+ if(pdfDataUrl != null) {
+ response.sendRedirect(response.encodeRedirectURL(pdfDataUrl));
+ return;
+ } else {
+ // remove Pdf data form session again!
+ PdfAsHelper.getPdfData(token, request);
+ }
+ }
PdfAsHelper.startSignature(request, response, getServletContext(), pdfData, connector,
- PdfAsHelper.buildPosString(request, response), transactionId, PdfAsParameterExtractor
- .getSigType(request), PdfAsParameterExtractor.getPreProcessorMap(request),
- PdfAsParameterExtractor.getOverwriteMap(request));
+ PdfAsHelper.buildPosString(request, response), transactionId, sigType,
+ preProcessorMap,
+ overwriteMap);
return;
} else if (connector.equals("jks") || connector.equals("moa")) {
// start synchronous siganture creation
if(connector.equals("jks")) {
-
- String keyIdentifier = PdfAsParameterExtractor.getKeyIdentifier(request);
boolean ksEnabled = false;
@@ -390,7 +422,21 @@ public class ExternSignServlet extends HttpServlet {
}
}
-
+ if(manualPositioning) {
+ // store pdf data
+ // redirect to viewer html
+ String token = PdfAsHelper.storePdfData(pdfData, request);
+
+ String pdfDataUrl = PdfAsHelper.generatePositioningURL(token, request, response);
+
+ if(pdfDataUrl != null) {
+ response.sendRedirect(response.encodeRedirectURL(pdfDataUrl));
+ return;
+ } else {
+ // remove Pdf data form session again!
+ PdfAsHelper.getPdfData(token, request);
+ }
+ }
byte[] pdfSignedData = PdfAsHelper.synchornousSignature(request,
response, pdfData);
diff --git a/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/servlets/PDFPositioningDataServlet.java b/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/servlets/PDFPositioningDataServlet.java
new file mode 100644
index 00000000..95307c9c
--- /dev/null
+++ b/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/servlets/PDFPositioningDataServlet.java
@@ -0,0 +1,70 @@
+package at.gv.egiz.pdfas.web.servlets;
+
+import java.io.IOException;
+import java.io.OutputStream;
+
+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.PdfAsException;
+import at.gv.egiz.pdfas.web.helper.PdfAsHelper;
+
+public class PDFPositioningDataServlet extends HttpServlet {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = -8729046942909293640L;
+
+ public static final String PARAM_TOKEN = "token";
+
+ private static final Logger logger = LoggerFactory
+ .getLogger(PDFPositioningDataServlet.class);
+
+ /**
+ * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
+ * response)
+ */
+ protected void doGet(HttpServletRequest request,
+ HttpServletResponse response) throws ServletException, IOException {
+ this.process(request, response);
+ }
+
+ protected void process(HttpServletRequest request,
+ HttpServletResponse response) throws ServletException, IOException {
+ try {
+ logger.debug("Access to pdf data");
+ String token = request.getParameter(PARAM_TOKEN);
+
+ if (token == null) {
+ logger.warn("No access token provided");
+ throw new PdfAsException("No access token provided");
+ }
+
+ logger.debug("Access to pdf data with token: {}", token);
+
+ byte[] pdfData = PdfAsHelper.getPdfData(request);
+
+ if(pdfData == null) {
+ logger.warn("No PDF Data available or token does not match");
+ throw new PdfAsException("No PDF Data available");
+ }
+
+ response.setContentType("application/pdf");
+ OutputStream os = response.getOutputStream();
+ os.write(pdfData);
+ os.close();
+ } catch (Throwable e) {
+ PdfAsHelper.clearPdfData(request);
+ logger.error("Failed to access pdf data for positioning!");
+ PdfAsHelper.setSessionException(request, response, e.getMessage(),
+ e);
+ PdfAsHelper.gotoError(getServletContext(), request, response);
+ }
+ }
+}
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)");
+ }
+
+ }
+}