aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/at/knowcenter/wag/egov/egiz/web/servlets/DataURLServlet.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/at/knowcenter/wag/egov/egiz/web/servlets/DataURLServlet.java')
-rw-r--r--src/main/java/at/knowcenter/wag/egov/egiz/web/servlets/DataURLServlet.java253
1 files changed, 154 insertions, 99 deletions
diff --git a/src/main/java/at/knowcenter/wag/egov/egiz/web/servlets/DataURLServlet.java b/src/main/java/at/knowcenter/wag/egov/egiz/web/servlets/DataURLServlet.java
index 72f7c2d..2844c6d 100644
--- a/src/main/java/at/knowcenter/wag/egov/egiz/web/servlets/DataURLServlet.java
+++ b/src/main/java/at/knowcenter/wag/egov/egiz/web/servlets/DataURLServlet.java
@@ -4,11 +4,11 @@
package at.knowcenter.wag.egov.egiz.web.servlets;
import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletContext;
@@ -16,26 +16,31 @@ 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 at.gv.egiz.pdfas.exceptions.framework.SignatorException;
+import at.gv.egiz.pdfas.framework.SignatorFactory;
+import at.gv.egiz.pdfas.framework.signator.Signator;
+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.web.helper.SignServletHelper;
+import at.gv.egiz.pdfas.web.helper.TempDirHelper;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import at.knowcenter.wag.egov.egiz.PdfASID;
+import at.knowcenter.wag.egov.egiz.exceptions.ConnectorException;
+import at.knowcenter.wag.egov.egiz.exceptions.InvalidIDException;
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.exceptions.SignatorFactoryException;
import at.knowcenter.wag.egov.egiz.pdf.SignatureHolder;
import at.knowcenter.wag.egov.egiz.sig.SignatureResponse;
import at.knowcenter.wag.egov.egiz.sig.connectors.ConnectorChooser;
import at.knowcenter.wag.egov.egiz.sig.connectors.LocalConnector;
import at.knowcenter.wag.egov.egiz.sig.connectors.bku.BKUPostConnection;
-import at.knowcenter.wag.egov.egiz.sig.connectors.bku.EnvelopedBase64BKUConnector;
-import at.knowcenter.wag.egov.egiz.sig.connectors.bku.LocRefDetachedBKUConnector;
import at.knowcenter.wag.egov.egiz.web.FormFields;
import at.knowcenter.wag.egov.egiz.web.LocalRequest;
-import at.knowcenter.wag.egov.egiz.web.SessionAttributes;
-import at.knowcenter.wag.egov.egiz.web.SessionInformation;
/**
* @author wprinz
@@ -71,9 +76,10 @@ public class DataURLServlet extends HttpServlet
}
protected void dispatchToResults(List results, HttpServletRequest request,
- HttpServletResponse response) throws ServletException, IOException
+ HttpServletResponse response, String backToListURL) throws ServletException, IOException
{
request.setAttribute("results", results);
+ request.setAttribute("btlurl", backToListURL);
dispatch(request, response, "/jsp/results.jsp");
}
@@ -85,122 +91,171 @@ public class DataURLServlet extends HttpServlet
{
log.debug("Data URL is accessed."); //$NON-NLS-1$
- HttpSession session = request.getSession(false);
- if (session == null)
+ try
{
- String msg = "There is no session associated with this request."; //$NON-NLS-1$
- log.error(msg);
- throw new ServletException(msg);
- }
+ Object sessionObject = SessionHelper.getSession(request);
+
+ checkRequestCharacterEncoding(request);
+
+ if (sessionObject instanceof SignSessionInformation)
+ {
+ SignSessionInformation si = (SignSessionInformation)sessionObject;
+ processSign(request, response, si);
+ }
+ else
+ {
+ VerifySessionInformation si = (VerifySessionInformation) sessionObject;
+ processVerify(request, response, si);
+ }
- SessionInformation si = (SessionInformation) session.getAttribute(SessionAttributes.ATTRIBUTE_SESSION_INFORMATION);
- if (si == null)
+ }
+ catch (PresentableException e)
{
- String msg = "The session is not found or no longer valid."; //$NON-NLS-1$
- log.error(msg);
- throw new ServletException(msg);
+ log.error(e);
+ SignServlet.prepareDispatchToErrorPage(e, request);
+ dispatch(request, response, "/jsp/error.jsp");
}
- try
+ log.debug("DataURL access finished."); //$NON-NLS-1$
+ }
+
+ protected void checkRequestCharacterEncoding(HttpServletRequest request) throws UnsupportedEncodingException
+ {
+ log.debug("Request character encoding = " + request.getCharacterEncoding()); //$NON-NLS-1$
+// if (request.getCharacterEncoding() == null || request.getCharacterEncoding().equals("UTF-8")) //$NON-NLS-1$
+ if (request.getCharacterEncoding() == null || request.getCharacterEncoding().length() <= 0) //$NON-NLS-1$
+ {
+ log.error("The BKU didn't set a character encoding for the request."); //$NON-NLS-1$
+
+ log.warn("Manually setting character encoding to UTF-8"); //$NON-NLS-1$
+ request.setCharacterEncoding("UTF-8"); //$NON-NLS-1$
+ }
+ }
+
+ protected boolean isNullResponse(String xml_response)
+ {
+ return xml_response.indexOf("NullOperationResponse") >= 0;
+ }
+
+ protected void processSign(HttpServletRequest request, HttpServletResponse response, SignSessionInformation si) throws ServletException, IOException, ConnectorException, SignatorException, SignatorFactoryException
+ {
+ log.trace("processSign");
+
+ String xml_response = request.getParameter("XMLResponse"); //$NON-NLS-1$
+ log.debug("xml_response = " + xml_response); //$NON-NLS-1$
+
+ if (isNullResponse(xml_response))
{
- log.debug("Request character encoding = " + request.getCharacterEncoding()); //$NON-NLS-1$
- if (request.getCharacterEncoding() == null || request.getCharacterEncoding().equals("UTF-8")) //$NON-NLS-1$
- {
- log.error("The BKU didn't set a character encoding for the request."); //$NON-NLS-1$
+ log.debug("Received a NullOperationResponse -> answering with the first request."); //$NON-NLS-1$
- log.warn("Manually setting character encoding to UTF-8"); //$NON-NLS-1$
- request.setCharacterEncoding("UTF-8"); //$NON-NLS-1$
- }
+ assert si.outputAvailable == false;
+ assert si.response_properties == null;
+
+ log.debug("There are still requests to be performed -> answering with request."); //$NON-NLS-1$
- String xml_response = request.getParameter("XMLResponse"); //$NON-NLS-1$
- log.debug("xml_response = " + xml_response); //$NON-NLS-1$
+ LocalRequest local_request = si.localRequest;
- if (isNullResponse(xml_response))
- {
- log.debug("Received a NullOperationResponse -> answering with the first request."); //$NON-NLS-1$
+ String request_string = local_request.getRequestString();
- assert si.current_operation == 0;
- }
- else
+ response.setContentType("text/xml");
+ response.setCharacterEncoding("UTF-8");
+ response.getWriter().println(request_string);
+ }
+ else
+ {
+ log.debug("Recieved a normal response -> storing the response."); //$NON-NLS-1$
+
+ Properties response_properties = new Properties();
+ response_properties.setProperty(BKUPostConnection.RESPONSE_STRING_KEY, xml_response);
+ si.response_properties = response_properties;
+
+ log.debug("All requests have been processed -> processing the responses."); //$NON-NLS-1$
+
+ // Sign
+
+ if (!si.outputAvailable)
{
- log.debug("Recieved a normal response -> storing the response."); //$NON-NLS-1$
+ LocalConnector c = ConnectorChooser.chooseLocalConnectorForSign(si.connector, si.type, "loc ref content not needed here"); //$NON-NLS-1$
+
+ si.si.setSignSignatureObject(c.analyzeSignResponse(si.response_properties));
- Properties response_properties = new Properties();
- response_properties.setProperty(BKUPostConnection.RESPONSE_STRING_KEY, xml_response);
- si.response_properties[si.current_operation] = response_properties;
+ PdfASID algorithm = FormFields.translateSignatureModeToPdfASID(si.mode);
+ Signator signator = SignatorFactory.createSignator(algorithm);
- si.current_operation++;
+ si.output = TempDirHelper.createTempDataSink(si.filename + "_signed.pdf");
+
+ signator.finishSign(si.si, si.output);
+
+ si.outputAvailable = true;
}
- if (si.current_operation < si.requests.length)
- {
- log.debug("There are still requests to be performed -> answering with request #" + si.current_operation); //$NON-NLS-1$
+ SignServletHelper.returnSignResponse(si, response);
- LocalRequest local_request = si.requests[si.current_operation];
+ }
+ }
+
+ protected void processVerify(HttpServletRequest request, HttpServletResponse response, VerifySessionInformation si) throws ServletException, IOException, ConnectorException, InvalidIDException
+ {
+ log.trace("processVerify");
+
+ String xml_response = request.getParameter("XMLResponse"); //$NON-NLS-1$
+ log.debug("xml_response = " + xml_response); //$NON-NLS-1$
- String request_string = local_request.getRequestString();
+ if (isNullResponse(xml_response))
+ {
+ log.debug("Received a NullOperationResponse -> answering with the first request."); //$NON-NLS-1$
- response.setContentType("text/xml");
- response.setCharacterEncoding("UTF-8");
- response.getWriter().println(request_string);
- }
- else
- {
- log.debug("All requests have been processed -> processing the responses."); //$NON-NLS-1$
+ assert si.currentLocalOperation.current_operation == 0;
+ }
+ else
+ {
+ log.debug("Recieved a normal response -> storing the response."); //$NON-NLS-1$
- if (si.application.equals("sign"))
- {
- // Sign
-
- if (si.sign_result == null)
- {
- LocalConnector c = ConnectorChooser.chooseLocalConnectorForSign(si.connector, si.type, "loc ref content not needed here"); //$NON-NLS-1$
+ Properties response_properties = new Properties();
+ response_properties.setProperty(BKUPostConnection.RESPONSE_STRING_KEY, xml_response);
- si.iui.signed_signature_object = c.analyzeSignResponse(si.response_properties[0]);
+ si.currentLocalOperation.finishCurrentOperation(response_properties);
+ }
- PdfASID algorithm = FormFields.translateSignatureModeToPdfASID(si.mode);
- Signator signator = SignatorFactory.createSignator(algorithm);
+ if (!si.currentLocalOperation.isFinished())
+ {
+ log.debug("There are still requests to be performed -> answering with request #" + si.currentLocalOperation.current_operation); //$NON-NLS-1$
- si.sign_result = signator.finishSign(si.iui);
- }
+ LocalRequest local_request = si.currentLocalOperation.getCurrentLocalRequest();
- SignServlet.returnSignResponse(si, response);
- }
- else
+ String request_string = local_request.getRequestString();
+
+ response.setContentType("text/xml");
+ response.setCharacterEncoding("UTF-8");
+ response.getWriter().println(request_string);
+ }
+ else
+ {
+ log.debug("All requests have been processed -> processing the responses."); //$NON-NLS-1$
+
+
+ List results = new ArrayList();
+
+ for (int i = 0; i < si.currentLocalOperation.response_properties.length; i++)
{
- // Verify
+ SignatureHolder sh = (SignatureHolder) si.currentLocalOperation.holders_to_be_verified.get(i);
+
+ PdfASID sig_kz = sh.getSignatureObject().getKZ();
+ String sig_id = sh.getSignatureObject().getSignationIds();
- List results = new ArrayList();
-
- for (int i = 0; i < si.response_properties.length; i++)
- {
- SignatureHolder sh = (SignatureHolder) si.signature_holders.get(i);
-
- PdfASID sig_kz = sh.getSignatureObject().getKZ();
- String sig_id = sh.getSignatureObject().getSignationIds();
-
- LocalConnector c = ConnectorChooser.chooseLocalConnectorForVerify(si.connector, sig_kz, sig_id, si.type, "loc ref content not needed here"); //$NON-NLS-1$
-
- SignatureResponse sig_resp = c.analyzeVerifyResponse(si.response_properties[i]);
- results.add(sig_resp);
- }
-
- dispatchToResults(results, request, response);
+ LocalConnector c = ConnectorChooser.chooseLocalConnectorForVerify(si.connector, sig_kz, sig_id, si.type, "loc ref content not needed here"); //$NON-NLS-1$
+
+ SignatureResponse sig_resp = c.analyzeVerifyResponse(si.currentLocalOperation.response_properties[i]);
+ results.add(sig_resp);
}
- }
- }
- catch (PresentableException e)
- {
- log.error(e);
- SignServlet.prepareDispatchToErrorPage(e, request);
- dispatch(request, response, "/jsp/error.jsp");
- }
+
+ si.currentLocalOperation = null;
- log.debug("DataURL access finished."); //$NON-NLS-1$
- }
+ URL btlURL = new URL(request.getScheme(), request.getServerName(), request.getServerPort(), request.getContextPath() + "/jsp/verifylist.jsp");
+ String backToListURL = response.encodeURL(btlURL.toString());
+
+ dispatchToResults(results, request, response, backToListURL);
+ }
- protected boolean isNullResponse(String xml_response)
- {
- return xml_response.indexOf("NullOperationResponse") >= 0;
}
}