aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/at/knowcenter/wag/egov/egiz/web
diff options
context:
space:
mode:
authornetconomy <netconomy@7b5415b0-85f9-ee4d-85bd-d5d0c3b42d1c>2007-08-17 06:10:56 +0000
committernetconomy <netconomy@7b5415b0-85f9-ee4d-85bd-d5d0c3b42d1c>2007-08-17 06:10:56 +0000
commit3d982813b34f6f230baf4a467cdc37ec92a77595 (patch)
tree85319d39cee2ded1bb7a2b2dd9e8ea37e3778248 /src/main/java/at/knowcenter/wag/egov/egiz/web
parent07f6c8f33b2d700276fe6ec6339ff836c8710131 (diff)
downloadpdf-as-3-3d982813b34f6f230baf4a467cdc37ec92a77595.tar.gz
pdf-as-3-3d982813b34f6f230baf4a467cdc37ec92a77595.tar.bz2
pdf-as-3-3d982813b34f6f230baf4a467cdc37ec92a77595.zip
Performance
git-svn-id: https://joinup.ec.europa.eu/svn/pdf-as/trunk@167 7b5415b0-85f9-ee4d-85bd-d5d0c3b42d1c
Diffstat (limited to 'src/main/java/at/knowcenter/wag/egov/egiz/web')
-rw-r--r--src/main/java/at/knowcenter/wag/egov/egiz/web/AsynchronousDataResponder.java240
-rw-r--r--src/main/java/at/knowcenter/wag/egov/egiz/web/AsynchronousRedirectResponder.java314
-rw-r--r--src/main/java/at/knowcenter/wag/egov/egiz/web/LocalRequestHelper.java324
-rw-r--r--src/main/java/at/knowcenter/wag/egov/egiz/web/PdfASServletContextListener.java18
-rw-r--r--src/main/java/at/knowcenter/wag/egov/egiz/web/SessionInformation.java21
-rw-r--r--src/main/java/at/knowcenter/wag/egov/egiz/web/servlets/DataURLServlet.java253
-rw-r--r--src/main/java/at/knowcenter/wag/egov/egiz/web/servlets/RetrieveSignatureDataServlet.java133
-rw-r--r--src/main/java/at/knowcenter/wag/egov/egiz/web/servlets/SignPreviewServlet.java39
-rw-r--r--src/main/java/at/knowcenter/wag/egov/egiz/web/servlets/SignServlet.java373
-rw-r--r--src/main/java/at/knowcenter/wag/egov/egiz/web/servlets/VerifyPreviewServlet.java155
-rw-r--r--src/main/java/at/knowcenter/wag/egov/egiz/web/servlets/VerifyServlet.java143
11 files changed, 1032 insertions, 981 deletions
diff --git a/src/main/java/at/knowcenter/wag/egov/egiz/web/AsynchronousDataResponder.java b/src/main/java/at/knowcenter/wag/egov/egiz/web/AsynchronousDataResponder.java
index 52846f5..7bba97b 100644
--- a/src/main/java/at/knowcenter/wag/egov/egiz/web/AsynchronousDataResponder.java
+++ b/src/main/java/at/knowcenter/wag/egov/egiz/web/AsynchronousDataResponder.java
@@ -42,6 +42,8 @@ import at.knowcenter.wag.egov.egiz.sig.connectors.BKUPostConnection;
* Servlet that responds to the data post requests of the local service (e.g.
* BKU).
*
+ * @deprecated
+ *
* @author wprinz
*/
public class AsynchronousDataResponder extends HttpServlet
@@ -52,123 +54,123 @@ public class AsynchronousDataResponder extends HttpServlet
*/
private static final long serialVersionUID = -4992297156381763174L;
- /**
- * The logger definition.
- */
- private static final Logger logger_ = ConfigLogger.getLogger(AsynchronousDataResponder.class);
-
- protected void doGet(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException
- {
- logger_.debug("AsyncDataResp GET REQUEST.");
- super.doGet(arg0, arg1);
- }
-
- protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
- {
- logger_.debug("AsyncDataResp !!!!!!!!!!!!!!!!!!!!!!");
-
- HttpSession session = request.getSession(false);
- if (session == null)
- {
- throw new ServletException("There is no session associated with this request.");
- }
-
- // String session_id_string = request.getParameter("session");
- // if (session_id_string == null)
- // {
- // throw new ServletException("The session parameter is missing.");
- // }
-
- SessionInformation si = (SessionInformation) session.getAttribute(SessionAttributes.ATTRIBUTE_SESSION_INFORMATION);
- // long session_id = Long.parseLong(session_id_string);
- // SessionInformation si = SessionTable.get(session_id);
- if (si == null)
- {
- throw new ServletException("The session is not found or no longer valid.");
- }
-
- // InputStream is = request.getInputStream();
- // byte [] data = new byte[request.getContentLength()];
- // is.read(data);
- // is.close();
- // String enc = request.getCharacterEncoding();
- // String ct = request.getContentType();
- // Enumeration enum = request.getHeaderNames();
- //
- // String dat = new String(data, "US-ASCII");
- // // dat looks like: XMLResponse=blablabla ...
- // // so the actual XMLResponse begins after the =
- // String resp = URLDecoder.decode(dat, "UTF-8");
-
- logger_.debug("Answer from local service: content-type = '" + request.getContentType() + "', character encoding = '" + request.getCharacterEncoding() + "'");
-
- // .getParameter will use the character encoding specified by the
- // content-type header.
- // Unfortunately BKU forgets to specify a chatacter encoding.
- // Therefor, .getParameter will assume US-ASCII or something.
- // ==> we explicitely set UTF-8
- if (request.getCharacterEncoding() == null)
- {
- request.setCharacterEncoding("UTF-8");
- logger_.debug(" no character encoding specified - set to UTF-8");
- }
-
- logger_.debug("AsyncDataResponder: si.current_operation = " + si.current_operation);
-
- String resp_string = request.getParameter("XMLResponse");
- if (resp_string == null)
- {
- logger_.debug("response String is null => trying multipart form");
-
- DiskFileItemFactory fif = new DiskFileItemFactory();
- fif.setRepository(SettingsReader.getTemporaryDirectory());
- ServletFileUpload sfu = new ServletFileUpload(fif);
-
- try
- {
- List items = sfu.parseRequest(request);
-
- for (int i = 0; i < items.size(); i++)
- {
- FileItem item = (FileItem) items.get(i);
- logger_.debug("item = " + item.getFieldName());
-
- if (item.getFieldName().equals("XMLResponse"))
- {
- resp_string = item.getString("UTF-8");
- }
- }
- }
- catch (FileUploadException e)
- {
- throw new ServletException("File Upload exception. cannot parse POST data");
- }
-
- }
-
- // TODO hotfix
- if (logger_.isDebugEnabled())
- {
- Enumeration header_names = request.getHeaderNames();
- while (header_names.hasMoreElements())
- {
- String header_name = (String)header_names.nextElement();
- String header_value = request.getHeader(header_name);
- logger_.debug("header: name = " + header_name + ", value = " +header_value);
- }
- }
- String user_agent = request.getHeader("User-Agent");
- logger_.debug("User-Agent header = " + user_agent);
- Properties response_properties = new Properties();
- BKUPostConnection.parseBKUVersion(user_agent, response_properties);
- response_properties.setProperty("response_string", resp_string);
- si.response_properties[si.current_operation] = response_properties; //request.getParameter("XMLResponse");
- //logger_.debug("AsyncDataResponder: si.response_string[si.current_operation] = " + si.response_string[si.current_operation]);
-
- si.current_operation++;
-
- si.finished = true;
-
- LocalRequestHelper.formatBKUOkResponse(response);
- }
+// /**
+// * The logger definition.
+// */
+// private static final Logger logger_ = ConfigLogger.getLogger(AsynchronousDataResponder.class);
+//
+// protected void doGet(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException
+// {
+// logger_.debug("AsyncDataResp GET REQUEST.");
+// super.doGet(arg0, arg1);
+// }
+//
+// protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
+// {
+// logger_.debug("AsyncDataResp !!!!!!!!!!!!!!!!!!!!!!");
+//
+// HttpSession session = request.getSession(false);
+// if (session == null)
+// {
+// throw new ServletException("There is no session associated with this request.");
+// }
+//
+// // String session_id_string = request.getParameter("session");
+// // if (session_id_string == null)
+// // {
+// // throw new ServletException("The session parameter is missing.");
+// // }
+//
+// SessionInformation si = (SessionInformation) session.getAttribute(SessionAttributes.ATTRIBUTE_SESSION_INFORMATION);
+// // long session_id = Long.parseLong(session_id_string);
+// // SessionInformation si = SessionTable.get(session_id);
+// if (si == null)
+// {
+// throw new ServletException("The session is not found or no longer valid.");
+// }
+//
+// // InputStream is = request.getInputStream();
+// // byte [] data = new byte[request.getContentLength()];
+// // is.read(data);
+// // is.close();
+// // String enc = request.getCharacterEncoding();
+// // String ct = request.getContentType();
+// // Enumeration enum = request.getHeaderNames();
+// //
+// // String dat = new String(data, "US-ASCII");
+// // // dat looks like: XMLResponse=blablabla ...
+// // // so the actual XMLResponse begins after the =
+// // String resp = URLDecoder.decode(dat, "UTF-8");
+//
+// logger_.debug("Answer from local service: content-type = '" + request.getContentType() + "', character encoding = '" + request.getCharacterEncoding() + "'");
+//
+// // .getParameter will use the character encoding specified by the
+// // content-type header.
+// // Unfortunately BKU forgets to specify a chatacter encoding.
+// // Therefor, .getParameter will assume US-ASCII or something.
+// // ==> we explicitely set UTF-8
+// if (request.getCharacterEncoding() == null)
+// {
+// request.setCharacterEncoding("UTF-8");
+// logger_.debug(" no character encoding specified - set to UTF-8");
+// }
+//
+// logger_.debug("AsyncDataResponder: si.current_operation = " + si.current_operation);
+//
+// String resp_string = request.getParameter("XMLResponse");
+// if (resp_string == null)
+// {
+// logger_.debug("response String is null => trying multipart form");
+//
+// DiskFileItemFactory fif = new DiskFileItemFactory();
+// fif.setRepository(SettingsReader.getTemporaryDirectory());
+// ServletFileUpload sfu = new ServletFileUpload(fif);
+//
+// try
+// {
+// List items = sfu.parseRequest(request);
+//
+// for (int i = 0; i < items.size(); i++)
+// {
+// FileItem item = (FileItem) items.get(i);
+// logger_.debug("item = " + item.getFieldName());
+//
+// if (item.getFieldName().equals("XMLResponse"))
+// {
+// resp_string = item.getString("UTF-8");
+// }
+// }
+// }
+// catch (FileUploadException e)
+// {
+// throw new ServletException("File Upload exception. cannot parse POST data");
+// }
+//
+// }
+//
+// // TODO hotfix - already deprecated
+// if (logger_.isDebugEnabled())
+// {
+// Enumeration header_names = request.getHeaderNames();
+// while (header_names.hasMoreElements())
+// {
+// String header_name = (String)header_names.nextElement();
+// String header_value = request.getHeader(header_name);
+// logger_.debug("header: name = " + header_name + ", value = " +header_value);
+// }
+// }
+// String user_agent = request.getHeader("User-Agent");
+// logger_.debug("User-Agent header = " + user_agent);
+// Properties response_properties = new Properties();
+// BKUPostConnection.parseBKUVersion(user_agent, response_properties);
+// response_properties.setProperty("response_string", resp_string);
+// si.response_properties[si.current_operation] = response_properties; //request.getParameter("XMLResponse");
+// //logger_.debug("AsyncDataResponder: si.response_string[si.current_operation] = " + si.response_string[si.current_operation]);
+//
+// si.current_operation++;
+//
+// si.finished = true;
+//
+// LocalRequestHelper.formatBKUOkResponse(response);
+// }
}
diff --git a/src/main/java/at/knowcenter/wag/egov/egiz/web/AsynchronousRedirectResponder.java b/src/main/java/at/knowcenter/wag/egov/egiz/web/AsynchronousRedirectResponder.java
index 58d0773..695b95c 100644
--- a/src/main/java/at/knowcenter/wag/egov/egiz/web/AsynchronousRedirectResponder.java
+++ b/src/main/java/at/knowcenter/wag/egov/egiz/web/AsynchronousRedirectResponder.java
@@ -17,188 +17,168 @@
*/
package at.knowcenter.wag.egov.egiz.web;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.servlet.RequestDispatcher;
-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.log4j.Logger;
-
-import at.knowcenter.wag.egov.egiz.PdfASID;
-import at.knowcenter.wag.egov.egiz.cfg.ConfigLogger;
-import at.knowcenter.wag.egov.egiz.exceptions.ErrorCodeException;
-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.sig.ConnectorFactory;
-import at.knowcenter.wag.egov.egiz.sig.SignatureResponse;
-import at.knowcenter.wag.egov.egiz.sig.connectors.BKUConnector;
-import at.knowcenter.wag.egov.egiz.web.servlets.SignServlet;
/**
* Servlet that responds to the redirect requests of the local service (e.g.
* BKU).
*
+ * @deprecated remove this
+ *
* @author wprinz
*/
public class AsynchronousRedirectResponder extends HttpServlet
{
-
+
/**
* SVUID.
*/
private static final long serialVersionUID = -682360466333727236L;
- /**
- * The logger definition.
- */
- private static final Logger logger_ = ConfigLogger.getLogger(AsynchronousRedirectResponder.class);
-
- protected void dispatch(HttpServletRequest request,
- HttpServletResponse response, String resource) throws ServletException, IOException
- {
- response.setContentType("text/html");
- response.setCharacterEncoding("UTF-8");
-
- RequestDispatcher disp = getServletContext().getRequestDispatcher(resource);
- disp.forward(request, response);
- }
-
- protected void dispatchToResults(List results, HttpServletRequest request,
- HttpServletResponse response) throws ServletException, IOException
- {
- request.setAttribute("results", results);
- dispatch(request, response, "/jsp/results.jsp");
- }
-
- protected void dispatchToRedirectRefreshPage (HttpServletRequest request,
- HttpServletResponse response, String refresh_url) throws ServletException, IOException
- {
- request.setAttribute("refresh_url", refresh_url);
- dispatch(request, response, LocalRequestHelper.REDIRECT_REFRESH_PAGE_JSP);
- }
-
- protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
- {
- logger_.debug("AsyncRedirResp");
-
- SessionInformation si = null;
-
- HttpSession session = null;
- try
- {
- session = request.getSession(false);
- //String session_id_string = request.getParameter("session");
- if (session == null)
- {
- throw new ErrorCodeException(600, "The session is missing.");
- }
-
- si = (SessionInformation) session.getAttribute(SessionAttributes.ATTRIBUTE_SESSION_INFORMATION);
-// long session_id = Long.parseLong(session_id_string);
-// si = SessionTable.get(session_id);
- if (si == null)
- {
- throw new ErrorCodeException(600, "The session is not found or is no longer valid.");
- }
-
- }
- catch (PresentableException e)
- {
- e.printStackTrace();
- SignServlet.prepareDispatchToErrorPage(e, request);
- dispatch(request, response, "/jsp/error.jsp");
-
- return;
- }
-
- try
- {
- if (si.finished == false)
- {
- String url = request.getRequestURL().toString();
- logger_.debug("RequestURL = " + url);
- String refresh_url = response.encodeURL(url);
- logger_.debug("RefreshURL = " + refresh_url);
- dispatchToRedirectRefreshPage(request, response, refresh_url);
- return;
- }
-
- // si.finished is true, but maybe there are more requests to process.
- if (si.current_operation < si.requests.length)
- {
- si.finished = false;
-
- LocalRequestHelper.prepareDispatchToLocalConnectionPage(si.requests[si.current_operation], request, response);
- dispatch(request, response, LocalRequestHelper.LOCAL_CONNECTION_PAGE_JSP);
- return;
- }
-
- // all requests have been carried out.
-
- BKUConnector local_conn = (BKUConnector) ConnectorFactory.createConnector(si.connector);
-
- if (si.application.equals("verify"))
- {
- List results = new ArrayList();
-
- for (int i = 0; i < si.response_properties.length; i++)
- {
- SignatureResponse sig_resp = local_conn.analyzeVerifyResponse(si.response_properties[i]);
- results.add(sig_resp);
- }
-
- dispatchToResults(results, request, response);
- }
- else
- {
- //logger_.debug("AsyncRedirResponder: si.response_string[0] = " + si.response_string[0]);
- logger_.debug("AsyncRedirResponder: si.current_op = " + si.current_operation);
-
- // The response string must not be null here - otherwise finished mustn't have been set!
-// if (si.response_string[0] == null)
+// /**
+// * The logger definition.
+// */
+// private static final Logger logger_ = ConfigLogger.getLogger(AsynchronousRedirectResponder.class);
+//
+// protected void dispatch(HttpServletRequest request,
+// HttpServletResponse response, String resource) throws ServletException, IOException
+// {
+// response.setContentType("text/html");
+// response.setCharacterEncoding("UTF-8");
+//
+// RequestDispatcher disp = getServletContext().getRequestDispatcher(resource);
+// disp.forward(request, response);
+// }
+//
+// protected void dispatchToResults(List results, HttpServletRequest request,
+// HttpServletResponse response) throws ServletException, IOException
+// {
+// request.setAttribute("results", results);
+// dispatch(request, response, "/jsp/results.jsp");
+// }
+//
+// protected void dispatchToRedirectRefreshPage (HttpServletRequest request,
+// HttpServletResponse response, String refresh_url) throws ServletException, IOException
+// {
+// request.setAttribute("refresh_url", refresh_url);
+// dispatch(request, response, LocalRequestHelper.REDIRECT_REFRESH_PAGE_JSP);
+// }
+//
+// protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
+// {
+// logger_.debug("AsyncRedirResp");
+//
+// SessionInformation si = null;
+//
+// HttpSession session = null;
+// try
+// {
+// session = request.getSession(false);
+// //String session_id_string = request.getParameter("session");
+// if (session == null)
+// {
+// throw new ErrorCodeException(600, "The session is missing.");
+// }
+//
+// si = (SessionInformation) session.getAttribute(SessionAttributes.ATTRIBUTE_SESSION_INFORMATION);
+//// long session_id = Long.parseLong(session_id_string);
+//// si = SessionTable.get(session_id);
+// if (si == null)
+// {
+// throw new ErrorCodeException(600, "The session is not found or is no longer valid.");
+// }
+//
+// }
+// catch (PresentableException e)
+// {
+// e.printStackTrace();
+// SignServlet.prepareDispatchToErrorPage(e, request);
+// dispatch(request, response, "/jsp/error.jsp");
+//
+// return;
+// }
+//
+// try
+// {
+// if (si.finished == false)
+// {
+// String url = request.getRequestURL().toString();
+// logger_.debug("RequestURL = " + url);
+// String refresh_url = response.encodeURL(url);
+// logger_.debug("RefreshURL = " + refresh_url);
+// dispatchToRedirectRefreshPage(request, response, refresh_url);
+// return;
+// }
+//
+// // si.finished is true, but maybe there are more requests to process.
+// if (si.current_operation < si.requests.length)
+// {
+// si.finished = false;
+//
+// LocalRequestHelper.prepareDispatchToLocalConnectionPage(si.requests[si.current_operation], request, response);
+// dispatch(request, response, LocalRequestHelper.LOCAL_CONNECTION_PAGE_JSP);
+// return;
+// }
+//
+// // all requests have been carried out.
+//
+// BKUConnector local_conn = (BKUConnector) ConnectorFactory.createConnector(si.connector);
+//
+// if (si.application.equals("verify"))
+// {
+// List results = new ArrayList();
+//
+// for (int i = 0; i < si.response_properties.length; i++)
// {
-// String url = request.getRequestURL().toString();
-// logger_.debug("RequestURL = " + url);
-// String refresh_url = response.encodeURL(url);
-// logger_.debug("RefreshURL = " + refresh_url);
-// dispatchToRedirectRefreshPage(request, response, refresh_url);
-// return ;
+// SignatureResponse sig_resp = local_conn.analyzeVerifyResponse(si.response_properties[i]);
+// results.add(sig_resp);
// }
-
- // A download blocker may have blocked the first download.
- // So, if the user asks for the document a second time and the sign_result
- // has already been computed - don't recompute it.
- if (si.sign_result == null)
- {
- //FIXME refactor WEB
- si.iui.signed_signature_object = null; //local_conn.analyzeSignResponse(si.response_properties[0], si.type);
-
- PdfASID algorithm = FormFields.translateSignatureModeToPdfASID(si.mode);
- Signator signator = SignatorFactory.createSignator(algorithm);
-
- si.sign_result = signator.finishSign(si.iui);
- }
-
- SignServlet.returnSignResponse(si, response);
- }
-
- }
- catch (PresentableException e)
- {
- session.removeAttribute(SessionAttributes.ATTRIBUTE_SESSION_INFORMATION);
- //SessionTable.remove(si.session_id);
-
- e.printStackTrace();
- SignServlet.prepareDispatchToErrorPage(e, request);
- dispatch(request, response, "/jsp/error.jsp");
- }
-
- }
+//
+// dispatchToResults(results, request, response);
+// }
+// else
+// {
+// //logger_.debug("AsyncRedirResponder: si.response_string[0] = " + si.response_string[0]);
+// logger_.debug("AsyncRedirResponder: si.current_op = " + si.current_operation);
+//
+// // The response string must not be null here - otherwise finished mustn't have been set!
+//// if (si.response_string[0] == null)
+//// {
+//// String url = request.getRequestURL().toString();
+//// logger_.debug("RequestURL = " + url);
+//// String refresh_url = response.encodeURL(url);
+//// logger_.debug("RefreshURL = " + refresh_url);
+//// dispatchToRedirectRefreshPage(request, response, refresh_url);
+//// return ;
+//// }
+//
+// // A download blocker may have blocked the first download.
+// // So, if the user asks for the document a second time and the sign_result
+// // has already been computed - don't recompute it.
+// if (si.sign_result == null)
+// {
+// // refactor WEB
+// si.iui.signed_signature_object = null; //local_conn.analyzeSignResponse(si.response_properties[0], si.type);
+//
+// PdfASID algorithm = FormFields.translateSignatureModeToPdfASID(si.mode);
+// Signator signator = SignatorFactory.createSignator(algorithm);
+//
+// si.sign_result = signator.finishSign(si.iui);
+// }
+//
+// SignServlet.returnSignResponse(si, response);
+// }
+//
+// }
+// catch (PresentableException e)
+// {
+// session.removeAttribute(SessionAttributes.ATTRIBUTE_SESSION_INFORMATION);
+// //SessionTable.remove(si.session_id);
+//
+// e.printStackTrace();
+// SignServlet.prepareDispatchToErrorPage(e, request);
+// dispatch(request, response, "/jsp/error.jsp");
+// }
+//
+// }
}
diff --git a/src/main/java/at/knowcenter/wag/egov/egiz/web/LocalRequestHelper.java b/src/main/java/at/knowcenter/wag/egov/egiz/web/LocalRequestHelper.java
index fd47cca..8ee09dc 100644
--- a/src/main/java/at/knowcenter/wag/egov/egiz/web/LocalRequestHelper.java
+++ b/src/main/java/at/knowcenter/wag/egov/egiz/web/LocalRequestHelper.java
@@ -20,20 +20,26 @@ package at.knowcenter.wag.egov.egiz.web;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
-import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
+import at.gv.egiz.pdfas.impl.input.TextDataSourceImpl;
+import at.gv.egiz.pdfas.framework.input.DataSource;
+import at.gv.egiz.pdfas.web.CurrentLocalOperation;
+import at.gv.egiz.pdfas.web.SignSessionInformation;
+import at.gv.egiz.pdfas.web.VerifySessionInformation;
+import at.knowcenter.wag.egov.egiz.PdfAS;
+import at.knowcenter.wag.egov.egiz.cfg.SettingsReader;
+import at.knowcenter.wag.egov.egiz.exceptions.ConnectorException;
import at.knowcenter.wag.egov.egiz.exceptions.ConnectorFactoryException;
import at.knowcenter.wag.egov.egiz.exceptions.NormalizeException;
import at.knowcenter.wag.egov.egiz.exceptions.PresentableException;
+import at.knowcenter.wag.egov.egiz.exceptions.SettingsException;
import at.knowcenter.wag.egov.egiz.exceptions.SignatureException;
+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;
@@ -42,8 +48,6 @@ 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.SignSignatureObject;
import at.knowcenter.wag.egov.egiz.sig.signatureobject.SignatureObjectHelper;
-import at.knowcenter.wag.egov.egiz.tools.CodingHelper;
-import at.knowcenter.wag.egov.egiz.web.servlets.SignServlet;
/**
* Contains commonly used helper functions for the local request procedure.
@@ -66,8 +70,6 @@ public abstract class LocalRequestHelper
* The resource of the redirect refresh page jsp.
*/
public static final String REDIRECT_REFRESH_PAGE_JSP = "/jsp/redirect_refresh_page.jsp";
-
- private static Log log = LogFactory.getLog(LocalRequestHelper.class);
/**
* Sets up the local sign procedure.
@@ -79,40 +81,35 @@ public abstract class LocalRequestHelper
* @throws PresentableException
* Forwarded exception.
*/
- public static String processLocalSign(SessionInformation si,
- HttpServletRequest request, HttpServletResponse response) throws IOException, PresentableException
+ public static String processLocalSign(SignSessionInformation si, HttpServletRequest request, HttpServletResponse response) throws IOException, PresentableException
{
String host = request.getServerName(); // "129.27.153.77"
URL loc_ref_URL = new URL(request.getScheme(), host, request.getServerPort(), request.getContextPath() + "/RetrieveSignatureData");
String loc_ref_url = response.encodeURL(loc_ref_URL.toString());
-
+
LocalConnector c = ConnectorChooser.chooseLocalConnectorForSign(si.connector, si.type, loc_ref_url);
- String sign_request = c.prepareSignRequest(si.iui.signature_data);
+ String sign_request = c.prepareSignRequest(si.si.getSignatureData());
- // TODO local URL
- String local_request_url = "http://127.0.0.1:3495/http-security-layer-request";
- si.requests = new LocalRequest[1];
- si.requests[0] = new LocalRequest(local_request_url, sign_request);
- si.current_operation = 0;
- si.response_properties = new Properties[1];
- si.response_properties[0] = null;
+ String local_request_url = getLocalServiceAddress(si.type, si.connector);
+ si.localRequest = new LocalRequest(local_request_url, sign_request);
+ si.outputAvailable = false;
+ si.response_properties = null;
URL data_URL = new URL(request.getScheme(), host, request.getServerPort(), request.getContextPath() + "/DataURL");
String data_url = response.encodeURL(data_URL.toString());
request.setAttribute("local_request_url", local_request_url);
request.setAttribute("data_url", data_url);
-
+
return NULL_REQUEST_PAGE_JSP;
-
-
- // TODO make better
+
+ // TODO old code - remove
//
// LocalConnector local_conn = (LocalConnector)
// ConnectorFactory.createConnector(si.connector);
//
//
- // // FIXME refactor WEB
+ // // refactor WEB
// String document_text = "fixme"; //si.iui.document_text;
// String request_string = local_conn.prepareSignRequest(si.user_name,
// document_text, si.type);
@@ -162,39 +159,45 @@ public abstract class LocalRequestHelper
* Forwarded exception.
* @throws ConnectorFactoryException
* Forwarded exception.
+ * @throws SettingsException
+ * @throws ConnectorException
*/
- public static String processLocalVerify(SessionInformation si,
- List holders_to_verify, HttpServletRequest request,
- HttpServletResponse response) throws SignatureException, NormalizeException, IOException, ConnectorFactoryException
+ public static String processLocalVerify(VerifySessionInformation si, List holders_to_verify, HttpServletRequest request, HttpServletResponse response) throws SignatureException, NormalizeException,
+ IOException, ConnectorFactoryException, SettingsException, ConnectorException
{
- si.requests = new LocalRequest[holders_to_verify.size()];
- si.response_properties = new Properties[si.requests.length];
- si.current_operation = 0;
- si.finished = false;
+ si.currentLocalOperation = new CurrentLocalOperation();
+ si.currentLocalOperation.holders_to_be_verified = holders_to_verify;
+
+ si.currentLocalOperation.requests = new LocalRequest[holders_to_verify.size()];
+ si.currentLocalOperation.response_properties = new Properties[si.currentLocalOperation.requests.length];
+
+ si.currentLocalOperation.current_operation = 0;
+// si.finished = false;
String host = request.getServerName();
URL loc_ref_URL = new URL(request.getScheme(), host, request.getServerPort(), request.getContextPath() + "/RetrieveSignatureData");
String loc_ref_url = response.encodeURL(loc_ref_URL.toString());
- for (int i = 0; i < si.requests.length; i++)
+ for (int i = 0; i < si.currentLocalOperation.requests.length; i++)
{
SignatureHolder holder = (SignatureHolder) holders_to_verify.get(i);
SignatureObject s = holder.getSignatureObject();
- // TODO This whole processing is unnecessary here because only the mime
- // type is used.
- String text_to_be_verified = holder.getSignedText();
- SignatureData sd = null;
- 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");
- }
+ SignatureData sd = PdfAS.convertSignatureHolderToSignatureData(holder);
+// if (holder.getSignatureObject().isBinary())
+// {
+// BinarySignatureHolder bsh = (BinarySignatureHolder) holder;
+// // byte[] data = CodingHelper.decodeBase64(text_to_be_verified);
+// // TODO what about the length of the PDF? is this correct - already deprecated
+// 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");
+// }
SignSignatureObject so = SignatureObjectHelper.convertSignatureObjectToSignSignatureObject(s);
@@ -202,16 +205,15 @@ public abstract class LocalRequestHelper
String request_string = local_conn.prepareVerifyRequest(sd, so);
LocalRequest local_request = new LocalRequest("not-needed", request_string);
- si.requests[i] = local_request;
- si.response_properties[i] = null;
+ si.currentLocalOperation.requests[i] = local_request;
+ si.currentLocalOperation.response_properties[i] = null;
}
-
- // TODO read from config
- String local_request_url = "http://127.0.0.1:3495/http-security-layer-request";
+
+ String local_request_url = getLocalServiceAddress(si.type, si.connector);
URL data_URL = new URL(request.getScheme(), host, request.getServerPort(), request.getContextPath() + "/DataURL");
String data_url = response.encodeURL(data_URL.toString());
-
+
request.setAttribute("local_request_url", local_request_url);
request.setAttribute("data_url", data_url);
@@ -259,75 +261,78 @@ public abstract class LocalRequestHelper
//
// prepareDispatchToLocalConnectionPage(si.requests[0], request, response);
}
-
- /**
- * Sets up the local verify procedure.
- *
- * @param response
- * The HttpServletResponse the local request page is written to.
- * @return Returns the JSP location where the calling servlet should dispatch
- * to.
- * @throws SignatureException
- * Forwarded exception.
- * @throws NormalizeException
- * Forwarded exception.
- * @throws IOException
- * Forwarded exception.
- * @throws ConnectorFactoryException
- * Forwarded exception.
- */
- public static String processLocalVerifyForSingleSignature(SessionInformation si,
- List holders_to_verify, HttpServletRequest request,
- HttpServletResponse response) throws SignatureException, NormalizeException, IOException, ConnectorFactoryException
- {
- si.requests = new LocalRequest[1];
- si.response_properties = new Properties[1];
- si.current_operation = 0;
- si.finished = false;
-
- String host = request.getServerName();
- URL loc_ref_URL = new URL(request.getScheme(), host, request.getServerPort(), request.getContextPath() + "/RetrieveSignatureData");
- String loc_ref_url = response.encodeURL(loc_ref_URL.toString());
-
- SignatureHolder holder = (SignatureHolder) holders_to_verify.get(0);
-
- SignatureObject s = holder.getSignatureObject();
-
- // TODO This whole processing is unnecessary here because only the mime
- // type is used.
- String text_to_be_verified = holder.getSignedText();
- SignatureData sd = null;
-
- 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");
- }
-
- SignSignatureObject so = SignatureObjectHelper.convertSignatureObjectToSignSignatureObject(s);
-
- LocalConnector local_conn = ConnectorChooser.chooseLocalConnectorForVerify(si.connector, s.getKZ(), so.id, si.type, loc_ref_url);
- String request_string = local_conn.prepareVerifyRequest(sd, so);
-
- LocalRequest local_request = new LocalRequest("not-needed", request_string);
- si.requests[0] = local_request;
- si.response_properties[0] = null;
-
- // TODO read from config
- String local_request_url = "http://127.0.0.1:3495/http-security-layer-request";
-
- URL data_URL = new URL(request.getScheme(), host, request.getServerPort(), request.getContextPath() + "/DataURL");
- String data_url = response.encodeURL(data_URL.toString());
-
- request.setAttribute("local_request_url", local_request_url);
- request.setAttribute("data_url", data_url);
- return NULL_REQUEST_PAGE_JSP;
- }
+ // what is this for?
+// /**
+// * Sets up the local verify procedure.
+// *
+// * @param response
+// * The HttpServletResponse the local request page is written to.
+// * @return Returns the JSP location where the calling servlet should dispatch
+// * to.
+// * @throws SignatureException
+// * Forwarded exception.
+// * @throws NormalizeException
+// * Forwarded exception.
+// * @throws IOException
+// * Forwarded exception.
+// * @throws ConnectorFactoryException
+// * Forwarded exception.
+// * @throws SettingsException Forwarded exception.
+// */
+// public static String processLocalVerifyForSingleSignature(VerifySessionInformation si, List holders_to_verify, HttpServletRequest request, HttpServletResponse response) throws SignatureException,
+// NormalizeException, IOException, ConnectorFactoryException, SettingsException
+// {
+// si.requests = new LocalRequest[1];
+// si.response_properties = new Properties[1];
+// si.current_operation = 0;
+// si.finished = false;
+//
+// String host = request.getServerName();
+// URL loc_ref_URL = new URL(request.getScheme(), host, request.getServerPort(), request.getContextPath() + "/RetrieveSignatureData");
+// String loc_ref_url = response.encodeURL(loc_ref_URL.toString());
+//
+// SignatureHolder holder = (SignatureHolder) holders_to_verify.get(0);
+//
+// SignatureObject s = holder.getSignatureObject();
+//
+// // TODO This whole processing is unnecessary here because only the mime type is used. - already deprecated
+// // String text_to_be_verified = holder.getSignedText();
+// SignatureData sd = null;
+//
+// 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");
+// }
+//
+// SignSignatureObject so = SignatureObjectHelper.convertSignatureObjectToSignSignatureObject(s);
+//
+// LocalConnector local_conn = ConnectorChooser.chooseLocalConnectorForVerify(si.connector, s.getKZ(), so.id, si.type, loc_ref_url);
+// String request_string = local_conn.prepareVerifyRequest(sd, so);
+//
+// LocalRequest local_request = new LocalRequest("not-needed", request_string);
+// si.requests[0] = local_request;
+// si.response_properties[0] = null;
+//
+// // TODO read from config - already deprecated
+// String local_request_url = getLocalServiceAddress(si.type, si.connector);
+//
+// URL data_URL = new URL(request.getScheme(), host, request.getServerPort(), request.getContextPath() + "/DataURL");
+// String data_url = response.encodeURL(data_URL.toString());
+//
+// request.setAttribute("local_request_url", local_request_url);
+// request.setAttribute("data_url", data_url);
+//
+// return NULL_REQUEST_PAGE_JSP;
+// }
/**
* Formats the OK response from the web application back to the local BKU.
@@ -370,9 +375,8 @@ public abstract class LocalRequestHelper
* @throws NormalizeException
* Forwarded exception.
*/
- public static void prepareDispatchToLocalConnectionPage(
- LocalRequest local_request, HttpServletRequest request,
- HttpServletResponse response) throws IOException, SignatureException, NormalizeException
+ public static void prepareDispatchToLocalConnectionPage(LocalRequest local_request, HttpServletRequest request, HttpServletResponse response) throws IOException, SignatureException,
+ NormalizeException
{
response.setContentType("text/html");
response.setCharacterEncoding("UTF-8");
@@ -403,19 +407,71 @@ public abstract class LocalRequestHelper
output = output.replaceAll(">", "&gt;");
return output;
}
-
+
public static String getLocalServerAddress(HttpServletRequest request, HttpServletResponse response)
{
- String host = request.getServerName();
- URL local_server = null;
- try {
- local_server = new URL(request.getScheme(), host, request.getServerPort(), "/");
- } catch (MalformedURLException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- String loc_server = response.encodeURL(local_server.toString());
-
- return loc_server;
+ String host = request.getServerName();
+ URL local_server = null;
+ try
+ {
+ local_server = new URL(request.getScheme(), host, request.getServerPort(), "/");
+ }
+ catch (MalformedURLException e)
+ {
+ e.printStackTrace();
+ }
+ String loc_server = response.encodeURL(local_server.toString());
+
+ return loc_server;
}
+
+ /**
+ * Returns the URL for accessing the local service.
+ * <p>
+ * This information is taken from the profile and if not defined from the
+ * defaults.
+ * </p>
+ * <p>
+ * E.g. http://127.0.0.1:3495/http-security-layer-request
+ * </p>
+ *
+ * @param profile
+ * The profile to take the data from.
+ * @param device
+ * The service device to be accessed. E.g. bku.
+ * @return Returns the URL for accessing the local service.
+ * @throws SettingsException F.e.
+ */
+ public static String getLocalServiceAddress(String profile, String device) throws SettingsException
+ {
+ SettingsReader settings = SettingsReader.getInstance();
+
+ String url = getConnectorValueFromProfile(settings, profile, device + ".sign.url");
+
+ return url; //"http://127.0.0.1:3495/http-security-layer-request";
+ }
+
+ /**
+ * Reads the configuration entry given by the key, first from the given
+ * profile, if not found from the defaults.
+ *
+ * @param settings
+ * The settings.
+ * @param profile
+ * The profile.
+ * @param key
+ * The configuration key.
+ * @return Returns the configuration entry.
+ */
+ public static String getConnectorValueFromProfile(SettingsReader settings,
+ String profile, String key)
+ {
+ String value = settings.getValueFromKey("sig_obj." + profile + "." + key); //$NON-NLS-1$//$NON-NLS-2$
+ if (value == null)
+ {
+ value = settings.getValueFromKey(key);
+ }
+ return value;
+ }
+
}
diff --git a/src/main/java/at/knowcenter/wag/egov/egiz/web/PdfASServletContextListener.java b/src/main/java/at/knowcenter/wag/egov/egiz/web/PdfASServletContextListener.java
index 954bcce..0e0c625 100644
--- a/src/main/java/at/knowcenter/wag/egov/egiz/web/PdfASServletContextListener.java
+++ b/src/main/java/at/knowcenter/wag/egov/egiz/web/PdfASServletContextListener.java
@@ -58,15 +58,15 @@ public class PdfASServletContextListener implements ServletContextListener
String base_dir = sce.getServletContext().getRealPath("/"); //$NON-NLS-1$
logger.info("PDF-AS real path = " + base_dir); //$NON-NLS-1$
- try
- {
- logger.info("PDF-AS work directory = " + new File(work_dir).getCanonicalPath()); //$NON-NLS-1$
- logger.info("PDF-AS base directory = " + new File(base_dir).getCanonicalPath()); //$NON-NLS-1$
- }
- catch (IOException e)
- {
- e.printStackTrace();
- }
+// try
+// {
+// logger.info("PDF-AS work directory = " + new File(work_dir).getCanonicalPath()); //$NON-NLS-1$
+// logger.info("PDF-AS base directory = " + new File(base_dir).getCanonicalPath()); //$NON-NLS-1$
+// }
+// catch (IOException e)
+// {
+// e.printStackTrace();
+// }
if (work_dir != null && work_dir.length() > 0)
{
diff --git a/src/main/java/at/knowcenter/wag/egov/egiz/web/SessionInformation.java b/src/main/java/at/knowcenter/wag/egov/egiz/web/SessionInformation.java
index acf4416..3eb08f5 100644
--- a/src/main/java/at/knowcenter/wag/egov/egiz/web/SessionInformation.java
+++ b/src/main/java/at/knowcenter/wag/egov/egiz/web/SessionInformation.java
@@ -21,6 +21,10 @@ import java.io.Serializable;
import java.util.List;
import java.util.Properties;
+import at.gv.egiz.pdfas.impl.output.FileBasedDataSink;
+import at.gv.egiz.pdfas.framework.input.PdfDataSource;
+import at.gv.egiz.pdfas.framework.signator.SignatorInformation;
+
import at.knowcenter.wag.egov.egiz.framework.SignResult;
import at.knowcenter.wag.egov.egiz.pdf.IncrementalUpdateInformation;
import at.knowcenter.wag.egov.egiz.pdf.TablePos;
@@ -63,7 +67,8 @@ public class SessionInformation implements Serializable
/**
* The original, uploaded pdf.
*/
- public byte[] pdf = null;
+ //public byte[] pdf = null;
+ public PdfDataSource pdfDataSource = null;
/**
* The type/profile of the signature.
@@ -106,6 +111,10 @@ public class SessionInformation implements Serializable
*/
public IncrementalUpdateInformation iui;
+ public SignatorInformation si = null;
+
+ public FileBasedDataSink output = null;
+
/**
* The signature holders.
*/
@@ -127,10 +136,12 @@ public class SessionInformation implements Serializable
*/
public boolean download_inline;
- /**
- * The sign result to be passed back to the user.
- */
- public SignResult sign_result;
+// /**
+// * The sign result to be passed back to the user.
+// */
+// public SignResult sign_result;
+
+ public boolean isSignFinished = false;
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;
}
}
diff --git a/src/main/java/at/knowcenter/wag/egov/egiz/web/servlets/RetrieveSignatureDataServlet.java b/src/main/java/at/knowcenter/wag/egov/egiz/web/servlets/RetrieveSignatureDataServlet.java
index 402170c..6653a60 100644
--- a/src/main/java/at/knowcenter/wag/egov/egiz/web/servlets/RetrieveSignatureDataServlet.java
+++ b/src/main/java/at/knowcenter/wag/egov/egiz/web/servlets/RetrieveSignatureDataServlet.java
@@ -5,22 +5,29 @@ 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 javax.servlet.http.HttpSession;
+
+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;
-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.
@@ -40,61 +47,103 @@ public class RetrieveSignatureDataServlet extends HttpServlet
*/
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)
+ * @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)
+
+ 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);
+
+ if (sessionObject instanceof SignSessionInformation)
+ {
+ SignSessionInformation si = (SignSessionInformation) sessionObject;
+ processSign(request, response, si);
}
-
- SessionInformation si = (SessionInformation) session.getAttribute(SessionAttributes.ATTRIBUTE_SESSION_INFORMATION);
- if (si == null)
+ else
{
- String msg = "The session is not found or no longer valid."; //$NON-NLS-1$
- log.error(msg);
- throw new ServletException(msg);
+ 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;
- if (si.application.equals("sign"))
+
+ SignatureHolder holder = null;
+
+ if (si.currentLocalOperation != null)
{
- sd = si.iui.signature_data;
+ holder = si.currentLocalOperation.getCurrentSignatureHolder();
}
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");
- }
-
+ holder = si.moa_holder;
}
+
+ log.debug("holder = " + holder.toString());
- log.debug("Writing " + sd.getMimeType() + " data:"); //$NON-NLS-1$ //$NON-NLS-2$
+ 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());
- response.getOutputStream().write(sd.getData());
-
- log.debug("Writing SignatureData finished."); //$NON-NLS-1$
- }
+ StreamUtils.writeInputStreamToOutputStream(sd.getDataSource().createInputStream(), response.getOutputStream());
+ // response.getOutputStream().write(sd.getData());
-
+ log.trace("Writing SignatureData finished."); //$NON-NLS-1$
+ }
}
diff --git a/src/main/java/at/knowcenter/wag/egov/egiz/web/servlets/SignPreviewServlet.java b/src/main/java/at/knowcenter/wag/egov/egiz/web/servlets/SignPreviewServlet.java
index 1d8ee0b..aec4f25 100644
--- a/src/main/java/at/knowcenter/wag/egov/egiz/web/servlets/SignPreviewServlet.java
+++ b/src/main/java/at/knowcenter/wag/egov/egiz/web/servlets/SignPreviewServlet.java
@@ -24,13 +24,11 @@ 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.knowcenter.wag.egov.egiz.exceptions.ErrorCodeException;
+import at.gv.egiz.pdfas.web.SignSessionInformation;
+import at.gv.egiz.pdfas.web.helper.SessionHelper;
+import at.gv.egiz.pdfas.web.helper.SignServletHelper;
import at.knowcenter.wag.egov.egiz.exceptions.PresentableException;
-import at.knowcenter.wag.egov.egiz.web.FormFields;
-import at.knowcenter.wag.egov.egiz.web.SessionAttributes;
-import at.knowcenter.wag.egov.egiz.web.SessionInformation;
/**
* @author wprinz
@@ -55,34 +53,13 @@ public class SignPreviewServlet extends HttpServlet
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
- SessionInformation si = null;
try
{
- HttpSession session = request.getSession(false);
- if (session == null)
- {
- throw new ErrorCodeException(600, "The session is missing.");
- }
-
- si = (SessionInformation) session.getAttribute(SessionAttributes.ATTRIBUTE_SESSION_INFORMATION);
- if (si == null)
- {
- throw new ErrorCodeException(600, "The session is not found or is no longer valid.");
- }
-
- }
- catch (PresentableException e)
- {
- e.printStackTrace();
- SignServlet.prepareDispatchToErrorPage(e, request);
- dispatch(request, response, "/jsp/error.jsp");
-
- return;
- }
-
- try
- {
- SignServlet.finishSign(si, request, response, getServletContext());
+ Object sessionObject = SessionHelper.getSession(request);
+
+ SignSessionInformation si = (SignSessionInformation) sessionObject;
+
+ SignServletHelper.finishSign(si, request, response, getServletContext());
}
catch (PresentableException e)
{
diff --git a/src/main/java/at/knowcenter/wag/egov/egiz/web/servlets/SignServlet.java b/src/main/java/at/knowcenter/wag/egov/egiz/web/servlets/SignServlet.java
index 54be8df..3f1342d 100644
--- a/src/main/java/at/knowcenter/wag/egov/egiz/web/servlets/SignServlet.java
+++ b/src/main/java/at/knowcenter/wag/egov/egiz/web/servlets/SignServlet.java
@@ -22,12 +22,10 @@ import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
-import java.io.Serializable;
import java.io.UnsupportedEncodingException;
import java.net.URL;
import java.util.Iterator;
import java.util.List;
-import java.util.Properties;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletContext;
@@ -35,7 +33,14 @@ 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.ErrorCode;
+import at.gv.egiz.pdfas.exceptions.ErrorCodeHelper;
+import at.gv.egiz.pdfas.exceptions.external.ExternalErrorException;
+import at.gv.egiz.pdfas.impl.input.FileBasedPdfDataSourceImpl;
+import at.gv.egiz.pdfas.web.SignSessionInformation;
+import at.gv.egiz.pdfas.web.helper.SignServletHelper;
+import at.gv.egiz.pdfas.web.helper.TempDirHelper;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
@@ -43,39 +48,16 @@ import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import org.apache.log4j.Logger;
import at.knowcenter.wag.egov.egiz.PdfAS;
-import at.knowcenter.wag.egov.egiz.PdfASID;
-import at.knowcenter.wag.egov.egiz.cfg.ConfigLogger;
import at.knowcenter.wag.egov.egiz.cfg.SettingsReader;
-import at.knowcenter.wag.egov.egiz.exceptions.ErrorCodeException;
import at.knowcenter.wag.egov.egiz.exceptions.PDFDocumentException;
import at.knowcenter.wag.egov.egiz.exceptions.PlaceholderException;
import at.knowcenter.wag.egov.egiz.exceptions.PresentableException;
-import at.knowcenter.wag.egov.egiz.framework.SignResult;
-import at.knowcenter.wag.egov.egiz.framework.Signator;
-import at.knowcenter.wag.egov.egiz.framework.SignatorFactory;
-import at.knowcenter.wag.egov.egiz.framework.signators.DetachedSignator_1_0_0;
import at.knowcenter.wag.egov.egiz.pdf.TablePos;
-import at.knowcenter.wag.egov.egiz.sig.ConnectorFactory;
-import at.knowcenter.wag.egov.egiz.sig.SignatureData;
-import at.knowcenter.wag.egov.egiz.sig.SignatureDataImpl;
-import at.knowcenter.wag.egov.egiz.sig.connectors.Connector;
-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.DetachedBKUConnector;
-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.sig.connectors.moa.DetachedLocRefMOAConnector;
-import at.knowcenter.wag.egov.egiz.tools.CodingHelper;
import at.knowcenter.wag.egov.egiz.web.ExternAppInformation;
import at.knowcenter.wag.egov.egiz.web.FormFields;
-import at.knowcenter.wag.egov.egiz.web.LocalRequest;
-import at.knowcenter.wag.egov.egiz.web.LocalRequestHelper;
-import at.knowcenter.wag.egov.egiz.web.PDFContainer;
import at.knowcenter.wag.egov.egiz.web.SessionAttributes;
-import at.knowcenter.wag.egov.egiz.web.SessionInformation;
/**
* This method is the sign servlet for the pdf-as web application. It takes get
@@ -97,15 +79,13 @@ public class SignServlet extends HttpServlet
* The log.
*/
private static Log log = LogFactory.getLog(SignServlet.class);
-
- protected void dispatch(HttpServletRequest request,
- HttpServletResponse response, String resource) throws ServletException, IOException
+
+ 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
+ protected static void dispatch(HttpServletRequest request, HttpServletResponse response, String resource, ServletContext context) throws ServletException, IOException
{
response.setContentType("text/html");
response.setCharacterEncoding("UTF-8");
@@ -181,10 +161,11 @@ public class SignServlet extends HttpServlet
UploadedData ud = null;
ExternAppInformation exappinf = null;
TablePos pos = null;
-
+
// check if pdf-as has been called by external webapp
- if(request.getParameter(FormFields.FIELD_PDF_URL) != null) {
-
+ if (request.getParameter(FormFields.FIELD_PDF_URL) != null)
+ {
+
String preview = (String) request.getParameter(FormFields.FIELD_PREVIEW);
String sig_type = (String) request.getParameter(FormFields.FIELD_SIGNATURE_TYPE);
String sig_app = (String) request.getParameter(FormFields.FIELD_CONNECTOR);
@@ -197,65 +178,74 @@ public class SignServlet extends HttpServlet
String session_id = (String) request.getParameter(FormFields.FIELD_SESSION_ID);
String sig_pos_y = (String) request.getParameter(FormFields.FIELD_SIGPOS_Y);
String sig_pos_p = (String) request.getParameter(FormFields.FIELD_SIGPOS_P);
-
- try {
- pos = new TablePos("y:" + sig_pos_y +";p:" + sig_pos_p);
- } catch (PDFDocumentException e) {
+
+ try
+ {
+ pos = new TablePos("y:" + sig_pos_y + ";p:" + sig_pos_p);
+ }
+ catch (PDFDocumentException e)
+ {
log.warn("Uanable to create signature position object: " + e.getMessage());
}
-
- String query = pdf_url + "&" + FormFields.FIELD_PDF_ID + "=" + pdf_id;
-
- byte[] extern_pdf = new byte[Integer.parseInt(pdf_length)];
+
+ String query = pdf_url + "&" + FormFields.FIELD_PDF_ID + "=" + pdf_id;
+
+ // wprinz: rem: this allocation is useless
+ // byte[] extern_pdf = new byte[Integer.parseInt(pdf_length)];
URL source_url = new URL(query);
InputStream is = source_url.openStream();
- extern_pdf = toByteArray(is);
-
- // set UploadedData object...
+ // extern_pdf = toByteArray(is);
+
+ // set UploadedData object...
UploadedData ud_extern = new UploadedData();
ud_extern.file_name = filename;
- ud_extern.pdf = extern_pdf;
+ ud_extern.pdfDataSource = TempDirHelper.placePdfIntoTempDir(is, filename);
+ // ud_extern.pdf = extern_pdf;
ud_extern.preview = preview.equalsIgnoreCase("true") ? true : false;
ud_extern.sig_app = sig_app;
ud_extern.sig_mode = sig_mode;
ud_extern.sig_type = sig_type;
-
+
ud = ud_extern;
-
- exappinf = new ExternAppInformation(invoke_url,pdf_id, session_id);
+
+ exappinf = new ExternAppInformation(invoke_url, pdf_id, session_id);
}
- else {
-
+ else
+ {
+
try
{
// tzefferer: modified
- //UploadedData ud = retrieveUploadedDataFromRequest(request);
+ // UploadedData ud = retrieveUploadedDataFromRequest(request);
UploadedData ud_form = retrieveUploadedDataFromRequest(request);
ud = ud_form;
// end modify
-
- } catch(Exception e) {
+
+ }
+ catch (Exception e)
+ {
// Error retrieving data
request.setAttribute("error", "Fehler beim Upload der Daten");
request.setAttribute("cause", "Beim Upload der Daten ist ein Fehler aufgetreten.");
dispatch(request, response, "/jsp/error.jsp");
}
}
- try {
+ try
+ {
- PdfAS.applyStrictMode(ud.pdf);
+ PdfAS.applyStrictMode(ud.pdfDataSource);
- SessionInformation si = new SessionInformation(); // SessionTable.generateSessionInformationObject();
+ SignSessionInformation si = new SignSessionInformation(); // SessionTable.generateSessionInformationObject();
si.connector = ud.sig_app;
si.application = "sign";
si.mode = ud.sig_mode;
- si.pdf = ud.pdf;
+ si.pdfDataSource = ud.pdfDataSource;
si.type = ud.sig_type;
si.filename = formatFileName(ud.file_name);
si.download_inline = ud.download_inline;
-
+
// added tzefferer:
si.exappinf = exappinf;
si.pos = pos;
@@ -270,7 +260,7 @@ public class SignServlet extends HttpServlet
// si.user_name = user_name;
// si.user_password = user_password;
- prepareSign(si);
+ SignServletHelper.prepareSign(si);
if (ud.preview)
{
@@ -285,7 +275,7 @@ public class SignServlet extends HttpServlet
return;
}
- finishSign(si, request, response, getServletContext());
+ SignServletHelper.finishSign(si, request, response, getServletContext());
}
catch (PresentableException e)
{
@@ -296,13 +286,13 @@ public class SignServlet extends HttpServlet
}
// tzefferer:added
- public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
+ public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
+ {
doPost(request, response);
}
// end add
-
- protected UploadedData retrieveUploadedDataFromRequest(
- HttpServletRequest request) throws ServletException, UnsupportedEncodingException, FileUploadException, PDFDocumentException
+
+ protected UploadedData retrieveUploadedDataFromRequest(HttpServletRequest request) throws ServletException, UnsupportedEncodingException, FileUploadException, PDFDocumentException
{
DiskFileItemFactory fif = new DiskFileItemFactory();
fif.setRepository(SettingsReader.getTemporaryDirectory());
@@ -413,12 +403,22 @@ public class SignServlet extends HttpServlet
throw new PDFDocumentException(201, "The provided file '" + doc_file_name + "' doesn't have the PDF extension (.pdf)."); //$NON-NLS-1$//$NON-NLS-2$
}
- byte[] pdf = file_upload_fi.get();
if (file_upload_fi.getSize() <= 0)
{
throw new PDFDocumentException(250, "The document is empty."); //$NON-NLS-1$
}
+ FileBasedPdfDataSourceImpl pdfDataSource = null;
+ try
+ {
+ pdfDataSource = TempDirHelper.placePdfIntoTempDir(file_upload_fi.getInputStream(), doc_file_name);
+ }
+ catch (IOException e)
+ {
+ throw new PDFDocumentException(201, "Couldn't store the file in the temp dir.");
+ }
+ // byte[] pdf = file_upload_fi.get();
+
UploadedData ud = new UploadedData();
ud.preview = preview;
@@ -427,129 +427,55 @@ public class SignServlet extends HttpServlet
ud.sig_app = sig_app;
ud.sig_mode = mode;
ud.file_name = doc_file_name;
- ud.pdf = pdf;
+ ud.pdfDataSource = pdfDataSource;
return ud;
}
- /**
- * Prepares the sign.
- *
- * <p>
- * This prepares the data for both being signed or being previewed.
- * </p>
- *
- * @param si
- * The SessionInformation to be prepared.
- * @throws PresentableException
- * f.e.
- */
- public static void prepareSign(SessionInformation si) throws PresentableException
- {
- log.debug("prepareSign:"); //$NON-NLS-1$
-
- PdfASID algorithm = FormFields.translateSignatureModeToPdfASID(si.mode);
- Signator signator = SignatorFactory.createSignator(algorithm);
-
- //tzefferer: modified
- //si.iui = signator.prepareSign(si.pdf, si.type, null, ConnectorFactory.needsSIG_ID(si.connector));
- si.iui = signator.prepareSign(si.pdf, si.type, si.pos, ConnectorFactory.needsSIG_ID(si.connector));
- // end modify
- log.debug("prepareSign finished."); //$NON-NLS-1$
- }
-
- /**
- * Finishes the sign.
- *
- * <p>
- * For non local connectors this concludes the sign process, signs the
- * document and returns the result. For local connectors this initializes the
- * local sign process and redirects to following servlets.
- * </p>
- *
- * @param si
- * The SessionInformation.
- * @param request
- * The servlet request for dispatching.
- * @param response
- * The servlet response for dispatching.
- * @param context
- * The servlet context for dispatching.
- * @throws PresentableException
- * f.e.
- * @throws IOException
- * f. e.
- * @throws ServletException
- * f. e.
- */
- public static void finishSign(SessionInformation si,
- HttpServletRequest request, HttpServletResponse response,
- ServletContext context) throws PresentableException, IOException, ServletException
- {
- log.debug("finishSign:"); //$NON-NLS-1$
-
- log.debug("connector = " + si.connector); //$NON-NLS-1$
- if (ConnectorFactory.isConnectorLocal(si.connector))
- {
- log.debug("Connector is local -> dispatching to local processing."); //$NON-NLS-1$
-
- String dispatch_to = LocalRequestHelper.processLocalSign(si, request, response);
- dispatch(request, response, dispatch_to, context);
- return;
- }
- log.debug("Connector is not local -> finishing the sign."); //$NON-NLS-1$
-
- PdfASID algorithm = FormFields.translateSignatureModeToPdfASID(si.mode);
- Signator signator = SignatorFactory.createSignator(algorithm);
- log.debug("RequestURL = " + request.getRequestURL());
- log.debug("ContextPath = " + request.getContextPath());
- String host = request.getServerName();
- URL signature_data_URL = new URL(request.getScheme(), host, request.getServerPort(), request.getContextPath() + "/RetrieveSignatureData");
- String signature_data_url = response.encodeURL(signature_data_URL.toString());
- Connector c = ConnectorChooser.chooseWebConnectorForSign(si.connector, si.type, signature_data_url);
- si.iui.signed_signature_object = c.doSign(si.iui.signature_data);
- si.sign_result = signator.finishSign(si.iui);
- returnSignResponse(si, response);
-
- log.debug("finishSign finished."); //$NON-NLS-1$
- }
-
- public static void prepareDispatchToErrorPage(PresentableException pe,
- HttpServletRequest request)
+ public static void prepareDispatchToErrorPage(PresentableException pe, HttpServletRequest request)
{
- if (pe instanceof ErrorCodeException)
- {
- ErrorCodeException ece = (ErrorCodeException) pe;
- request.setAttribute("error", "Fehler " + ece.getErrorCode());
+ request.setAttribute("PresentableException", pe);
+// if (pe instanceof ErrorCodeException)
+// {
+ request.setAttribute("error", "Fehler " + pe.getErrorCode());
- String cause = ece.getErrorCodeMessage();
- if (ece.hasExternalErrorMessage())
+ String cause = ErrorCodeHelper.getMessageForErrorCode(pe.getErrorCode());
+
+ if (pe instanceof ExternalErrorException)
{
- cause = ece.getExternalErrorCode() + ": " + ece.getExternalErrorMessage();
+ ExternalErrorException eee = (ExternalErrorException) pe;
+ cause = eee.getExternalErrorCode() + ": " + eee.getExternalErrorMessage();
}
request.setAttribute("cause", cause);
- if (pe instanceof PlaceholderException)
+ if (pe.getErrorCode() == ErrorCode.PLACEHOLDER_EXCEPTION)
{
- PlaceholderException phe = (PlaceholderException) ece;
+ PlaceholderException phe = null;
+ if (pe instanceof PlaceholderException)
+ {
+ phe = (PlaceholderException) pe;
+ }
+ else
+ {
+ phe = (PlaceholderException) pe.getCause();
+ }
- request.setAttribute("cause", "Der Platzhalter des Feldes " + phe.getField() + " ist um " + phe.getMissing() + " Bytes zu kurz. " + ece.getErrorCodeMessage());
+ request.setAttribute("cause", "Der Platzhalter des Feldes " + phe.getField() + " ist um " + phe.getMissing() + " Bytes zu kurz. " + cause);
}
- }
- else
- {
- request.setAttribute("error", "PresentableException");
- request.setAttribute("cause", pe.toString());
- }
+// }
+// else
+// {
+// request.setAttribute("error", "PresentableException");
+// request.setAttribute("cause", pe.toString());
+// }
}
- public void dispatchToPreview(String document_text, String connector,
- String mode, String signature_type, String submit_url,
- HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
+ public void dispatchToPreview(String document_text, String connector, String mode, String signature_type, String submit_url, HttpServletRequest request, HttpServletResponse response)
+ throws ServletException, IOException
{
request.setAttribute("document_text", document_text);
request.setAttribute("connector", connector);
@@ -576,112 +502,40 @@ public class SignServlet extends HttpServlet
return file_name_only;
}
- /**
- * Formats the file name according to the SignResult.
- *
- * @param file_name
- * The file name.
- * @param sign_result
- * The sign result.
- * @return Returns the formatted file name.
- */
- public static String formatFileNameForSignResult(String file_name,
- SignResult sign_result)
- {
- String output = file_name + "_signed";
- if (sign_result.getMimeType().equals(DetachedSignator_1_0_0.MIME_TYPE))
- {
- output += ".xml";
- }
- else
- {
- output += ".pdf";
- }
- return output;
- }
- /**
- * Returns the data in the SignResult with proper content disposition.
- *
- * @param si
- * SessionInformation.
- * @param response
- * The servlet response.
- * @throws IOException
- * The IO Exception.
- */
- public static void returnSignResponse(SessionInformation si,
- HttpServletResponse response) throws IOException
- {
- SignResult sign_result = si.sign_result;
-
- String file_name = formatFileNameForSignResult(si.filename, sign_result);
-
- // tzefferer: added condition
- if (si.exappinf == null) {
-
- // The name parameter is actually deprecated in favour of
- // Content-Disposition filename
- // Unfortunately Acrobat reader does recognize neither of these parameters
- // with its inline save-as. It always takes the page name.
- response.setContentType(sign_result.getMimeType() + "; name=\"" + file_name + "\"");
- if (si.download_inline)
- {
- response.addHeader("Content-Disposition", "inline; filename=\"" + file_name + "\"");
- }
- else
- {
- response.addHeader("Content-Disposition", "attachment; filename=\"" + file_name + "\"");
- }
- response.getOutputStream().write(sign_result.getData());
- // tzefferer: added else-block
- } else {
- SignResult sr = si.sign_result;
- byte[] signed_pdf = sr.getData();
- PDFContainer entry = new PDFContainer(signed_pdf, si.exappinf.pdf_id);
- ProvidePDFServlet.signedDocuments.add(entry);
-
- // notify webapp...
- String invoke_url = si.exappinf.invoke_url;
-
- String providePDFServlet = "ProvidePDF";
- String pdf_id = String.valueOf(si.exappinf.pdf_id);
- String session_id = si.exappinf.session_id;
-
- // build URL
- int ind = invoke_url.indexOf("?");
- String query = invoke_url.substring(0, ind) + ";jsessionid=" + session_id + invoke_url.substring(ind) + "&" + FormFields.FIELD_PDF_URL + "=" + providePDFServlet + "&" + FormFields.FIELD_PDF_ID + "=" + pdf_id + "&" + FormFields.FIELD_FILE_LENGTH + "=" + signed_pdf.length;
- response.sendRedirect(query);
-
- }
- }
-
-
// tzefferer: added
- public static byte[] toByteArray(InputStream inputStream) throws IOException {
-
- if(inputStream == null) {
+ public static byte[] toByteArray(InputStream inputStream) throws IOException
+ {
+
+ if (inputStream == null)
+ {
return null;
}
-
+
ByteArrayOutputStream out = new ByteArrayOutputStream(8192);
int n;
byte[] buffer = new byte[2048];
BufferedInputStream bufIn = new BufferedInputStream(inputStream);
- try {
- while ((n = bufIn.read(buffer)) != -1) {
+ try
+ {
+ while ((n = bufIn.read(buffer)) != -1)
+ {
out.write(buffer, 0, n);
}
- } finally {
- if(bufIn != null) {
+ }
+ finally
+ {
+ if (bufIn != null)
+ {
bufIn.close();
}
}
return out.toByteArray();
}
+
// end add
protected static class UploadedData
@@ -698,6 +552,7 @@ public class SignServlet extends HttpServlet
protected String file_name = null;
- protected byte[] pdf = null;
+ protected FileBasedPdfDataSourceImpl pdfDataSource = null;
+ // protected byte[] pdf = null;
}
} \ No newline at end of file
diff --git a/src/main/java/at/knowcenter/wag/egov/egiz/web/servlets/VerifyPreviewServlet.java b/src/main/java/at/knowcenter/wag/egov/egiz/web/servlets/VerifyPreviewServlet.java
index 150b592..732e6cc 100644
--- a/src/main/java/at/knowcenter/wag/egov/egiz/web/servlets/VerifyPreviewServlet.java
+++ b/src/main/java/at/knowcenter/wag/egov/egiz/web/servlets/VerifyPreviewServlet.java
@@ -20,6 +20,7 @@ package at.knowcenter.wag.egov.egiz.web.servlets;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringWriter;
+import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Iterator;
@@ -30,19 +31,22 @@ 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.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
-import org.apache.log4j.Logger;
-
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import at.gv.egiz.pdfas.framework.input.TextDataSource;
+import at.gv.egiz.pdfas.utils.StreamUtils;
+import at.gv.egiz.pdfas.web.VerifySessionInformation;
+import at.gv.egiz.pdfas.web.helper.SessionHelper;
+import at.gv.egiz.pdfas.web.helper.TempDirHelper;
import at.knowcenter.wag.egov.egiz.PdfAS;
import at.knowcenter.wag.egov.egiz.PdfASID;
-import at.knowcenter.wag.egov.egiz.cfg.ConfigLogger;
import at.knowcenter.wag.egov.egiz.cfg.SettingsReader;
-import at.knowcenter.wag.egov.egiz.exceptions.ErrorCodeException;
import at.knowcenter.wag.egov.egiz.exceptions.InvalidIDException;
import at.knowcenter.wag.egov.egiz.exceptions.PresentableException;
import at.knowcenter.wag.egov.egiz.exceptions.SignatureException;
@@ -55,8 +59,6 @@ import at.knowcenter.wag.egov.egiz.sig.SignatureObject;
import at.knowcenter.wag.egov.egiz.sig.SignatureTypes;
import at.knowcenter.wag.egov.egiz.web.FormFields;
import at.knowcenter.wag.egov.egiz.web.LocalRequestHelper;
-import at.knowcenter.wag.egov.egiz.web.SessionAttributes;
-import at.knowcenter.wag.egov.egiz.web.SessionInformation;
/**
* @author wprinz
@@ -71,7 +73,7 @@ public class VerifyPreviewServlet extends HttpServlet
/**
* The logger.
*/
- private static final Logger logger_ = ConfigLogger.getLogger(VerifyPreviewServlet.class);
+ private static final Log logger_ = LogFactory.getLog(VerifyPreviewServlet.class);
protected void dispatch(HttpServletRequest request,
HttpServletResponse response, String resource) throws ServletException, IOException
@@ -82,7 +84,29 @@ public class VerifyPreviewServlet extends HttpServlet
RequestDispatcher disp = getServletContext().getRequestDispatcher(resource);
disp.forward(request, response);
}
+
+ protected void dispatchToPreview(HttpServletRequest request, HttpServletResponse response, int verify_which)throws ServletException, IOException
+ {
+ request.setAttribute(FormFields.FIELD_VERIFY_WHICH, new Integer(verify_which));
+ request.setAttribute("btlurl", formBackToListURL(request, response));
+ dispatch(request, response, "/jsp/verifypreview.jsp");
+
+ }
+ protected void dispatchToDataOk(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException
+ {
+ request.setAttribute("btlurl", formBackToListURL(request, response));
+ dispatch(request, response, "/jsp/dataok.jsp");
+ }
+
+ protected String formBackToListURL(HttpServletRequest request, HttpServletResponse response) throws MalformedURLException
+ {
+ URL btlURL = new URL(request.getScheme(), request.getServerName(), request.getServerPort(), request.getContextPath() + "/jsp/verifylist.jsp");
+ String backToListURL = response.encodeURL(btlURL.toString());
+
+ return backToListURL;
+ }
+
protected static String generateNamePrefix(int num)
{
return SIG_INPUT_PREFIX + num + "_";
@@ -249,6 +273,10 @@ public class VerifyPreviewServlet extends HttpServlet
{
continue;
}
+ if (SignatureTypes.SIG_KZ.equals(key) && value == null)
+ {
+ continue;
+ }
value = value.replaceAll("\\s", " ");
value = value.replaceAll("\\\"", "\\\"");
@@ -281,6 +309,10 @@ public class VerifyPreviewServlet extends HttpServlet
{
continue;
}
+ if (SignatureTypes.SIG_KZ.equals(key) && value == null)
+ {
+ continue;
+ }
writer.println(" <tr>");
writer.println(" <td width=\"10%\"><span class=\"sca\">" + caption + ":</span></td>");
@@ -355,10 +387,11 @@ public class VerifyPreviewServlet extends HttpServlet
}
protected void dispatchToResults(List results, HttpServletRequest request,
- HttpServletResponse response, boolean backbutton) throws ServletException, IOException
+ HttpServletResponse response, boolean backbutton, String backToListURL) throws ServletException, IOException
{
request.setAttribute("results", results);
request.setAttribute("backbutton", backbutton ? "true" : "false");
+ request.setAttribute("btlurl", backToListURL);
dispatch(request, response, "/jsp/results.jsp");
}
@@ -459,37 +492,12 @@ public class VerifyPreviewServlet extends HttpServlet
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
- SessionInformation si = null;
- HttpSession session = null;
- try
- {
- session = request.getSession(false);
- // String session_id_string = request.getParameter("session");
- if (session == null)
- {
- throw new ErrorCodeException(600, "The session is missing.");
- }
-
- si = (SessionInformation) session.getAttribute(SessionAttributes.ATTRIBUTE_SESSION_INFORMATION);
- // long session_id = Long.parseLong(session_id_string);
- // si = SessionTable.get(session_id);
- if (si == null)
- {
- throw new ErrorCodeException(600, "The session is not found or is no longer valid.");
- }
-
- }
- catch (PresentableException e)
- {
- e.printStackTrace();
- SignServlet.prepareDispatchToErrorPage(e, request);
- dispatch(request, response, "/jsp/error.jsp");
-
- return;
- }
-
try
{
+ Object sessionObject = SessionHelper.getSession(request);
+
+ VerifySessionInformation si = (VerifySessionInformation)sessionObject;
+
int verify_which = -1;
boolean preview = false;
@@ -526,7 +534,7 @@ public class VerifyPreviewServlet extends HttpServlet
}
SignatureHolder holder = (SignatureHolder) si.signature_holders.get(verify_which);
- si.current_operation = verify_which;
+// si.current_operation = verify_which;
holders_to_verify = new ArrayList();
holders_to_verify.add(holder);
@@ -536,15 +544,17 @@ public class VerifyPreviewServlet extends HttpServlet
{
BinarySignatureHolder binary_holder = (BinarySignatureHolder) holder;
response.setContentType("application/pdf");
- response.getOutputStream().write(binary_holder.getSignedPdf(), 0, binary_holder.getSignedPdfLength());
+ StreamUtils.writeInputStreamToOutputStream(binary_holder.getSignedPdf().createInputStream(), response.getOutputStream());
+// response.getOutputStream().write(binary_holder.getSignedPdf(), 0, binary_holder.getSignedPdfLength());
}
else
// if (holder.getSignatureObject().isTextual())
{
// formatPreview(holders_to_verify, si.connector, request,
// response);
- request.setAttribute(FormFields.FIELD_VERIFY_WHICH, new Integer(verify_which));
- dispatch(request, response, "/jsp/verifypreview.jsp");
+// request.setAttribute(FormFields.FIELD_VERIFY_WHICH, new Integer(verify_which));
+
+ dispatchToPreview(request, response, verify_which);
}
return;
@@ -554,10 +564,12 @@ public class VerifyPreviewServlet extends HttpServlet
if (ConnectorFactory.isConnectorLocal(si.connector))
{
- List temp_holder = new ArrayList(si.signature_holders);
-
- si.copy_of_signature_holders = temp_holder;
- si.signature_holders = holders_to_verify;
+ // what is this for? si.signature_holders must not be modified after extraction
+ // TODO this seems to be buggy bug fixing - remove
+// List temp_holder = new ArrayList(si.signature_holders);
+//
+// si.copy_of_signature_holders = temp_holder;
+// si.signature_holders = holders_to_verify;
String dispatch_to = LocalRequestHelper.processLocalVerify(si, holders_to_verify, request, response);
dispatch(request, response, dispatch_to);
@@ -575,7 +587,9 @@ public class VerifyPreviewServlet extends HttpServlet
{
backbutton = false;
}
- dispatchToResults(results, request, response, backbutton);
+ 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, backbutton, backToListURL);
}
catch (PresentableException e)
@@ -588,41 +602,17 @@ public class VerifyPreviewServlet extends HttpServlet
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
- SessionInformation si = null;
- HttpSession session = null;
- try
- {
- session = request.getSession(false);
- // String session_id_string = request.getParameter("session");
- if (session == null)
- {
- throw new ErrorCodeException(600, "The session is missing.");
- }
-
- si = (SessionInformation) session.getAttribute(SessionAttributes.ATTRIBUTE_SESSION_INFORMATION);
- // long session_id = Long.parseLong(session_id_string);
- // si = SessionTable.get(session_id);
- if (si == null)
- {
- throw new ErrorCodeException(600, "The session is not found or is no longer valid.");
- }
-
- }
- catch (PresentableException e)
- {
- e.printStackTrace();
- SignServlet.prepareDispatchToErrorPage(e, request);
- dispatch(request, response, "/jsp/error.jsp");
-
- return;
- }
-
DiskFileItemFactory fif = new DiskFileItemFactory();
fif.setRepository(SettingsReader.getTemporaryDirectory());
ServletFileUpload sfu = new ServletFileUpload(fif);
try
{
+ Object sessionObject = SessionHelper.getSession(request);
+
+ VerifySessionInformation si = (VerifySessionInformation)sessionObject;
+
+
String text_to_be_verified = null;
SignatureObject signature_object = new SignatureObject();
@@ -671,13 +661,17 @@ public class VerifyPreviewServlet extends HttpServlet
logger_.debug("sig_obj_number" + key + " = " + value);
}
- SignatureHolder new_holder = new TextualSignatureHolder(text_to_be_verified, signature_object);
+ SignatureHolder old_holder = (SignatureHolder) si.signature_holders.get(verify_which);
+ TempDirHelper.deleteDataSourceIfFileBased(old_holder.getDataSource());
+
+ TextDataSource tds = TempDirHelper.placeTextIntoTempDir(text_to_be_verified, "_previewholder.utf8.txt");
+ SignatureHolder new_holder = new TextualSignatureHolder(tds, signature_object);
si.signature_holders.set(verify_which, new_holder);
if (verify == false)
{
- dispatch(request, response, "/dataok.html");
+ dispatchToDataOk(request, response);
return;
}
@@ -707,7 +701,10 @@ public class VerifyPreviewServlet extends HttpServlet
String loc_ref_url = response.encodeURL(loc_ref_URL.toString());
List results = PdfAS.verifySignatureHoldersWeb(holders_to_verify, si, loc_ref_url);
- dispatchToResults(results, request, response, true);
+
+ 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, true, backToListURL);
}
catch (FileUploadException e)
{
diff --git a/src/main/java/at/knowcenter/wag/egov/egiz/web/servlets/VerifyServlet.java b/src/main/java/at/knowcenter/wag/egov/egiz/web/servlets/VerifyServlet.java
index b53a9a1..bb6a13f 100644
--- a/src/main/java/at/knowcenter/wag/egov/egiz/web/servlets/VerifyServlet.java
+++ b/src/main/java/at/knowcenter/wag/egov/egiz/web/servlets/VerifyServlet.java
@@ -36,16 +36,22 @@ import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import at.gv.egiz.pdfas.framework.config.SettingsHelper;
+import at.gv.egiz.pdfas.framework.input.DataSource;
+import at.gv.egiz.pdfas.framework.input.ExtractionStage;
+import at.gv.egiz.pdfas.framework.input.PdfDataSource;
+import at.gv.egiz.pdfas.framework.input.TextDataSource;
+import at.gv.egiz.pdfas.framework.vfilter.VerificationFilterParameters;
+import at.gv.egiz.pdfas.web.VerifySessionInformation;
+import at.gv.egiz.pdfas.web.helper.TempDirHelper;
import at.knowcenter.wag.egov.egiz.PdfAS;
import at.knowcenter.wag.egov.egiz.cfg.SettingsReader;
import at.knowcenter.wag.egov.egiz.exceptions.PDFDocumentException;
import at.knowcenter.wag.egov.egiz.exceptions.PresentableException;
-import at.knowcenter.wag.egov.egiz.framework.VerificationFilter;
import at.knowcenter.wag.egov.egiz.sig.ConnectorFactory;
import at.knowcenter.wag.egov.egiz.web.FormFields;
import at.knowcenter.wag.egov.egiz.web.LocalRequestHelper;
import at.knowcenter.wag.egov.egiz.web.SessionAttributes;
-import at.knowcenter.wag.egov.egiz.web.SessionInformation;
/**
* This method is the verify servlet for the pdf-as web application. It takes
@@ -68,8 +74,7 @@ public class VerifyServlet extends HttpServlet
*/
private static Log log = LogFactory.getLog(SignServlet.class);
- protected void dispatch(HttpServletRequest request,
- HttpServletResponse response, String resource) throws ServletException, IOException
+ protected void dispatch(HttpServletRequest request, HttpServletResponse response, String resource) throws ServletException, IOException
{
response.setContentType("text/html"); //$NON-NLS-1$
response.setCharacterEncoding("UTF-8"); //$NON-NLS-1$
@@ -78,8 +83,7 @@ public class VerifyServlet extends HttpServlet
disp.forward(request, response);
}
- protected void dispatchToResults(List results, HttpServletRequest request,
- HttpServletResponse response) throws ServletException, IOException
+ protected void dispatchToResults(List results, HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
request.setAttribute("results", results); //$NON-NLS-1$
dispatch(request, response, "/jsp/results.jsp"); //$NON-NLS-1$
@@ -97,16 +101,20 @@ public class VerifyServlet extends HttpServlet
{
UploadedData ud = retrieveUploadedDataFromRequest(request);
- List signature_holders = extractSignatureHoldersFromFile(ud.file_name, ud.file_data);
-
- SessionInformation si = new SessionInformation(); // SessionTable.generateSessionInformationObject();
+ VerifySessionInformation si = new VerifySessionInformation();
si.connector = ud.sig_app;
si.application = "verify";
si.mode = null;
- si.pdf = null;
+ si.inputDataSource = ud.dataSource;
si.type = null;
- si.user_name = null;
- si.user_password = null;
+// si.user_name = null;
+// si.user_password = null;
+
+ // List signature_holders = extractSignatureHoldersFromFile(ud.file_name,
+ // ud.file_data);
+ List signature_holders = extractSignatureHolders(ud.dataSource);
+
+ TempDirHelper.storeTextSignatureHoldersIfApplicable(signature_holders, "_textholder.utf8.txt");
si.signature_holders = signature_holders;
@@ -123,7 +131,7 @@ public class VerifyServlet extends HttpServlet
if (ConnectorFactory.isConnectorLocal(si.connector))
{
String dispatch_to = LocalRequestHelper.processLocalVerify(si, si.signature_holders, request, response);
-
+
dispatch(request, response, dispatch_to);
return;
}
@@ -151,9 +159,8 @@ public class VerifyServlet extends HttpServlet
}
}
-
- protected UploadedData retrieveUploadedDataFromRequest(
- HttpServletRequest request) throws ServletException, UnsupportedEncodingException, FileUploadException, PDFDocumentException
+
+ protected UploadedData retrieveUploadedDataFromRequest(HttpServletRequest request) throws ServletException, UnsupportedEncodingException, FileUploadException, PDFDocumentException
{
DiskFileItemFactory fif = new DiskFileItemFactory();
fif.setRepository(SettingsReader.getTemporaryDirectory());
@@ -165,6 +172,9 @@ public class VerifyServlet extends HttpServlet
FileItem connector_fi = null;
// FileItem mode_fi = null;
FileItem preview_fi = null;
+
+ String characterEncoding = request.getCharacterEncoding();
+ log.debug("request character encoding = " + characterEncoding);
{
Iterator it = items.iterator();
@@ -229,7 +239,7 @@ public class VerifyServlet extends HttpServlet
String preview_str = preview_fi.getString("UTF-8"); //$NON-NLS-1$
if (!preview_str.equals(FormFields.VALUE_TRUE) && !preview_str.equals(FormFields.VALUE_FALSE))
{
- throw new ServletException("The preview '" + preview_str + "' is unrecognized."); //$NON-NLS-1$//$NON-NLS-2$
+ throw new ServletException("The preview '" + preview_str + "' is unrecognized."); //$NON-NLS-1$//$NON-NLS-2$
}
boolean preview = false;
if (preview_str.equals(FormFields.VALUE_TRUE))
@@ -238,40 +248,59 @@ public class VerifyServlet extends HttpServlet
}
// process the request
- log.debug("file content type =" + upload_fi.getContentType()); //$NON-NLS-1$
- log.debug("file size = " + upload_fi.getSize()); //$NON-NLS-1$
- if (upload_fi.getSize() <= 0)
- {
- throw new PDFDocumentException(250, "The document is empty."); //$NON-NLS-1$
- }
- byte[] document_bytes = upload_fi.get();
+ DataSource dataSource = convertUploadToDataSource(upload_fi);
UploadedData ud = new UploadedData();
ud.preview = preview;
ud.sig_app = connector;
ud.file_name = upload_fi.getName();
- ud.file_data = document_bytes;
+ ud.dataSource = dataSource;
+ // ud.file_data = document_bytes;
return ud;
}
-
- protected List extractSignatureHoldersFromFile (String file_name, byte [] data) throws UnsupportedEncodingException, PresentableException
+
+ protected DataSource convertUploadToDataSource(FileItem upload_fi) throws PDFDocumentException
{
- VerificationFilter vf = new VerificationFilter();
- List signature_holders = null;
+ log.debug("file content type =" + upload_fi.getContentType()); //$NON-NLS-1$
+ log.debug("file size = " + upload_fi.getSize()); //$NON-NLS-1$
+ if (upload_fi.getSize() <= 0)
+ {
+ throw new PDFDocumentException(250, "The document is empty."); //$NON-NLS-1$
+ }
- String extension = extractExtension(file_name);
+ if (upload_fi.getContentType() != null && upload_fi.getContentType().equals("application/pdf"))
+ {
+ try
+ {
+ PdfDataSource pdfDataSource = TempDirHelper.placePdfIntoTempDir(upload_fi.getInputStream(), upload_fi.getName());
+ return pdfDataSource;
+ }
+ catch (IOException e)
+ {
+ throw new PDFDocumentException(201, "The document could not be placed in the temp dir.", e); //$NON-NLS-1$
+ }
+ // byte[] document_bytes = upload_fi.get();
+ }
- String raw_text = null;
- if (file_name == null || (extension != null && extension.equals("txt"))) //$NON-NLS-1$
+ try
{
- raw_text = new String(data, "UTF-8"); //$NON-NLS-1$
- signature_holders = vf.extractSignaturesFromPlainText(raw_text);
+ String text = new String(upload_fi.get(), "UTF-8"); //$NON-NLS-1$
+ TextDataSource textDataSource = TempDirHelper.placeTextIntoTempDir(text, upload_fi.getName());
+ return textDataSource;
}
- else
+ catch (IOException e)
{
- signature_holders = vf.extractSignaturesFromPdf(data);
+ throw new PDFDocumentException(201, e);
}
+ }
+
+ protected List extractSignatureHolders(DataSource dataSource) throws PresentableException
+ {
+ VerificationFilterParameters parameters = SettingsHelper.readVerificationFilterParametersFromSettings();
+
+ ExtractionStage es = new ExtractionStage();
+ List signature_holders = es.extractSignatureHolders(dataSource, parameters);
if (signature_holders.size() == 0)
{
@@ -281,6 +310,45 @@ public class VerifyServlet extends HttpServlet
return signature_holders;
}
+ // TODO obsolete method - remove
+ // protected List extractSignatureHoldersFromFile(String file_name, byte[]
+ // data) throws UnsupportedEncodingException, PresentableException
+ // {
+ // VerificationFilterParameters parameters = new
+ // VerificationFilterParametersImpl(false, false, true);
+ // ExtractionStage es = new ExtractionStage();
+ // // VerificationFilter vf = new VerificationFilter();
+ // List signature_holders = null;
+ //
+ // String extension = extractExtension(file_name);
+ //
+ // String raw_text = null;
+ // if (file_name == null || (extension != null && extension.equals("txt")))
+ // //$NON-NLS-1$
+ // {
+ // raw_text = new String(data, "UTF-8"); //$NON-NLS-1$
+ //
+ // signature_holders = es.extractSignatureHolders(new
+ // TextDataSourceImpl(raw_text), parameters);
+ // // signature_holders = vf.extractSignaturesFromPlainText(raw_text);
+ // }
+ // else
+ // {
+ // signature_holders = es.extractSignatureHolders(new
+ // ByteArrayPdfDataSourceImpl(data), parameters);
+ //
+ // // signature_holders = vf.extractSignaturesFromPdf(data);
+ // }
+ //
+ // if (signature_holders.size() == 0)
+ // {
+ // throw new PDFDocumentException(206, "PDF document not signed.");
+ // //$NON-NLS-1$
+ // }
+ //
+ // return signature_holders;
+ // }
+
/**
* Extracts the extension from a file name string.
*
@@ -317,6 +385,7 @@ public class VerifyServlet extends HttpServlet
protected String file_name = null;
- protected byte[] file_data = null;
+ protected DataSource dataSource = null;
+ // protected byte[] file_data = null;
}
} \ No newline at end of file