From eb68e29e371ef3e944f682239e6f3f92cb084697 Mon Sep 17 00:00:00 2001 From: tknall Date: Mon, 9 Jun 2008 15:27:50 +0000 Subject: Web-Application: Configuration may be declared via system property "pdf-as.work-dir" or via Servlet-Init-Parameter "work-dir". Bug fixed in RetrieveSignatureDataServlet: Response header didn't contain a content length attribute. The ITS Mac BKU rejects those requests. Workaround for ITS Mac BKU integrated. A redirect via response does only work if the response contains a valid SL request (e.g. a NullOperationRequest). API: The configuration folder may be omitted at instantiating the api. Configuration may be set via system property "pdf-as.work-dir". If no configuration is given at all, the current user's home directory is searched for a folder "PDF-AS". If not found a default configuration is created. If the configuration is explicitely given than the temporary folder is located within the given directory otherwise within the user's temporary directory. Declaring the configuration folder, replacements for system properties like "${catalina.base}/conf/pdfas" may be used. Web-Application: Session is now being invalidated after download of the signed pdf file. Web-Application: Every hardcoded context "pdf-as" has been replaced. git-svn-id: https://joinup.ec.europa.eu/svn/pdf-as/trunk@277 7b5415b0-85f9-ee4d-85bd-d5d0c3b42d1c --- src/main/java/at/gv/egiz/pdfas/PdfAsFactory.java | 54 +++++-- .../at/gv/egiz/pdfas/api/commons/Constants.java | 22 +++ .../pdfas/api/exceptions/ConfigUtilsException.java | 99 ++++++++++++ .../java/at/gv/egiz/pdfas/commandline/Main.java | 37 ++++- .../at/gv/egiz/pdfas/impl/api/PdfAsObject.java | 35 ++-- .../java/at/gv/egiz/pdfas/utils/ConfigUtils.java | 176 +++++++++++++++++++++ .../java/at/gv/egiz/pdfas/utils/StreamUtils.java | 1 + .../at/gv/egiz/pdfas/web/helper/SessionHelper.java | 1 - .../egiz/pdfas/web/helper/SignServletHelper.java | 2 +- .../at/gv/egiz/pdfas/web/helper/TempDirHelper.java | 66 +++++++- 10 files changed, 451 insertions(+), 42 deletions(-) create mode 100644 src/main/java/at/gv/egiz/pdfas/api/exceptions/ConfigUtilsException.java create mode 100644 src/main/java/at/gv/egiz/pdfas/utils/ConfigUtils.java (limited to 'src/main/java/at/gv/egiz/pdfas') diff --git a/src/main/java/at/gv/egiz/pdfas/PdfAsFactory.java b/src/main/java/at/gv/egiz/pdfas/PdfAsFactory.java index bc6f89d..6ec16f1 100644 --- a/src/main/java/at/gv/egiz/pdfas/PdfAsFactory.java +++ b/src/main/java/at/gv/egiz/pdfas/PdfAsFactory.java @@ -8,6 +8,7 @@ import java.io.File; import at.gv.egiz.pdfas.api.PdfAs; import at.gv.egiz.pdfas.api.exceptions.PdfAsException; import at.gv.egiz.pdfas.impl.api.PdfAsObject; +import at.knowcenter.wag.egov.egiz.PdfAS; /** * Main factory for creating a PDF-AS API Instance (PdfAs Interface). @@ -18,22 +19,41 @@ import at.gv.egiz.pdfas.impl.api.PdfAsObject; */ public class PdfAsFactory { - /** - * Creates a PDF-AS API instance for the given work directory. - * - * @param workDirectory - * The work directory. - * - * @return Returns an instance of the PDF-AS API. - * @throws IllegalArgumentException - * Thrown, if the workDirectory doesn't exist. - * @throws PdfAsException - * Thrown, if the work directory does not meet its requirements, or - * if the config file is invalid. - */ - public static PdfAs createPdfAs(File workDirectory) throws PdfAsException - { - return new PdfAsObject(workDirectory); - } + /** + * Creates a PDF-AS API instance for the given work directory. + * + * @param workDirectory + * The work directory. If null the configuration is assumed to be located + * within the user's home directory. + * + * @return Returns an instance of the PDF-AS API. + * @throws IllegalArgumentException + * Thrown, if the workDirectory doesn't exist. + * @throws PdfAsException + * Thrown, if the work directory does not meet its requirements, or + * if the config file is invalid. + * @see PdfAS#USERHOME_CONFIG_FOLDER + */ + public static PdfAs createPdfAs(File workDirectory) throws PdfAsException + { + return new PdfAsObject(workDirectory); + } + + /** + * Creates a PDF-AS API instance assuming that the configuration is located within the user's + * home directory. + * + * @return Returns an instance of the PDF-AS API. + * @throws IllegalArgumentException + * Thrown, if the work directory doesn't exist within the user's home directory. + * @throws PdfAsException + * Thrown, if the work directory does not meet its requirements, or + * if the config file is invalid. + * @see PdfAS#USERHOME_CONFIG_FOLDER + */ + public static PdfAs createPdfAs() throws PdfAsException + { + return createPdfAs(null); + } } diff --git a/src/main/java/at/gv/egiz/pdfas/api/commons/Constants.java b/src/main/java/at/gv/egiz/pdfas/api/commons/Constants.java index e8ebc16..33a418e 100644 --- a/src/main/java/at/gv/egiz/pdfas/api/commons/Constants.java +++ b/src/main/java/at/gv/egiz/pdfas/api/commons/Constants.java @@ -74,4 +74,26 @@ public final class Constants * All signatures are verified. */ public static int VERIFY_ALL = -1; + + /** + * The system property that may be used to declare the pdf-as configuration folder. + */ + public final static String CONFIG_SYSTEM_PROPERTY = "pdf-as.work-dir"; + + /** + * The zip file containing the default configuration. + */ + public final static String DEFAULT_CONFIGURATION_ZIP_RESOURCE = "DefaultConfiguration.zip"; + + /** + * The configuration folder for pdf-as within the user's home folder. + */ + public static final String USERHOME_CONFIG_FOLDER = "PDF-AS"; + + /** + * The name of the directory, where temporary files are stored. + */ + public final static String TEMP_DIR_NAME = "pdfastmp"; + } + diff --git a/src/main/java/at/gv/egiz/pdfas/api/exceptions/ConfigUtilsException.java b/src/main/java/at/gv/egiz/pdfas/api/exceptions/ConfigUtilsException.java new file mode 100644 index 0000000..d4feedd --- /dev/null +++ b/src/main/java/at/gv/egiz/pdfas/api/exceptions/ConfigUtilsException.java @@ -0,0 +1,99 @@ +package at.gv.egiz.pdfas.api.exceptions; + +/** + * @author Thomas Knall + */ +public class ConfigUtilsException extends Exception { + + /** + * Marker for serialization. + */ + private static final long serialVersionUID = 1L; + + /** + * The underlying exception. + */ + private Exception wrappedException; + + /** + * Returns the underlying exception. + * + * @return The underlying exception. + */ + public Exception getException() { + return this.wrappedException; + } + + /** + * Returns the message of the wrapped exception. + * + * @return The message of the wrapped exception. + */ + public String getMessage() { + String message = super.getMessage(); + if (message == null && this.wrappedException != null) { + return this.wrappedException.getMessage(); + } else { + return message; + } + } + + /** + * Instantiation of a new exception based on a message and another (wrapped) + * exception. + * + * @param message + * The exception message. + * @param exception + * Another exception. + */ + public ConfigUtilsException(final String message, final Exception exception) { + super(message); + this.wrappedException = exception; + } + + /** + * Instantiated a new exception based on a message. + * + * @param message + * The message of the new exception. + */ + public ConfigUtilsException(final String message) { + super(message); + this.wrappedException = null; + } + + /** + * Instantiates a new exception based on another (wrapped) exception. + * + * @param exception + * The wrapped exception. + */ + public ConfigUtilsException(final Exception exception) { + super(); + this.wrappedException = exception; + } + + /** + * Instantiates a new (unspecified) exception. + */ + public ConfigUtilsException() { + super(); + this.wrappedException = null; + + } + + /** + * Returns the text representation of this instance. + * + * @return The text representation of this instance. + */ + public String toString() { + if (this.wrappedException != null) { + return this.wrappedException.toString(); + } else { + return super.toString(); + } + } + +} diff --git a/src/main/java/at/gv/egiz/pdfas/commandline/Main.java b/src/main/java/at/gv/egiz/pdfas/commandline/Main.java index b4546e4..0ec6a55 100644 --- a/src/main/java/at/gv/egiz/pdfas/commandline/Main.java +++ b/src/main/java/at/gv/egiz/pdfas/commandline/Main.java @@ -33,6 +33,7 @@ import org.apache.log4j.PropertyConfigurator; import at.gv.egiz.pdfas.PdfAsFactory; import at.gv.egiz.pdfas.api.PdfAs; import at.gv.egiz.pdfas.api.commons.Constants; +import at.gv.egiz.pdfas.api.exceptions.ConfigUtilsException; import at.gv.egiz.pdfas.api.exceptions.PdfAsException; import at.gv.egiz.pdfas.api.io.DataSink; import at.gv.egiz.pdfas.api.io.DataSource; @@ -46,18 +47,17 @@ import at.gv.egiz.pdfas.api.verify.VerifyResult; import at.gv.egiz.pdfas.api.verify.VerifyResults; 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.framework.config.SettingsHelper; import at.gv.egiz.pdfas.framework.vfilter.VerificationFilterParameters; import at.gv.egiz.pdfas.io.FileBasedDataSink; import at.gv.egiz.pdfas.io.FileBasedDataSource; import at.gv.egiz.pdfas.io.StringTextBasedDataSource; +import at.gv.egiz.pdfas.utils.ConfigUtils; import at.knowcenter.wag.egov.egiz.PdfAS; import at.knowcenter.wag.egov.egiz.PdfASID; import at.knowcenter.wag.egov.egiz.cfg.SettingsReader; import at.knowcenter.wag.egov.egiz.exceptions.ConnectorFactoryException; 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.exceptions.SettingNotFoundException; import at.knowcenter.wag.egov.egiz.exceptions.SignatureTypesException; @@ -119,6 +119,13 @@ public abstract class Main * verified. */ protected static final String PARAMETER_VERIFY_WHICH = "-verify_which"; + + /** + * Command line parameter that starts the deployment of the default configuration to the current + * user's home folder. + * @see Constants#USERHOME_CONFIG_FOLDER + */ + protected static final String PARAMETER_DEPLOY_DEFAULT_CONFIGURATION = "-ddc"; /** * The application mode sign @@ -166,6 +173,23 @@ public abstract class Main { // ConfigLogger.setLevel(Level.DEBUG); + // search for PARAMETER_DEPLOY_DEFAULT_CONFIGURATION before initializing the SettingsReader + for (int i = 0; i < args.length; i++) { + if (args[i].trim().equals(PARAMETER_DEPLOY_DEFAULT_CONFIGURATION)) { + try { + if (ConfigUtils.deployDefaultConfiguration()) { + System.out.println("Default configuration successfully deployed to the current user's home."); + } else { + System.out.println("Default configuration NOT deployed because to the current user's home because it already exists."); + } + System.exit(0); + } catch (ConfigUtilsException e) { + System.err.println("Deployment of default configuration failed: " + e.getMessage()); + System.exit(1); + } + } + } + SettingsReader.initializeForCommandLine(); PropertyConfigurator.configure(SettingsReader.CONFIG_PATH + "log4j.properties"); @@ -417,7 +441,7 @@ public abstract class Main logger_.error("Couldn't delete output file " + output); } } - } + } finally { SettingsReader.clearTemporaryDirectory(); @@ -807,7 +831,7 @@ public abstract class Main */ public static void printUsage(PrintStream writer) throws PresentableException { - writer.println("Usage: pdf-as [OPTIONS] [output file]"); + writer.println("Usage: pdf-as [[OPTIONS] [output file]|UTILOPTIONS]"); writer.println(" Required OPTIONS:"); writer.println(" " + PARAMETER_MODE + " <" + VALUE_MODE_SIGN + "|" + VALUE_MODE_VERIFY + ">"); @@ -840,6 +864,10 @@ public abstract class Main writer.println(" " + id + " ... " + ci[i].getDescription()); } + writer.println(" Resp. required UTILity OPTIONS"); + + writer.println(" " + PARAMETER_DEPLOY_DEFAULT_CONFIGURATION + " ... deploys the default configuration to the current user's home"); + writer.println(" OPTIONS for signation:"); writer.println(" " + PARAMETER_SIGNATURE_MODE + " <" + VALUE_SIGNATURE_MODE_BINARY + "|" + VALUE_SIGNATURE_MODE_TEXTUAL + ">"); @@ -901,6 +929,7 @@ public abstract class Main writer.println(" Example usage:"); writer.println(" pdf-as " + PARAMETER_MODE + " " + VALUE_MODE_SIGN + " " + PARAMETER_CONNECTOR + " moa some_document.pdf"); writer.println(" pdf-as " + PARAMETER_MODE + " " + VALUE_MODE_VERIFY + " some_document.pdf_out.pdf"); + writer.println(" pdf-as " + PARAMETER_DEPLOY_DEFAULT_CONFIGURATION); } /** diff --git a/src/main/java/at/gv/egiz/pdfas/impl/api/PdfAsObject.java b/src/main/java/at/gv/egiz/pdfas/impl/api/PdfAsObject.java index b744d2a..303d48f 100644 --- a/src/main/java/at/gv/egiz/pdfas/impl/api/PdfAsObject.java +++ b/src/main/java/at/gv/egiz/pdfas/impl/api/PdfAsObject.java @@ -29,6 +29,7 @@ import at.gv.egiz.pdfas.api.verify.VerifyResult; import at.gv.egiz.pdfas.api.verify.VerifyResults; import at.gv.egiz.pdfas.commandline.CommandlineConnectorChooser; import at.gv.egiz.pdfas.exceptions.ErrorCode; +import at.gv.egiz.pdfas.framework.ConnectorFactory; import at.gv.egiz.pdfas.framework.config.SettingsHelper; import at.gv.egiz.pdfas.framework.input.ExtractionStage; import at.gv.egiz.pdfas.framework.signator.SignatorInformation; @@ -65,10 +66,6 @@ import at.knowcenter.wag.egov.egiz.sig.SignatureTypes; */ public class PdfAsObject implements PdfAs { - /** - * The work directory. - */ - protected File workDirectory = null; /** * The log. @@ -86,21 +83,23 @@ public class PdfAsObject implements PdfAs */ public PdfAsObject(File workDirectory) throws PdfAsException { - if (workDirectory == null) - { - throw new IllegalArgumentException("The work directory must not be null."); - } - if (!workDirectory.isDirectory()) - { - throw new IllegalArgumentException("The work directory does not exist or is not a directory. " + workDirectory.getPath()); - } - - this.workDirectory = workDirectory; - - SettingsReader.initialize(workDirectory.getPath()); + String path = workDirectory != null ? workDirectory.getPath() : null; + SettingsReader.initialize(path, path); reloadConfig(); } - + + /** + * This constructor is for internal use only - use + * {@link at.gv.egiz.pdfas.PdfAsFactory} instead. + * + * @throws PdfAsException + * Thrown, if the configuration cannot be processed. + */ + public PdfAsObject() throws PdfAsException + { + this(null); + } + /** * @see at.gv.egiz.pdfas.api.PdfAs#reloadConfig() */ @@ -235,7 +234,7 @@ public class PdfAsObject implements PdfAs TablePos pos = PosHelper.formTablePos(signParameters.getSignaturePositioning()); String connectorId = CommandlineConnectorChooser.chooseCommandlineConnectorForSign(signParameters.getSignatureDevice()); - + SignatorInformation si = PdfAS .signCommandline(new PdfDataSourceAdapter(signParameters.getDocument()), new DataSinkAdapter(signParameters.getOutput()), signatorId, connectorId, signParameters.getSignatureProfileId(), pos); diff --git a/src/main/java/at/gv/egiz/pdfas/utils/ConfigUtils.java b/src/main/java/at/gv/egiz/pdfas/utils/ConfigUtils.java new file mode 100644 index 0000000..c98cb59 --- /dev/null +++ b/src/main/java/at/gv/egiz/pdfas/utils/ConfigUtils.java @@ -0,0 +1,176 @@ +package at.gv.egiz.pdfas.utils; + +import java.io.BufferedOutputStream; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.util.zip.ZipEntry; +import java.util.zip.ZipInputStream; + +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.api.exceptions.ConfigUtilsException; + +/** + * @author Thomas Knall + */ +public final class ConfigUtils { + + private ConfigUtils() { + } + + /** + * The log. + */ + private static final Log logger_ = LogFactory.getLog(ConfigUtils.class); + + /** + * Deploys the default configuration with apache commons vfs. + * + * @param destination The destination folder. + * @param overwriteExisting If set true an already existing configuration is overwritten. If false nothing is being copied if the destination folder already exists. + * @return true if the configuration has been deployed, false if not. + * @throws ConfigUtilsException Thrown if there was an error during the deployment of the configuration. + */ + /* + private static boolean deployWithCommonsVFS(String destination, boolean overwriteExisting) throws ConfigUtilsException { + try { + FileSystemManager fsManager = VFS.getManager(); + FileObject defaultConfigurationFile = fsManager.resolveFile("res:DefaultConfiguration"); + FileObject destinationFile = fsManager.resolveFile(destination); + + if (destinationFile.exists() && !overwriteExisting) { + return false; + } + + destinationFile.copyFrom(defaultConfigurationFile, new AllFileSelector()); + return true; + } catch (FileSystemException e) { + throw new ConfigUtilsException(e); + } + } + */ + + + /** + * Deploys the default configuration from an included zip file. + * + * @param destination The destination folder. + * @param overwriteExisting If set true an already existing configuration is overwritten. If false nothing is being copied if the destination folder already exists. + * @return true if the configuration has been deployed, false if not. + * @throws ConfigUtilsException Thrown if there was an error during the deployment of the configuration. + */ + private static boolean deployFromZIP(String destination, boolean overwriteExisting) throws ConfigUtilsException { + try { + File destinationFolder = new File(destination); + if (destinationFolder.exists() && !overwriteExisting) { + return false; + } + InputStream in = ConfigUtils.class.getClassLoader().getResourceAsStream(Constants.DEFAULT_CONFIGURATION_ZIP_RESOURCE); + if (in == null) { + throw new ConfigUtilsException("Unable to find default configuration resource \"" + Constants.DEFAULT_CONFIGURATION_ZIP_RESOURCE + "\"."); + } + ZipInputStream zis = new ZipInputStream(in); + ZipEntry ze; + destinationFolder.mkdirs(); + logger_.debug("Extracting default configuration to folder \"" + destinationFolder.getCanonicalPath() + "\"."); + while ((ze = zis.getNextEntry()) != null) { + if (ze.isDirectory()) { + File newFolder = new File(destinationFolder, ze.getName()); + logger_.debug("Extracting folder \"" + newFolder.getPath() + "\"."); + newFolder.mkdirs(); + } else { + File destFile = new File(destinationFolder, ze.getName()); + logger_.trace("Extracting file \"" + destFile.getName() + "\"."); + toFile(zis, destFile); + } + zis.closeEntry(); + } + zis.close(); + return true; + } catch (IOException e) { + throw new ConfigUtilsException(e); + } + } + + /** + * Deploys the default configuration to the given destination folder. + * + * @param destination The destination folder. + * @param overwriteExisting If set true an already existing configuration is overwritten. If false nothing is being copied if the destination folder already exists. + * @return true if the configuration has been deployed, false if not. + * @throws ConfigUtilsException Thrown if there was an error during the deployment of the configuration. + */ + public static boolean deployDefaultConfiguration(String destination, boolean overwriteExisting) throws ConfigUtilsException { + if (destination == null) { + throw new NullPointerException("Destination must not be null."); + } + if (destination.length() == 0) { + throw new IllegalArgumentException("Destination must not be empty."); + } + return deployFromZIP(destination, overwriteExisting); + } + + /** + * Deploys the default configuration to the user's home directory to the subdirectory specified by + * Constants.Constants.USERHOME_CONFIG_FOLDER. + * + * @param overwriteExisting If set true an already existing configuration is overwritten. If false nothing is being copied if the destination folder already exists. + * @return true if the configuration has been deployed, false if not. + * @throws ConfigUtilsException Thrown if there was an error during the deployment of the configuration. + * @see Constants#USERHOME_CONFIG_FOLDER + */ + public static boolean deployDefaultConfiguration(boolean overwriteExisting) throws ConfigUtilsException { + String userHome = System.getProperty("user.home"); + if (userHome == null || userHome.length() == 0) { + return false; + } + return deployDefaultConfiguration(userHome + File.separator + Constants.USERHOME_CONFIG_FOLDER, overwriteExisting); + } + + /** + * Deploys the default configuration to the user's home directory to the subdirectory specified by + * Constants.Constants.USERHOME_CONFIG_FOLDER. + * + * @return true if the configuration has been deployed, false if not. + * @throws ConfigUtilsException Thrown if there was an error during the deployment of the configuration. + * @see Constants#USERHOME_CONFIG_FOLDER + */ + public static boolean deployDefaultConfiguration() throws ConfigUtilsException { + return deployDefaultConfiguration(false); + } + + public static boolean toFile(InputStream inputStream, File file) throws IOException { + boolean result = false; + BufferedOutputStream bufferedOutputStream = null; + try { + bufferedOutputStream = new BufferedOutputStream(new FileOutputStream(file)); + writeInputStreamToOutputStream(inputStream, bufferedOutputStream); + } finally { + if (bufferedOutputStream != null) { + try { + bufferedOutputStream.close(); + result = true; + } catch (IOException e) { + result = false; + } + } + } + return result; + } + + public static void writeInputStreamToOutputStream(InputStream inputStream, OutputStream outputStream) throws IOException { + final int bufferSize = 1024; + byte[] buffer = new byte[bufferSize]; + int len = -1; + while ((len = inputStream.read(buffer)) != -1) { + outputStream.write(buffer, 0, len); + } + outputStream.flush(); + } + +} diff --git a/src/main/java/at/gv/egiz/pdfas/utils/StreamUtils.java b/src/main/java/at/gv/egiz/pdfas/utils/StreamUtils.java index acf7e75..44303b0 100644 --- a/src/main/java/at/gv/egiz/pdfas/utils/StreamUtils.java +++ b/src/main/java/at/gv/egiz/pdfas/utils/StreamUtils.java @@ -16,6 +16,7 @@ public class StreamUtils { os.write(buffer, 0, read); } + os.flush(); is.close(); os.close(); } 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 index 5752838..93c0aa2 100644 --- a/src/main/java/at/gv/egiz/pdfas/web/helper/SessionHelper.java +++ b/src/main/java/at/gv/egiz/pdfas/web/helper/SessionHelper.java @@ -3,7 +3,6 @@ */ package at.gv.egiz.pdfas.web.helper; -import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; 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 index 5dbc8b6..341b97c 100644 --- a/src/main/java/at/gv/egiz/pdfas/web/helper/SignServletHelper.java +++ b/src/main/java/at/gv/egiz/pdfas/web/helper/SignServletHelper.java @@ -129,7 +129,7 @@ public class SignServletHelper // 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(request.getScheme(), host, request.getServerPort(), request.getContextPath() + "/RetrieveSignatureData"); + URL signature_data_URL = new URL(LocalRequestHelper.getLocalContextAddress(request, response) + "/RetrieveSignatureData"); String signature_data_url = response.encodeURL(signature_data_URL.toString()); Connector c = ConnectorChooser.chooseWebConnectorForSign(si.connector, si.type, signature_data_url); diff --git a/src/main/java/at/gv/egiz/pdfas/web/helper/TempDirHelper.java b/src/main/java/at/gv/egiz/pdfas/web/helper/TempDirHelper.java index e3f10ed..e7ce3ac 100644 --- a/src/main/java/at/gv/egiz/pdfas/web/helper/TempDirHelper.java +++ b/src/main/java/at/gv/egiz/pdfas/web/helper/TempDirHelper.java @@ -48,6 +48,69 @@ public class TempDirHelper protected static long runningIndex = 0; + /** + * Assembles the File of the temporary directory without checking if it really + * exists. + */ + public static File assembleTemporaryDirectoryFile() + { + File temp_dir = new File(SettingsReader.TMP_PATH); + return temp_dir; + } + + /** + * Returns the directory where temporary files should be stored. + * + *

+ * If the directory doesn't exist, it is created. + *

+ * + * @return Returns the directory where temporary files should be stored. + */ + public static File getTemporaryDirectory() + { + File temp_dir = assembleTemporaryDirectoryFile(); + if (!temp_dir.exists()) + { + temp_dir.mkdirs(); + } + return temp_dir; + } + + /** + * Deletes all files in the temporary directory, if it exists. + * + *

+ * This should be used to clear temporary files when the application shuts + * down. + *

+ */ + public static void clearTemporaryDirectory() + { + File temp_dir = assembleTemporaryDirectoryFile(); + log.debug("Clearing temporary directory: " + temp_dir); + + if (!temp_dir.exists()) + { + return; + } + + File[] files = temp_dir.listFiles(); + for (int i = 0; i < files.length; i++) + { + // added by tknall: do not try to remove svn-metadata + if (files[i].getName().endsWith(".svn")) { + continue; + } + log.debug(" Clearing temporary file: " + files[i]); + boolean delete_success = files[i].delete(); + if (!delete_success) + { + log.error("Couldn't delete the temporary file: " + files[i]); + } + } + } + public static void storeTextSignatureHoldersIfApplicable(List shs, String fileNameSuffix) throws IOException { Iterator it = shs.iterator(); @@ -166,7 +229,8 @@ public class TempDirHelper protected static File getFileInTempDir (String fileName) { - File tempDir = new File(new File(SettingsReader.RESOURCES_PATH), "pdfastmp"); +// File tempDir = new File(new File(SettingsReader.RESOURCES_PATH), "pdfastmp"); + File tempDir = assembleTemporaryDirectoryFile(); File tmpFile = new File(tempDir, fileName); -- cgit v1.2.3