aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/at/knowcenter/wag/egov/egiz/web/servlets/VerifyServlet.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/at/knowcenter/wag/egov/egiz/web/servlets/VerifyServlet.java')
-rw-r--r--src/main/java/at/knowcenter/wag/egov/egiz/web/servlets/VerifyServlet.java143
1 files changed, 106 insertions, 37 deletions
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