diff options
Diffstat (limited to 'src/main')
4 files changed, 173 insertions, 34 deletions
diff --git a/src/main/java/at/gv/egiz/pdfas/PdfAsFactory.java b/src/main/java/at/gv/egiz/pdfas/PdfAsFactory.java index 6ec16f1..ceaae85 100644 --- a/src/main/java/at/gv/egiz/pdfas/PdfAsFactory.java +++ b/src/main/java/at/gv/egiz/pdfas/PdfAsFactory.java @@ -9,6 +9,7 @@ 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;
+import at.knowcenter.wag.egov.egiz.cfg.SettingsReader;
/**
* Main factory for creating a PDF-AS API Instance (PdfAs Interface).
@@ -24,7 +25,8 @@ public class PdfAsFactory *
* @param workDirectory
* The work directory. If <code>null</code> the configuration is assumed to be located
- * within the user's home directory.
+ * within the user's home directory. Note: IAIK JCE and IAIK ECC security provders are
+ * automatically registered.
*
* @return Returns an instance of the PDF-AS API.
* @throws IllegalArgumentException
@@ -36,12 +38,35 @@ public class PdfAsFactory */
public static PdfAs createPdfAs(File workDirectory) throws PdfAsException
{
- return new PdfAsObject(workDirectory);
+ return createPdfAs(workDirectory, SettingsReader.REGISTER_IAIK_PROVIDERS_ON_DEFAULT);
+ }
+
+ /**
+ * Creates a PDF-AS API instance for the given work directory.
+ *
+ * @param workDirectory
+ * The work directory. If <code>null</code> the configuration is assumed to be located
+ * within the user's home directory.
+ *
+ * @param registerProvider <code>true</code>: automatically registers IAIK JCE and ECC Provider;
+ * <code>false</code>: providers will NOT be automatically registered, providers
+ * needed have to be registered by the API user
+ * @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, boolean registerProvider) throws PdfAsException
+ {
+ return new PdfAsObject(workDirectory, registerProvider);
}
/**
* Creates a PDF-AS API instance assuming that the configuration is located within the user's
- * home directory.
+ * home directory. Note: IAIK JCE and IAIK ECC security providers are automatically registered.
*
* @return Returns an instance of the PDF-AS API.
* @throws IllegalArgumentException
@@ -53,7 +78,27 @@ public class PdfAsFactory */
public static PdfAs createPdfAs() throws PdfAsException
{
- return createPdfAs(null);
+ return createPdfAs(null);
+ }
+
+ /**
+ * 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.
+ * @param registerProvider <code>true</code>: automatically registers IAIK JCE and ECC Provider;
+ * <code>false</code>: providers will NOT be automatically registered, providers
+ * needed have to be registered by the API user
+ * @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(boolean registerProvider) throws PdfAsException
+ {
+ return createPdfAs(null, registerProvider);
}
}
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 2ccc1b7..e94acfd 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 @@ -81,6 +81,7 @@ public class PdfAsObject implements PdfAs /**
* This constructor is for internal use only - use
* {@link at.gv.egiz.pdfas.PdfAsFactory} instead.
+ * Note: IAIK JCE and IAIK ECC security providers are automatically registered.
*
* @param workDirectory
* The work directory.
@@ -89,14 +90,32 @@ public class PdfAsObject implements PdfAs */
public PdfAsObject(File workDirectory) throws PdfAsException
{
- String path = workDirectory != null ? workDirectory.getPath() : null;
+ this(workDirectory, SettingsReader.REGISTER_IAIK_PROVIDERS_ON_DEFAULT);
+ }
+
+ /**
+ * This constructor is for internal use only - use
+ * {@link at.gv.egiz.pdfas.PdfAsFactory} instead.
+ *
+ * @param workDirectory
+ * The work directory.
+ * @param registerProvider <code>true</code>: automatically registers IAIK JCE and ECC Provider;
+ * <code>false</code>: providers will NOT be automatically registered, providers
+ * needed have to be registered by the API user
+ * @throws PdfAsException
+ * Thrown, if the configuration cannot be processed.
+ */
+ public PdfAsObject(File workDirectory, boolean registerProvider) throws PdfAsException
+ {
+ String path = workDirectory != null ? workDirectory.getPath() : null;
SettingsReader.initialize(path, path);
- reloadConfig();
+ reloadConfig(registerProvider);
}
/**
* This constructor is for internal use only - use
* {@link at.gv.egiz.pdfas.PdfAsFactory} instead.
+ * Note: IAIK JCE and IAIK ECC security providers are automatically registered.
*
* @throws PdfAsException
* Thrown, if the configuration cannot be processed.
@@ -112,7 +131,20 @@ public class PdfAsObject implements PdfAs public void reloadConfig() throws PdfAsException
{
ConfigUtils.initializeLogger();
- SettingsReader.createInstance();
+ SettingsReader.createInstance();
+ SignatureTypes.createInstance();
+ }
+
+ /**
+ * @param registerProvider <code>true</code>: automatically registers IAIK JCE and ECC Provider;
+ * <code>false</code>: providers will NOT be automatically registered, providers
+ * needed have to be registered by the API user
+ * @see at.gv.egiz.pdfas.api.PdfAs#reloadConfig()
+ */
+ private void reloadConfig(boolean registerProvider) throws PdfAsException
+ {
+ ConfigUtils.initializeLogger();
+ SettingsReader.createInstance(registerProvider);
SignatureTypes.createInstance();
}
diff --git a/src/main/java/at/knowcenter/wag/egov/egiz/cfg/SettingsReader.java b/src/main/java/at/knowcenter/wag/egov/egiz/cfg/SettingsReader.java index c85513c..f4c28c7 100644 --- a/src/main/java/at/knowcenter/wag/egov/egiz/cfg/SettingsReader.java +++ b/src/main/java/at/knowcenter/wag/egov/egiz/cfg/SettingsReader.java @@ -28,12 +28,12 @@ import java.io.FileInputStream; import java.io.IOException;
import java.io.InputStream;
import java.io.Serializable;
+import java.security.Security;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.Properties;
import java.util.Vector;
-import org.apache.commons.io.IOUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.text.StrSubstitutor;
import org.apache.commons.logging.Log;
@@ -147,6 +147,8 @@ public class SettingsReader implements Serializable * internal help file
*/
private static final String HELP_TEXT_PROP_RESOURCE = "/config/help_text.properties";
+
+ public static final boolean REGISTER_IAIK_PROVIDERS_ON_DEFAULT = true;
// /**
// * The web application path
@@ -319,7 +321,8 @@ public class SettingsReader implements Serializable * This method returns an synchronized instance of this class. The settings
* file is read only once using this class. This method returns the instance
* holding the definitions of the default settings file. Default file:
- * {@link SettingsReader#CONFIG_FILE_DEFAULT_NAME}: "settings.txt"
+ * {@link SettingsReader#CONFIG_FILE_DEFAULT_NAME}: "settings.txt".
+ * Note: IAIK JCE and IAIK ECC security providers are automatically registered.
*
* @return an instance of the SettingsReader
* @throws SettingsException
@@ -335,14 +338,32 @@ public class SettingsReader implements Serializable *
* <p>
* Subsequent calls to getInstance will return the new settings.
+ * Note: IAIK JCE and IAIK ECC security providers are automatically registered.
* </p>
*
* @throws SettingsException f.e.
*/
- public synchronized static void createInstance () throws SettingsException
+ public synchronized static void createInstance() throws SettingsException
+ {
+ instance_ = null;
+ getInstance();
+ }
+
+ /**
+ * Reloads the Settings file.
+ *
+ * <p>
+ * Subsequent calls to getInstance will return the new settings.
+ * </p>
+ * @param registerProvider <code>true</code>: automatically registers IAIK JCE and ECC Provider;
+ * <code>false</code>: providers will NOT be automatically registered, providers
+ * needed have to be registered by the API user
+ * @throws SettingsException f.e.
+ */
+ public synchronized static void createInstance(boolean registerProvider) throws SettingsException
{
instance_ = null;
- getInstance();
+ getInstance(null, registerProvider);
}
/**
@@ -361,33 +382,75 @@ public class SettingsReader implements Serializable *
* @param settingsFile
* the settings file that should be load.
+ * @param registerProvider <code>true</code>: automatically registers IAIK JCE and ECC Provider;
+ * <code>false</code>: providers will NOT be automatically registered, providers
+ * needed have to be registered by the API user
* @return an instance of the SettingsReader
* @throws SettingsException
* if the settings file could not be read
*/
- private synchronized static SettingsReader getInstance(String settingsFile) throws SettingsException
+ private synchronized static SettingsReader getInstance(String settingsFile, boolean registerProvider) throws SettingsException
{
- if (instance_ == null)
- {
- int length = Utils.max(new int[] { RESOURCES_PATH.length(), TMP_PATH.length(), CONFIG_PATH.length(), CERT_PATH.length() });
-
- logger_.info(StringUtils.repeat("*", length + 25));
- logger_.info(" resources path = \"" + RESOURCES_PATH + "\"");
- logger_.info(" configuration path = \"" + CONFIG_PATH + "\"");
- logger_.info(" certstore path = \"" + CERT_PATH + "\"");
- logger_.info(" temporary path = \"" + TMP_PATH + "\"");
- logger_.debug(" file.encoding = \"" + System.getProperty("file.encoding") + "\"");
- logger_.info(StringUtils.repeat("*", length + 25));
-
- IAIK.addAsProvider();
- ECCProvider.addAsProvider();
- // Does not conform with PKIX, but is used by belgium citizen card
+ if (instance_ == null)
+ {
+ int length = Utils.max(new int[] { RESOURCES_PATH.length(), TMP_PATH.length(), CONFIG_PATH.length(), CERT_PATH.length() });
+
+ logger_.info(StringUtils.repeat("*", length + 25));
+ logger_.info(" resources path = \"" + RESOURCES_PATH + "\"");
+ logger_.info(" configuration path = \"" + CONFIG_PATH + "\"");
+ logger_.info(" certstore path = \"" + CERT_PATH + "\"");
+ logger_.info(" temporary path = \"" + TMP_PATH + "\"");
+ logger_.debug(" file.encoding = \"" + System.getProperty("file.encoding") + "\"");
+ logger_.info(StringUtils.repeat("*", length + 25));
+
+ if (registerProvider) {
+ IAIK.addAsProvider();
+ ECCProvider.addAsProvider();
+ } else {
+ if (Security.getProvider("IAIK") == null) {
+ logger_.debug("Default IAIK JCE provider not registered.");
+ } else {
+ logger_.debug("IAIK JCE provider already registered.");
+ }
+ if (Security.getProvider("IAIK_ECC") == null) {
+ logger_.debug("Default IAIK ECC provider not registered.");
+ } else {
+ logger_.debug("IAIK ECC provider already registered.");
+ }
+ }
+ // Does not conform with PKIX, but is used by belgium citizen card
// log.info("Registering RDN \"SERIALNUMBER\" as " + ObjectID.serialNumber + ".");
- RFC2253NameParser.register("SERIALNUMBER", ObjectID.serialNumber);
-
- instance_ = new SettingsReader(settingsFile);
- }
- return instance_;
+ RFC2253NameParser.register("SERIALNUMBER", ObjectID.serialNumber);
+
+ instance_ = new SettingsReader(settingsFile);
+ }
+ return instance_;
+ }
+
+ /**
+ * This method returns an synchronized instance of this class. The settings
+ * file is read only once using this class. This method returns the instance
+ * holding the definitions of the settingsFile. If the input param
+ * <code>settingsFile == null</code> the default settings file will be load.
+ * Default file: {@link SettingsReader#CONFIG_FILE_DEFAULT_NAME}:
+ * "settings.txt".
+ * Note: IAIK JCE and IAIK ECC security providers are automatically registered.
+ *
+ * If an instance of this class exist, the input param is ignored! The
+ * SettingsReader is singleton and therefore the first
+ * {@link SettingsReader#getInstance()}defines the settings file that has to
+ * be loaded. This means changes between a application lifecyle can not be
+ * done!
+ *
+ * @param settingsFile
+ * the settings file that should be load.
+ * @return an instance of the SettingsReader
+ * @throws SettingsException
+ * if the settings file could not be read
+ */
+ private static SettingsReader getInstance(String settingsFile) throws SettingsException
+ {
+ return getInstance(settingsFile, REGISTER_IAIK_PROVIDERS_ON_DEFAULT);
}
/**
diff --git a/src/main/java/at/knowcenter/wag/egov/egiz/tools/CodingHelper.java b/src/main/java/at/knowcenter/wag/egov/egiz/tools/CodingHelper.java index bed1cb3..af406b6 100644 --- a/src/main/java/at/knowcenter/wag/egov/egiz/tools/CodingHelper.java +++ b/src/main/java/at/knowcenter/wag/egov/egiz/tools/CodingHelper.java @@ -217,8 +217,7 @@ public class CodingHelper }
catch (NoSuchAlgorithmException e)
{
- e.printStackTrace();
- return null;
+ throw new RuntimeException(e);
}
}
|