aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/main/java/at/gv/egiz/pdfas/itext/IText.java111
-rw-r--r--src/main/java/at/gv/egiz/pdfas/utils/TempDirHelper.java (renamed from src/main/java/at/gv/egiz/pdfas/web/helper/TempDirHelper.java)67
-rw-r--r--src/main/java/at/gv/egiz/pdfas/utils/WebUtils.java100
-rw-r--r--src/main/java/at/gv/egiz/pdfas/web/CurrentLocalOperation.java87
-rw-r--r--src/main/java/at/gv/egiz/pdfas/web/SignSessionInformation.java139
-rw-r--r--src/main/java/at/gv/egiz/pdfas/web/VerifySessionInformation.java195
-rw-r--r--src/main/java/at/gv/egiz/pdfas/web/filter/EncodingFilter.java123
-rw-r--r--src/main/java/at/gv/egiz/pdfas/web/helper/SessionHelper.java47
-rw-r--r--src/main/java/at/gv/egiz/pdfas/web/helper/SignServletHelper.java309
-rw-r--r--src/main/java/at/gv/egiz/pdfas/web/helper/SigningTimeHelper.java83
-rw-r--r--src/main/java/at/gv/egiz/pdfas/web/i18n/LanguageDecoratorMapper.java125
-rw-r--r--src/main/java/at/gv/egiz/pdfas/web/i18n/LocaleParamFilter.java96
12 files changed, 31 insertions, 1451 deletions
diff --git a/src/main/java/at/gv/egiz/pdfas/itext/IText.java b/src/main/java/at/gv/egiz/pdfas/itext/IText.java
deleted file mode 100644
index 767dbbc..0000000
--- a/src/main/java/at/gv/egiz/pdfas/itext/IText.java
+++ /dev/null
@@ -1,111 +0,0 @@
-package at.gv.egiz.pdfas.itext;
-
-import java.awt.color.ICC_Profile;
-import java.io.IOException;
-import java.io.OutputStream;
-
-import org.apache.commons.io.IOUtils;
-import org.apache.commons.io.output.ByteArrayOutputStream;
-import org.apache.log4j.Logger;
-
-import com.lowagie.text.Document;
-import com.lowagie.text.DocumentException;
-import com.lowagie.text.Font;
-import com.lowagie.text.PageSize;
-import com.lowagie.text.Paragraph;
-import com.lowagie.text.Rectangle;
-import com.lowagie.text.pdf.BaseFont;
-import com.lowagie.text.pdf.PdfArray;
-import com.lowagie.text.pdf.PdfDictionary;
-import com.lowagie.text.pdf.PdfICCBased;
-import com.lowagie.text.pdf.PdfName;
-import com.lowagie.text.pdf.PdfString;
-import com.lowagie.text.pdf.PdfWriter;
-
-public final class IText {
-
- private IText() {
- }
-
- private static final Logger LOG = Logger.getLogger(IText.class);
-
- private static final Font DEFAULT_FONT = new Font(Font.HELVETICA, 12, Font.NORMAL);
- private static final String DEFAULT_TTF_FONT_RESOURCE = "DejaVuSansCondensed.ttf";
- private static final String DEFAULT_ICC_PROFILE_RESOURCE = "srgb.profile";
- private static final Rectangle DEFAULT_PAGE_SIZE = PageSize.A4;
- private static final int[] DEFAULT_MARGINS_MM = { 25, 25, 25, 25 }; // top, right, bottom, left
- public static final String DEFAULT_FILENAME = "text";
-
- private static Font DEFAULT_TTF_FONT;
- private static PdfICCBased DEFAULT_ICC_COLOR_SPACE;
-
- static {
- try {
- byte[] ttfFontData = IOUtils.toByteArray(IText.class.getResourceAsStream(DEFAULT_TTF_FONT_RESOURCE));
- DEFAULT_TTF_FONT = new Font(BaseFont.createFont(DEFAULT_TTF_FONT_RESOURCE, BaseFont.WINANSI, true, true, ttfFontData, null));
- } catch (Exception e) {
- LOG.error(e);
- DEFAULT_TTF_FONT = DEFAULT_FONT;
- }
- try {
- byte[] iccData = IOUtils.toByteArray(IText.class.getResourceAsStream(DEFAULT_ICC_PROFILE_RESOURCE));
- DEFAULT_ICC_COLOR_SPACE = new PdfICCBased(ICC_Profile.getInstance(iccData));
- DEFAULT_ICC_COLOR_SPACE.remove(PdfName.ALTERNATE);
- } catch (Exception e) {
- LOG.error(e);
- DEFAULT_ICC_COLOR_SPACE = null;
- }
- }
-
- public static byte[] createPDF(String content, boolean pdfa) throws DocumentException, IOException {
- ByteArrayOutputStream baOut = new ByteArrayOutputStream();
- createPDF(content, pdfa, baOut);
- return baOut.toByteArray();
- }
-
- public static byte[] createPDF(String content) throws DocumentException, IOException {
- return createPDF(content, false);
- }
-
-
- private static void addContent(Document document, boolean pdfa, String content) throws DocumentException {
- Paragraph p = new Paragraph(content, pdfa ? DEFAULT_TTF_FONT : DEFAULT_FONT);
- document.add(p);
- }
- public static void createPDF(String content, OutputStream outputStream) throws DocumentException, IOException {
- createPDF(content, false, outputStream);
- }
-
- public static void createPDF(String content, boolean pdfa, OutputStream outputStream) throws DocumentException, IOException {
- final float factor = (float) 72 / (float) 25.4;
- Document document = new Document(
- DEFAULT_PAGE_SIZE,
- (float) DEFAULT_MARGINS_MM[3] * factor, // left
- (float) DEFAULT_MARGINS_MM[1] * factor, // right
- (float) DEFAULT_MARGINS_MM[0] * factor, // top
- (float) DEFAULT_MARGINS_MM[2] * factor // bottom
- );
-
- PdfWriter pdfWriter = PdfWriter.getInstance(document, outputStream);
- if (pdfa) {
- pdfWriter.setPDFXConformance(PdfWriter.PDFA1B);
- }
- document.open();
- if (pdfa) {
- PdfDictionary pdfOutputIntent = new PdfDictionary(PdfName.OUTPUTINTENT);
- pdfOutputIntent.put(PdfName.OUTPUTCONDITIONIDENTIFIER, new PdfString("sRGB IEC61966-2.1"));
- pdfOutputIntent.put(PdfName.INFO, new PdfString("sRGB IEC61966-2.1"));
- pdfOutputIntent.put(PdfName.S, PdfName.GTS_PDFA1);
- if (DEFAULT_ICC_COLOR_SPACE != null) {
- pdfOutputIntent.put(PdfName.DESTOUTPUTPROFILE, pdfWriter.addToBody(DEFAULT_ICC_COLOR_SPACE).getIndirectReference());
- }
- pdfWriter.getExtraCatalog().put(PdfName.OUTPUTINTENTS, new PdfArray(pdfOutputIntent));
- }
- addContent(document, pdfa, content);
- if (pdfa) {
- pdfWriter.createXmpMetadata();
- }
- document.close();
- }
-
-}
diff --git a/src/main/java/at/gv/egiz/pdfas/web/helper/TempDirHelper.java b/src/main/java/at/gv/egiz/pdfas/utils/TempDirHelper.java
index e7ce3ac..59b8953 100644
--- a/src/main/java/at/gv/egiz/pdfas/web/helper/TempDirHelper.java
+++ b/src/main/java/at/gv/egiz/pdfas/utils/TempDirHelper.java
@@ -1,22 +1,18 @@
/**
*
*/
-package at.gv.egiz.pdfas.web.helper;
+package at.gv.egiz.pdfas.utils;
import java.io.File;
-import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
-import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.Iterator;
import java.util.List;
-import javax.servlet.http.HttpServletResponse;
-
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -30,7 +26,6 @@ import at.gv.egiz.pdfas.impl.input.FileBasedTextDataSourceImpl;
import at.gv.egiz.pdfas.impl.input.TextDataSourceImpl;
import at.gv.egiz.pdfas.impl.input.helper.DataSourceHelper;
import at.gv.egiz.pdfas.impl.output.ByteArrayDataSink;
-import at.gv.egiz.pdfas.impl.output.FileBasedDataSink;
import at.knowcenter.wag.egov.egiz.cfg.SettingsReader;
import at.knowcenter.wag.egov.egiz.pdf.SignatureHolder;
import at.knowcenter.wag.egov.egiz.pdf.TextualSignatureHolder;
@@ -280,36 +275,36 @@ public class TempDirHelper
return ds;
}
- public static void writeDataSinkToHttpResponse(DataSink ds, HttpServletResponse response) throws IOException
- {
-
- response.setContentType(ds.getMimeType());
- response.setCharacterEncoding(ds.getCharacterEncoding());
-
- OutputStream os = response.getOutputStream();
-
- if (ds instanceof FileBasedDataSink)
- {
- FileBasedDataSink fbds = (FileBasedDataSink)ds;
- byte[] buffer = new byte[2048];
- FileInputStream fis = new FileInputStream(fbds.getFile());
- int n = -1;
- while ((n = fis.read(buffer)) > 0)
- {
- os.write(buffer, 0, n);
- }
- fis.close();
- }
- else
- {
- ByteArrayDataSink bads = (ByteArrayDataSink)ds;
- os.write(bads.getByteArray());
- os.flush();
-
- }
-
- os.close();
-}
+// public static void writeDataSinkToHttpResponse(DataSink ds, HttpServletResponse response) throws IOException
+// {
+//
+// response.setContentType(ds.getMimeType());
+// response.setCharacterEncoding(ds.getCharacterEncoding());
+//
+// OutputStream os = response.getOutputStream();
+//
+// if (ds instanceof FileBasedDataSink)
+// {
+// FileBasedDataSink fbds = (FileBasedDataSink)ds;
+// byte[] buffer = new byte[2048];
+// FileInputStream fis = new FileInputStream(fbds.getFile());
+// int n = -1;
+// while ((n = fis.read(buffer)) > 0)
+// {
+// os.write(buffer, 0, n);
+// }
+// fis.close();
+// }
+// else
+// {
+// ByteArrayDataSink bads = (ByteArrayDataSink)ds;
+// os.write(bads.getByteArray());
+// os.flush();
+//
+// }
+//
+// os.close();
+//}
/**
* Deletes the underlying file of the FileBased DataSource.
diff --git a/src/main/java/at/gv/egiz/pdfas/utils/WebUtils.java b/src/main/java/at/gv/egiz/pdfas/utils/WebUtils.java
deleted file mode 100644
index 4bca486..0000000
--- a/src/main/java/at/gv/egiz/pdfas/utils/WebUtils.java
+++ /dev/null
@@ -1,100 +0,0 @@
-package at.gv.egiz.pdfas.utils;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import javax.servlet.http.HttpSession;
-
-import org.apache.commons.lang.StringUtils;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import at.knowcenter.wag.egov.egiz.cfg.SettingsReader;
-import at.knowcenter.wag.egov.egiz.exceptions.SettingNotFoundException;
-import at.knowcenter.wag.egov.egiz.exceptions.SettingsException;
-import at.knowcenter.wag.egov.egiz.web.LocalRequestHelper;
-
-/**
- * @author tknall
- */
-public final class WebUtils {
-
- private WebUtils() {
- }
-
- /**
- * The log.
- */
- private final static Log LOG = LogFactory.getLog(WebUtils.class);
-
- /**
- * The configuration key that replaces a dynamically generated retrieve signature data url.
- */
- private final static String RETRIEVE_SIGNATURE_DATA_URL_OVERRIDE_KEY = "retrieve_signature_data_url_override";
-
- /**
- * Unlike {@link HttpServletResponse#encodeURL(String)} that adds only a
- * {@code JSESSIONID} entry to the given url if needed, this method always
- * adds the session id (except if already present within the url.
- *
- * @param url
- * The given url.
- * @param session
- * The {@link HttpSession}.
- * @return The given url plus a session id.
- */
- public static String addJSessionID(String url, HttpSession session) {
- if (url == null) {
- return null;
- }
- if (!StringUtils.containsIgnoreCase(url, ";jsessionid=")) {
- url = url + ";jsessionid=" + session.getId();
- LOG.debug("Adding jsessionid " + session.getId());
- } else {
- LOG.debug("No need to add a jsessionid.");
- }
- LOG.debug("Returning url " + url);
- return url;
- }
-
- /**
- * Unlike {@link HttpServletResponse#encodeURL(String)} that adds only a
- * {@code JSESSIONID} entry to the given url if needed, this method always
- * adds the session id (except if already present within the url.
- *
- * @param url
- * The given url.
- * @param request
- * The {@link HttpServletRequest}.
- * @return The given url plus a session id.
- */
- public static String addJSessionID(String url, HttpServletRequest request) {
- return addJSessionID(url, request.getSession());
- }
-
- /**
- * Either dynamically creates locref content url or uses a url provides by the pdf-as
- * configuration (key {@code retrieve_signature_data_url_override}).
- * @param request The {@link HttpServletRequest}.
- * @param response The {@link HttpServletResponse}.
- * @return The retrieve signature data url.
- */
- public static String buildRetrieveSignatureDataURL(HttpServletRequest request, HttpServletResponse response) {
- String override = null;
- LOG.debug("Building retrieve signature data url.");
- try {
- override = SettingsReader.getInstance().getSetting(RETRIEVE_SIGNATURE_DATA_URL_OVERRIDE_KEY, null);
- } catch (SettingsException e) {
- LOG.error(e);
- }
- String result;
- if (override == null) {
- result = WebUtils.addJSessionID(LocalRequestHelper.getLocalContextAddress(request, response) + "/RetrieveSignatureData", request);
- } else {
- LOG.debug("Override url found: " + override);
- result = WebUtils.addJSessionID(override, request);
- }
- LOG.debug("RetrieveSignatureDataURL = " + result);
- return result;
- }
-
-}
diff --git a/src/main/java/at/gv/egiz/pdfas/web/CurrentLocalOperation.java b/src/main/java/at/gv/egiz/pdfas/web/CurrentLocalOperation.java
deleted file mode 100644
index 83d214c..0000000
--- a/src/main/java/at/gv/egiz/pdfas/web/CurrentLocalOperation.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/**
- *
- */
-package at.gv.egiz.pdfas.web;
-
-import java.util.List;
-import java.util.Properties;
-
-import at.knowcenter.wag.egov.egiz.pdf.SignatureHolder;
-import at.knowcenter.wag.egov.egiz.web.LocalRequest;
-
-/**
- * Encapsulates a local operation.
- *
- * <p>
- * A local operation is a sequence of successive local verifications.
- * </p>
- * <p>
- * This is held on the VerifySessionInformation so that the DataURLServlet and RetrieveSignatureDataServlet
- * can provide their data to the local service easily.
- * </p>
- *
- * @author wprinz
- */
-public class CurrentLocalOperation
-{
-
- /**
- * The signature holders to be verified in the current local operation.
- */
- public List holders_to_be_verified;
-
-
- /**
- * An array of local requests to be processed.
- */
- public LocalRequest[] requests = null;
-
- /**
- * An array of response strings of the local requests.
- */
- public Properties[] response_properties = null;
-
- /**
- * The index of the holder/request to be processed.
- */
- public int current_operation = 0;
-
-// /**
-// * Tells, if the current local request has been finished.
-// */
-// public boolean finished = false;
-
- /**
- * @see at.gv.egiz.pdfas.web.LocalOperation#isFinished()
- */
- public boolean isFinished()
- {
- return this.current_operation >= this.requests.length;
- }
-
- /**
- * @see at.gv.egiz.pdfas.web.LocalOperation#getCurrentLocalRequest()
- */
- public LocalRequest getCurrentLocalRequest()
- {
- return this.requests[this.current_operation];
- }
-
- /**
- * @see at.gv.egiz.pdfas.web.LocalOperation#getCurrentSignatureHolder()
- */
- public SignatureHolder getCurrentSignatureHolder()
- {
- return (SignatureHolder) this.holders_to_be_verified.get(this.current_operation);
- }
-
- /**
- * @see at.gv.egiz.pdfas.web.LocalOperation#finishCurrentOperation(java.util.Properties)
- */
- public void finishCurrentOperation(Properties response_properties)
- {
- this.response_properties[this.current_operation] = response_properties;
-
- this.current_operation++;
- }
-}
diff --git a/src/main/java/at/gv/egiz/pdfas/web/SignSessionInformation.java b/src/main/java/at/gv/egiz/pdfas/web/SignSessionInformation.java
deleted file mode 100644
index 65015e1..0000000
--- a/src/main/java/at/gv/egiz/pdfas/web/SignSessionInformation.java
+++ /dev/null
@@ -1,139 +0,0 @@
-/**
- *
- */
-package at.gv.egiz.pdfas.web;
-
-import java.io.Serializable;
-import java.util.Properties;
-
-import javax.servlet.http.HttpSessionBindingEvent;
-import javax.servlet.http.HttpSessionBindingListener;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import at.gv.egiz.pdfas.framework.input.PdfDataSource;
-import at.gv.egiz.pdfas.framework.output.DataSink;
-import at.gv.egiz.pdfas.framework.signator.SignatorInformation;
-import at.gv.egiz.pdfas.web.helper.TempDirHelper;
-import at.knowcenter.wag.egov.egiz.pdf.TablePos;
-import at.knowcenter.wag.egov.egiz.web.ExternAppInformation;
-import at.knowcenter.wag.egov.egiz.web.LocalRequest;
-
-/**
- * @author wprinz
- *
- */
-public class SignSessionInformation implements HttpSessionBindingListener, Serializable
-{
- /**
- * SVUID.
- */
- private static final long serialVersionUID = 2739944460007369626L;
-
- /**
- * The log.
- */
- private static Log log = LogFactory.getLog(SignSessionInformation.class);
-
- /**
- * The connector.
- */
- public String connector = null;
-
- /**
- * For local requests, tells the application (sign, verify).
- */
- public String application = null;
-
- /**
- * Tells the operation mode (binary, textual).
- */
- public String mode = null;
-
- /**
- * The original, uploaded pdf.
- */
- public PdfDataSource pdfDataSource = null;
-
- /**
- * The type/profile of the signature.
- */
- public String type = null;
-
- /**
- * The suggested filename.
- */
- public String filename;
-
- /**
- * Tells, if the file download should be done inline or as attachment.
- */
- public boolean download_inline;
-
- /**
- * Object containing information about the calling webapplication.
- *
- * @author: Thomas Zefferer
- */
- public ExternAppInformation exappinf;
-
- /**
- * Information about the signature position
- *
- * @author: Thomas Zefferer
- */
- public TablePos pos;
-
- /**
- * The SignatorInformation.
- */
- public SignatorInformation si = null;
-
- /**
- * The DataSink to write the output data to.
- */
- public DataSink output = null;
-
- /**
- * The local request to be sent to the device.
- */
- public LocalRequest localRequest = null;
-
- /**
- * The response properties of the local request.
- */
- public Properties response_properties = null;
-
- /**
- * Tells if the sign request has been processed and the signed document is
- * available in the DataSink.
- */
- public boolean outputAvailable = false;
-
-
- /**
- * @see javax.servlet.http.HttpSessionBindingListener#valueBound(javax.servlet.http.HttpSessionBindingEvent)
- */
- public void valueBound(HttpSessionBindingEvent event)
- {
- log.debug("Bound SignSessionInformation to session (ID=" + event.getSession().getId() + ").");
- }
-
- /**
- * @see javax.servlet.http.HttpSessionBindingListener#valueUnbound(javax.servlet.http.HttpSessionBindingEvent)
- */
- public void valueUnbound(HttpSessionBindingEvent event)
- {
- log.debug("Unbound SignSessionInformation from session (ID=" + event.getSession().getId() + ").");
-
- if (this.pdfDataSource != null)
- {
- TempDirHelper.deleteDataSourceIfFileBased(this.pdfDataSource);
- }
- if (this.output != null)
- {
- TempDirHelper.deleteDataSinkIfFileBased(this.output);
- }
- }
-}
diff --git a/src/main/java/at/gv/egiz/pdfas/web/VerifySessionInformation.java b/src/main/java/at/gv/egiz/pdfas/web/VerifySessionInformation.java
deleted file mode 100644
index e998ded..0000000
--- a/src/main/java/at/gv/egiz/pdfas/web/VerifySessionInformation.java
+++ /dev/null
@@ -1,195 +0,0 @@
-/**
- * <copyright> Copyright (c) 2006 by Know-Center, Graz, Austria </copyright>
- *
- * This software is the confidential and proprietary information of Know-Center,
- * Graz, Austria. You shall not disclose such Confidential Information and shall
- * use it only in accordance with the terms of the license agreement you entered
- * into with Know-Center.
- *
- * KNOW-CENTER MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF
- * THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR
- * NON-INFRINGEMENT. KNOW-CENTER SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY
- * LICENSEE AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS
- * DERIVATIVES.
- *
- * $Id: SessionInformation.java,v 1.2 2006/08/25 17:06:11 wprinz Exp $
- */
-package at.gv.egiz.pdfas.web;
-
-import java.io.Serializable;
-import java.util.Iterator;
-import java.util.List;
-
-import javax.servlet.http.HttpSessionBindingEvent;
-import javax.servlet.http.HttpSessionBindingListener;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import at.gv.egiz.pdfas.framework.input.DataSource;
-import at.gv.egiz.pdfas.web.helper.TempDirHelper;
-import at.knowcenter.wag.egov.egiz.pdf.SignatureHolder;
-import at.knowcenter.wag.egov.egiz.pdf.TablePos;
-import at.knowcenter.wag.egov.egiz.web.ExternAppInformation;
-
-/**
- * This class is a collection of various session parameters that are passed
- * between the servlets and jsps.
- *
- * <p>
- * The SessionInformation class contains type safe references to the objects.
- * </p>
- *
- * @author wprinz
- */
-public class VerifySessionInformation implements HttpSessionBindingListener, Serializable
-{
-
- /**
- * SVUID.
- */
- private static final long serialVersionUID = -7413884936584659150L;
-
- /**
- * The log.
- */
- private static Log log = LogFactory.getLog(VerifySessionInformation.class);
-
- /**
- * The connector.
- */
- public String connector = null;
-
- /**
- * For local requests, tells the application (sign, verify).
- */
- public String application = null;
-
- /**
- * Tells the operation mode (binary, textual).
- */
- public String mode = null;
-
- /**
- * The original, uploaded pdf.
- */
- //public FileBasedPdfDataSourceImpl pdfDataSource = null;
- public DataSource inputDataSource = null;
-
- /**
- * The type/profile of the signature.
- */
- public String type = null;
-
-// /**
-// * The user name.
-// */
-// public String user_name = null;
-//
-// /**
-// * The password.
-// */
-// public String user_password = null;
-
- /**
- * All SignatureHolders extracted from the document.
- */
- public List signature_holders;
-
- /**
- * Keeps track of the currently running local operation.
- *
- * <p>
- * Only valid during local verify.
- * </p>
- */
- public CurrentLocalOperation currentLocalOperation = null;
-
- /**
- * This is used only for MOA loc-ref web verify.
- */
- public SignatureHolder moa_holder;
-
-
-// /**
-// * The incremental update information that has been extracted from the given
-// * PDF document.
-// */
-// public IncrementalUpdateInformation iui;
-
-// public SignatorInformation si = null;
-
-// public FileBasedDataSink output = null;
-
-
-// /**
-// * Copy of signature holders. It's needed by BKU when we try to verify single by single
-// * signature.
-// */
-// public List copy_of_signature_holders;
-
-// /**
-// * The suggested filename.
-// */
-// public String filename;
-//
-// /**
-// * Tells, if the file download should be done inline or as attachment.
-// */
-// public boolean download_inline;
-
-//// /**
-//// * The sign result to be passed back to the user.
-//// */
-//// public SignResult sign_result;
-//
-// public boolean isSignFinished = false;
-
-
-
- /**
- * Object containing information about the calling webapplication.
- * @author: Thomas Zefferer
- */
- public ExternAppInformation exappinf;
-
- /**
- * Information about the signature position
- * @author: Thomas Zefferer
- */
- public TablePos pos ;
-
-
-
- /**
- * @see javax.servlet.http.HttpSessionBindingListener#valueBound(javax.servlet.http.HttpSessionBindingEvent)
- */
- public void valueBound(HttpSessionBindingEvent event)
- {
- log.debug("Bound SignSessionInformation to session.");
- }
-
- /**
- * @see javax.servlet.http.HttpSessionBindingListener#valueUnbound(javax.servlet.http.HttpSessionBindingEvent)
- */
- public void valueUnbound(HttpSessionBindingEvent event)
- {
- log.debug("Unbound SignSessionInformation from session.");
-
- if (this.inputDataSource != null)
- {
- TempDirHelper.deleteDataSourceIfFileBased(this.inputDataSource);
- }
- if (this.signature_holders != null)
- {
- Iterator it = this.signature_holders.iterator();
- while (it.hasNext())
- {
- SignatureHolder sh = (SignatureHolder) it.next();
- TempDirHelper.deleteDataSourceIfFileBased(sh.getDataSource());
- }
- }
- }
-
-}
diff --git a/src/main/java/at/gv/egiz/pdfas/web/filter/EncodingFilter.java b/src/main/java/at/gv/egiz/pdfas/web/filter/EncodingFilter.java
deleted file mode 100644
index 5267918..0000000
--- a/src/main/java/at/gv/egiz/pdfas/web/filter/EncodingFilter.java
+++ /dev/null
@@ -1,123 +0,0 @@
-package at.gv.egiz.pdfas.web.filter;
-
-import java.io.IOException;
-import java.nio.charset.Charset;
-
-import javax.servlet.FilterChain;
-import javax.servlet.FilterConfig;
-import javax.servlet.ServletException;
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
-
-import org.apache.commons.lang.StringUtils;
-import org.apache.commons.lang.builder.ToStringBuilder;
-import org.apache.log4j.Logger;
-
-/**
- * @author <a href="mailto:thomas.knall@iaik.tugraz.at">Thomas Knall</a>
- */
-public class EncodingFilter implements javax.servlet.Filter {
-
- private static final String SERVLET_INIT_PARAM_ENCODING = "encoding";
-
- private static final String SERVLET_INIT_PARAM_SET_REQUEST_ENCODING = "setRequestEncoding";
- private static final String SERVLET_INIT_PARAM_FORCE_REQUEST_ENCODING = "forceRequestEncoding";
-
- private static final String SERVLET_INIT_PARAM_SET_RESPONSE_ENCODING = "setResponseEncoding";
- private static final String SERVLET_INIT_PARAM_FORCE_RESPONSE_ENCODING = "forceResponseEncoding";
-
- private static final boolean DEFAULT_SET_REQUEST_ENCODING_VALUE = true;
- private static final boolean DEFAULT_FORCE_REQUEST_ENCODING_VALUE = true;
- private static final boolean DEFAULT_SET_RESPONSE_ENCODING_VALUE = false;
- private static final boolean DEFAULT_FORCE_RESPONSE_ENCODING_VALUE = false;
-
- private Logger log = Logger.getLogger(getClass().getName());
-
- private String encoding = null;
-
- private boolean setRequestEncoding;
- private boolean forceRequestEncoding;
-
- private boolean setResponseEncoding;
- private boolean forceResponseEncoding;
-
- private boolean enabled = false;
-
- private boolean parseBooleanInitParameter(final FilterConfig filterConfig, String parameterName, boolean defaultValue) {
- String paramValue = filterConfig.getInitParameter(parameterName);
- if (paramValue == null) {
- return defaultValue;
- }
- paramValue = paramValue.trim();
- if (paramValue.equalsIgnoreCase("true")) {
- return true;
- } else if (paramValue.equalsIgnoreCase("false")){
- return false;
- } else {
- log.warn("Unknown value \"" + paramValue + "\" for init parameter \"" + parameterName + "\" detected. Should be \"true\" or \"false\". Using default value \"" + defaultValue + "\".");
- return defaultValue;
- }
- }
-
- public void init(final FilterConfig filterConfig) throws ServletException {
- log.debug("Initializing encoding filter (" + getClass().getName() + ").");
-
- // mandatory parameter encoding
- String desiredEncoding = filterConfig.getInitParameter(SERVLET_INIT_PARAM_ENCODING);
- if (StringUtils.isEmpty(desiredEncoding)) {
- log.warn("Unable to initialize encoding filter (" + getClass().getName() + "). Init parameter \"" + SERVLET_INIT_PARAM_ENCODING + "\" empty or not supplied.");
- } else if (!Charset.isSupported(desiredEncoding)) {
- log.warn("Unable to initialize encoding filter (" + getClass().getName() + "). Encoding \"" + desiredEncoding + "\" is not supported.");
- } else {
- this.encoding = desiredEncoding;
- this.enabled = true;
- this.setRequestEncoding = this.parseBooleanInitParameter(filterConfig, SERVLET_INIT_PARAM_SET_REQUEST_ENCODING, DEFAULT_SET_REQUEST_ENCODING_VALUE);
- this.forceRequestEncoding = this.parseBooleanInitParameter(filterConfig, SERVLET_INIT_PARAM_FORCE_REQUEST_ENCODING, DEFAULT_FORCE_REQUEST_ENCODING_VALUE);
- this.setResponseEncoding = this.parseBooleanInitParameter(filterConfig, SERVLET_INIT_PARAM_SET_RESPONSE_ENCODING, DEFAULT_SET_RESPONSE_ENCODING_VALUE);
- this.forceResponseEncoding = this.parseBooleanInitParameter(filterConfig, SERVLET_INIT_PARAM_FORCE_RESPONSE_ENCODING, DEFAULT_FORCE_RESPONSE_ENCODING_VALUE);
- log.debug("Encoding filter \"" + getClass().getName() + "\" configured: " + this.toString(true));
-
- }
- }
-
- public String toString(boolean verbose) {
- if (verbose) {
- return new ToStringBuilder(this)
- .append(SERVLET_INIT_PARAM_ENCODING, this.encoding)
- .append(SERVLET_INIT_PARAM_SET_REQUEST_ENCODING, this.setRequestEncoding)
- .append(SERVLET_INIT_PARAM_FORCE_REQUEST_ENCODING, this.forceRequestEncoding)
- .append(SERVLET_INIT_PARAM_SET_RESPONSE_ENCODING, this.setResponseEncoding)
- .append(SERVLET_INIT_PARAM_FORCE_RESPONSE_ENCODING, this.forceResponseEncoding)
- .toString();
- } else {
- return super.toString();
- }
- }
-
- public void doFilter(ServletRequest request, ServletResponse response, final FilterChain filterChain) throws IOException, ServletException {
- if (this.enabled) {
- if (this.setRequestEncoding) {
- if (this.forceRequestEncoding) {
- log.trace("Forcing request encoding \"" + this.encoding + "\".");
- request.setCharacterEncoding(this.encoding);
- } else if (request.getCharacterEncoding() == null) {
- log.trace("Request character encoding not set. Setting to \"" + this.encoding + "\".");
- request.setCharacterEncoding("UTF8");
- }
- }
- if (this.setResponseEncoding) {
- if (this.forceResponseEncoding) {
- log.trace("Forcing response encoding \"" + this.encoding + "\".");
- response.setCharacterEncoding(this.encoding);
- } else if (response.getCharacterEncoding() == null) {
- log.trace("Response character encoding not set. Setting to \"" + this.encoding + "\".");
- response.setCharacterEncoding("UTF8");
- }
- }
- }
- filterChain.doFilter(request, response);
- }
-
- public void destroy() {
- }
-}
diff --git a/src/main/java/at/gv/egiz/pdfas/web/helper/SessionHelper.java b/src/main/java/at/gv/egiz/pdfas/web/helper/SessionHelper.java
deleted file mode 100644
index ca09871..0000000
--- a/src/main/java/at/gv/egiz/pdfas/web/helper/SessionHelper.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/**
- *
- */
-package at.gv.egiz.pdfas.web.helper;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpSession;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import at.gv.egiz.pdfas.exceptions.web.SessionExpiredException;
-import at.knowcenter.wag.egov.egiz.web.SessionAttributes;
-
-/**
- * @author wprinz
- *
- */
-public class SessionHelper
-{
- /**
- * The log.
- */
- private static Log log = LogFactory.getLog(SessionHelper.class);
-
- public static Object getSession(HttpServletRequest request) throws SessionExpiredException
- {
-
- HttpSession session = request.getSession(false);
- if (session == null)
- {
- String msg = "There is no session associated with this request."; //$NON-NLS-1$
- log.error(msg);
- throw new SessionExpiredException(msg);
- }
-
- Object sessionObject = session.getAttribute(SessionAttributes.ATTRIBUTE_SESSION_INFORMATION);
- if (sessionObject == null)
- {
- String msg = "Unable to find session data in session " + session.getId();
- log.error(msg);
- throw new SessionExpiredException(msg);
- }
-
- return sessionObject;
- }
-}
diff --git a/src/main/java/at/gv/egiz/pdfas/web/helper/SignServletHelper.java b/src/main/java/at/gv/egiz/pdfas/web/helper/SignServletHelper.java
deleted file mode 100644
index 7e121b9..0000000
--- a/src/main/java/at/gv/egiz/pdfas/web/helper/SignServletHelper.java
+++ /dev/null
@@ -1,309 +0,0 @@
-/**
- *
- */
-package at.gv.egiz.pdfas.web.helper;
-
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.net.URL;
-
-import javax.servlet.RequestDispatcher;
-import javax.servlet.ServletContext;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import javax.servlet.http.HttpSession;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import at.gv.egiz.pdfas.api.commons.Constants;
-import at.gv.egiz.pdfas.framework.SignatorFactory;
-import at.gv.egiz.pdfas.framework.signator.Signator;
-import at.gv.egiz.pdfas.impl.output.ByteArrayDataSink;
-import at.gv.egiz.pdfas.impl.output.FileBasedDataSink;
-import at.gv.egiz.pdfas.utils.WebUtils;
-import at.gv.egiz.pdfas.web.SignSessionInformation;
-import at.knowcenter.wag.egov.egiz.PdfASID;
-import at.knowcenter.wag.egov.egiz.exceptions.PDFDocumentException;
-import at.knowcenter.wag.egov.egiz.exceptions.PresentableException;
-import at.knowcenter.wag.egov.egiz.framework.signators.DetachedSignator_1_0_0;
-import at.knowcenter.wag.egov.egiz.sig.ConnectorFactory;
-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.bku.SignSignatureObject;
-import at.knowcenter.wag.egov.egiz.web.FormFields;
-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.servlets.ProvidePDFServlet;
-
-/**
- * @author wprinz
- *
- */
-public class SignServletHelper
-{
- /**
- * The log.
- */
- private static Log log = LogFactory.getLog(SignServletHelper.class);
-
- public 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);
- }
-
-
- /**
- * 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(SignSessionInformation 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.si = signator.prepareSign(si.pdfDataSource, si.type, si.pos, null);
- // 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(SignSessionInformation si, HttpServletRequest request, HttpServletResponse response, ServletContext context) throws PresentableException, IOException, ServletException
- {
- log.debug("finishSign:"); //$NON-NLS-1$
-
- // check if document is empty
- if (si.si.getSignatureData() == null || si.si.getSignatureData().getDataSource().getLength() == 0) {
- throw new PDFDocumentException(251, "Unable to extract and textual content.");
- }
-
- 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();
-
- // TODO TR: Web-Applikation verwendet in Loc-Ref-Variante ext. Referenz, um performanter zu sein;
- // nachfolend auskommentieren, wenn anstatt SwA-Connector LocRef-Connector verwendet wird
-// URL signature_data_URL = new URL(WebUtils.addJSessionID(LocalRequestHelper.getLocalContextAddress(request, response) + "/RetrieveSignatureData", request));
- URL signature_data_URL = new URL(WebUtils.buildRetrieveSignatureDataURL(request, response));
- String signature_data_url = response.encodeURL(signature_data_URL.toString());
-
- Connector c = ConnectorChooser.chooseWebConnectorForSign(si.connector, si.type, signature_data_url);
- SignSignatureObject signSignatureObject = c.doSign(si.si.getSignatureData());
-
- si.si.setSignSignatureObject(signSignatureObject);
-
- si.output = TempDirHelper.createTempDataSink(si.filename + "_signed.pdf");
- signator.finishSign(si.si, si.output);
-
- returnSignResponse(si, request, response);
- log.debug("finishSign finished."); //$NON-NLS-1$
-
- }
-
- /**
- * Returns the data in the SignResult with proper content disposition.
- *
- * @param si
- * SessionInformation.
- * @parem request The servlet request.
- * @param response
- * The servlet response.
- * @throws IOException
- * The IO Exception.
- */
- public static void returnSignResponse(SignSessionInformation si, HttpServletRequest request, HttpServletResponse response) throws IOException
- {
-// SignResult sign_result = si.sign_result;
-
- String file_name = formatFileNameForSignResult(si.filename, si.output.getMimeType());
-
- // 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(si.output.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 + "\"");
- }
-
- TempDirHelper.writeDataSinkToHttpResponse(si.output, response);
- //response.getOutputStream().write(sign_result.getData());
-
- // tzefferer: added else-block
- }
- else
- {
- /**
- * The following code handles an external invocation of pdf-as. External invocation is done by
- * redirecting the user to the Sign-Servlet using the parameters defined in class
- * at.knowcenter.wag.egov.egiz.web.FormFields.
- * e.g. http://localhost:48080/pdf-as/Sign?preview=false&connector=bku&mode=textual&sig_type=SIGNATURBLOCK_DE&inline=false&filename=test.pdf&num-bytes=45916&pdf-url=http%3A%2F%2Flocalhost%3A8080%2Fmyapp%2FProvidePDF&pdf-id=1956507909008215134&invoke-app-url=https%3A%2F%2Flocalhost%3A8443%2Fmyapp%2FReturnSignedPDF&invoke-app-error-url=https%3A%2F%2Flocalhost%3A8443%2Fmyapp%2Fpdfaserror.do&session-id=9085B85B364BEC31E7D38047FE54577D&locale=de
- */
- log.debug("External webapp invocation detected.");
- byte [] signed_pdf = null;
- if (si.output instanceof FileBasedDataSink)
- {
- FileBasedDataSink fbds = (FileBasedDataSink)si.output;
- signed_pdf = new byte [(int)fbds.getFile().length()];
- FileInputStream fis = new FileInputStream(fbds.getFile());
- fis.read(signed_pdf);
- fis.close();
- }
- else
- {
- ByteArrayDataSink bads = (ByteArrayDataSink)si.output;
- signed_pdf = bads.getByteArray();
- }
- HttpSession session = request.getSession();
-
- 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;
-
- log.debug("External application has to be notified. Building url from callback url \"" + invoke_url + "\".");
-
- // build URL
- int ind = invoke_url.indexOf("?");
-
- // fixed by tknall: must not presume that invoke_url contains "?"
- String sep = "&";
- if (ind == -1) {
- ind = invoke_url.length();
- sep = "?";
- }
-
- String query = invoke_url.substring(0, ind) + ";jsessionid=" + session_id + invoke_url.substring(ind)
- + sep + FormFields.FIELD_PDF_URL + "=" + providePDFServlet + "&" + FormFields.FIELD_PDF_ID
- + "=" + pdf_id + "&" + FormFields.FIELD_FILE_LENGTH + "=" + signed_pdf.length
- + "&" + FormFields.FIELD_PDFAS_SESSION_ID + "=" + session.getId();
-
- /*
- * Using the external web-interface of pdf-as (as described above) pdf-as should be run within
- * an iframe. In case of a signature performed with a local citizen card software or with the
- * server bku the result has to be provided outside the iframe. To break out of the iframe a
- * helper jsp (redirect_to_parent) has to be used that redirects the user to the parent
- * window.
- */
- disableBrowserCacheForResponse(response);
- if (Constants.SIGNATURE_DEVICE_BKU.equals(si.connector) || Constants.SIGNATURE_DEVICE_MOC.equals(si.connector)) {
- log.debug("Pdf-as is supposed to run within an iframe.");
- log.debug("Putting external application notify url (\"" + query + "\") in session (" + session.getId() + ") for later use.");
- session.setAttribute(SessionAttributes.PARENT_WEBAPP_REDIRECT_URL, query);
- String redirectHelper = response.encodeRedirectURL(request.getContextPath() + "/jsp/redirect_to_parent.jsp");
-
- log.debug("Redirecting to " + redirectHelper);
- log.debug("The browser will finally be redirected outside the iframe to " + query + " in order to notify the external application.");
-
- response.sendRedirect(redirectHelper);
-
- } else {
- log.debug("Notifying external application by redirecting to \"" + query + "\".");
- response.sendRedirect(query);
- }
-
- }
-
- }
-
- public static void disableBrowserCacheForResponse(HttpServletResponse response) {
- log.debug("Disabling browser cache for HttpServletResponse.");
- response.setHeader("Cache-Control", "no-cache");
- response.setHeader("Pragma","no-cache");
- response.setDateHeader("Expires", -1);
- }
-
- /**
- * 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, String mimeType)
- {
- String output = file_name + "_signed";
- if (mimeType.equals(DetachedSignator_1_0_0.MIME_TYPE))
- {
- output += ".xml";
- }
- else
- {
- output += ".pdf";
- }
-
- return output;
- }
-}
diff --git a/src/main/java/at/gv/egiz/pdfas/web/helper/SigningTimeHelper.java b/src/main/java/at/gv/egiz/pdfas/web/helper/SigningTimeHelper.java
deleted file mode 100644
index 673c197..0000000
--- a/src/main/java/at/gv/egiz/pdfas/web/helper/SigningTimeHelper.java
+++ /dev/null
@@ -1,83 +0,0 @@
-package at.gv.egiz.pdfas.web.helper;
-
-import java.util.Date;
-
-import org.apache.commons.lang.time.DateFormatUtils;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import at.gv.egiz.pdfas.exceptions.ErrorCode;
-import at.gv.egiz.pdfas.framework.signator.SignatorInformation;
-import at.knowcenter.wag.egov.egiz.cfg.SettingsReader;
-import at.knowcenter.wag.egov.egiz.exceptions.SettingsException;
-import at.knowcenter.wag.egov.egiz.exceptions.SignatureException;
-import at.knowcenter.wag.egov.egiz.pdf.EGIZDate;
-import at.knowcenter.wag.egov.egiz.sig.connectors.bku.SignSignatureObject;
-
-/**
- * This class deals with invalid signing times.
- * @author tknall
- */
-public final class SigningTimeHelper {
-
- private SigningTimeHelper() {
- }
-
- private static Integer tolerance = null;
-
- /**
- * The log.
- */
- private final static Log LOG = LogFactory.getLog(SigningTimeHelper.class);
-
- private final static String SIGNING_TIME_TOLERANCE_KEY = "signing_time_tolerance";
- private final static String FORMAT_UTC_DATE_PATTERN = "yyyy-MM-dd'T'HH:mm:ss'Z'";
-
- public static void checkSigningTimeAgainstHostTime(SignatorInformation si) throws SignatureException {
- checkSigningTimeAgainstHostTime(si.getSignSignatureObject());
- }
-
- public static synchronized void checkSigningTimeAgainstHostTime(SignSignatureObject sso) throws SignatureException {
- if (tolerance == null) {
- try {
- String toleranceString = SettingsReader.getInstance().getSetting(SIGNING_TIME_TOLERANCE_KEY, "-1");
- tolerance = new Integer(Integer.parseInt(toleranceString));
- } catch (NumberFormatException e) {
- LOG.warn("Invalid configuration key = " + SIGNING_TIME_TOLERANCE_KEY + ". Disabling signing time check.");
- tolerance = new Integer(-1);
- } catch (SettingsException e) {
- LOG.error("Error reading settings. Disabling signing time check.", e);
- tolerance = new Integer(-1);
- }
- }
- if (tolerance.intValue() == -1) {
- return;
- }
-
- // signing time
- Date signingTime = EGIZDate.parseDateFromString(sso.getDate());
-
- // current time
- Date currentTime = new Date();
-
- // lower limit
- Date lowerLimit = new Date(currentTime.getTime() - tolerance.intValue()*1000);
-
- // upper limit
- Date upperLimit = new Date(currentTime.getTime() + tolerance.intValue()*1000);
-
- String signingTimeString = DateFormatUtils.formatUTC(signingTime, FORMAT_UTC_DATE_PATTERN);
-
- if (LOG.isDebugEnabled()) {
- String lower = DateFormatUtils.formatUTC(lowerLimit, FORMAT_UTC_DATE_PATTERN);
- String upper = DateFormatUtils.formatUTC(upperLimit, FORMAT_UTC_DATE_PATTERN);
- LOG.debug("Checking if signing time " + signingTimeString + " is valid according to the given time frame [ " + lower + ", " + upper + " ].");
- }
-
- if (signingTime.before(lowerLimit) || signingTime.after(upperLimit)) {
- throw new SignatureException(ErrorCode.INVALID_SIGNING_TIME, "The signing time " + signingTimeString + " is out of the given tolerance of " + tolerance.intValue() + " seconds.");
- }
-
- }
-
-}
diff --git a/src/main/java/at/gv/egiz/pdfas/web/i18n/LanguageDecoratorMapper.java b/src/main/java/at/gv/egiz/pdfas/web/i18n/LanguageDecoratorMapper.java
deleted file mode 100644
index 42e6b03..0000000
--- a/src/main/java/at/gv/egiz/pdfas/web/i18n/LanguageDecoratorMapper.java
+++ /dev/null
@@ -1,125 +0,0 @@
-package at.gv.egiz.pdfas.web.i18n;
-
-import java.io.File;
-import java.util.Locale;
-import java.util.Properties;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpSession;
-
-import org.apache.log4j.Logger;
-
-import com.opensymphony.module.sitemesh.Config;
-import com.opensymphony.module.sitemesh.Decorator;
-import com.opensymphony.module.sitemesh.DecoratorMapper;
-import com.opensymphony.module.sitemesh.Page;
-import com.opensymphony.module.sitemesh.mapper.AbstractDecoratorMapper;
-import com.opensymphony.module.sitemesh.mapper.DefaultDecorator;
-
-public class LanguageDecoratorMapper extends AbstractDecoratorMapper {
-
-
- private String decoratorParameter = null;
-
- private static final Logger LOG = Logger.getLogger(LanguageDecoratorMapper.class);
-
- public void init(Config config, Properties properties, DecoratorMapper parent) throws InstantiationException {
- super.init(config, properties, parent);
- }
-
- public static Object getFirstNotNull(Object[] objects) {
- if (objects == null) {
- return null;
- }
- for (int i = 0; i < objects.length; i++) {
- if (objects[i] != null) {
- return objects[i];
- }
- }
- return null;
- }
-
- public static Locale getLocale(HttpServletRequest request, String decoratorParameter) {
- Locale locale = null;
- HttpSession session = request.getSession();
-
- LOG.trace("Looking for locale in session (ID=" + session.getId() + ").");
- locale = (Locale) session.getAttribute(LocaleParamFilter.LOCALE_SESSION_KEY);
- if (locale == null) {
- LOG.debug("Unable to find locale in session. Trying to create new locale based on Accept-Language header entry.");
- String acceptLanguage = request.getHeader("Accept-Language");
- if (acceptLanguage != null) {
- LOG.trace("Accept-Language header entry: " + acceptLanguage);
- } else {
- LOG.trace("No header entry found.");
- }
- if (acceptLanguage != null && acceptLanguage.length() >= 2) {
- locale = new Locale(acceptLanguage.substring(0, 2));
- LOG.debug("New Locale created: " + locale);
- LOG.trace("Setting language to " + locale.getDisplayLanguage() + ".");
- session.setAttribute(LocaleParamFilter.LOCALE_SESSION_KEY, locale);
- }
- } else {
- LOG.trace("Locale found: " + locale);
- }
-
- return locale;
- }
-
- public Decorator getDecorator(HttpServletRequest request, Page page) {
- LOG.trace("SiteMesh language resource decorator mapper invoked.");
-
- try {
- Decorator result = null;
- final Decorator d = super.getDecorator(request, page);
- Locale locale = getLocale(request, this.decoratorParameter);
-
- String path;
- if (locale != null) {
- path = modifyPath(d.getPage(), locale.getLanguage());
- } else {
- path = d.getPage();
- }
-
- File decFile = new File(config.getServletContext().getRealPath(path));
-
- LOG.trace("Looking for decorator \"" + path + "\".");
- if (decFile.isFile()) {
- result = new DefaultDecorator(d.getName(), path, null) {
- public String getInitParameter(String paramName) {
- return d.getInitParameter(paramName);
- }
- };
- }
-
- if (result != null) {
- LOG.trace("Decorator found (\"" + result.getName() + "\", \"" + getFirstNotNull(new Object[] { result.getURIPath(), result.getPage(), "<n/a>"}) + "\").");
- return result;
- } else {
- LOG.trace("No decorator found. Delegating to super class.");
- result = super.getDecorator(request, page);
- if (result != null) {
- LOG.trace("Super class returned decorator (\"" + result.getName() + "\", \"" + getFirstNotNull(new Object[] { result.getURIPath(), result.getPage(), "<n/a>"}) + "\").");
- } else {
- LOG.trace("Super class did not return a decorator.");
- }
- return result;
- }
- } catch (NullPointerException e) {
- return super.getDecorator(request, page);
- }
- }
-
- private static String modifyPath(String path, String ext) {
- if (ext == null || ext.length() == 0) {
- return path;
- }
- int dot = path.lastIndexOf('.');
- if (dot > -1) {
- return path.substring(0, dot) + '-' + ext + path.substring(dot);
- } else {
- return path + '-' + ext;
- }
- }
-
-}
diff --git a/src/main/java/at/gv/egiz/pdfas/web/i18n/LocaleParamFilter.java b/src/main/java/at/gv/egiz/pdfas/web/i18n/LocaleParamFilter.java
deleted file mode 100644
index 598b23b..0000000
--- a/src/main/java/at/gv/egiz/pdfas/web/i18n/LocaleParamFilter.java
+++ /dev/null
@@ -1,96 +0,0 @@
-package at.gv.egiz.pdfas.web.i18n;
-
-import java.io.IOException;
-import java.util.Locale;
-import java.util.StringTokenizer;
-
-import javax.servlet.Filter;
-import javax.servlet.FilterChain;
-import javax.servlet.FilterConfig;
-import javax.servlet.ServletException;
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpSession;
-
-import org.apache.commons.lang.LocaleUtils;
-import org.apache.commons.lang.StringUtils;
-import org.apache.log4j.Logger;
-
-public class LocaleParamFilter implements Filter {
-
- private static final Logger LOG = Logger.getLogger(LocaleParamFilter.class);
- public static final String LOCALE_SESSION_KEY = "at.gv.egiz.pdfas.web.i18n:currentLocale";
- public static final String LOCALE_PARAM_KEY = "locale";
-
- public void destroy() {
- }
-
- public static String normalizeLocaleString(String localeString) {
- if (localeString == null) {
- return null;
- }
- int jsessionIdIndex = localeString.toLowerCase().indexOf(";jsessionid");
- if (jsessionIdIndex != -1) {
- localeString = localeString.substring(0, jsessionIdIndex);
- }
- StringTokenizer tokenizer = new StringTokenizer(localeString, "_", false);
- StringBuffer buffer = new StringBuffer();
- int index = 0;
- while (tokenizer.hasMoreTokens()) {
- String token = tokenizer.nextToken();
- switch (++index) {
- case 1:
- buffer.append(token.toLowerCase());
- break;
- case 2:
- buffer.append(token.toUpperCase());
- break;
- default:
- buffer.append(token);
- break;
- }
- if (tokenizer.hasMoreTokens()) {
- buffer.append("_");
- }
- }
- return buffer.toString();
- }
-
- public static Locale getLocale(HttpServletRequest request) {
- Locale locale = null;
- HttpSession session = request.getSession();
-
- LOG.trace("Looking for locale parameter \"" + LOCALE_PARAM_KEY + "\".");
- String language = request.getParameter(LOCALE_PARAM_KEY);
- if (!StringUtils.isEmpty(language)) {
- LOG.debug("Locale parameter \"" + language + "\" found.");
- String code = normalizeLocaleString(language.trim());
- LOG.debug("Normalizing locale -> " + code);
- try {
- locale = LocaleUtils.toLocale(code);
- LOG.info("Setting locale flag in session (ID=" + session.getId() + ") to \"" + locale.toString() + "\".");
- session.setAttribute(LOCALE_SESSION_KEY, locale);
- } catch (IllegalArgumentException e) {
- LOG.error("Locale \"" + code + "\" is not valid. Flag will not be set.");
- }
- } else {
- LOG.trace("No locale parameter found.");
- }
-
- return locale;
- }
-
- public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
- HttpServletRequest request = (HttpServletRequest) servletRequest;
-
- LOG.trace("LocaleParamFilter invoked.");
- getLocale(request);
-
- filterChain.doFilter(servletRequest, servletResponse);
- }
-
- public void init(FilterConfig filterConfig) throws ServletException {
- }
-
-}