From 3f2032efba5469589d5317b1796a0aec74457847 Mon Sep 17 00:00:00 2001
From: Thomas <>
Date: Tue, 16 Mar 2021 15:13:22 +0100
Subject: update MOA-SPSS initialization to mitigate suspect behavior in
EAAF-Components module
---
.../test/java/console/SchemaValidationTest.java | 52 ++++++++++++++++++++++
moaSig/common/src/test/resources/zuse/msg.xml | 7 +++
.../gv/egovernment/moa/spss/api/Configurator.java | 16 ++++++-
.../moa/spss/server/init/ConfiguratorImpl.java | 31 ++++++++++---
.../server/init/StartupConfigurationHolder.java | 42 +++++++++++++++++
.../moa/spss/server/init/SystemInitializer.java | 34 ++++++++++----
moaSig/moa-sig/src/main/resources/log4j.properties | 13 +++---
moaSig/moa-sig/src/main/resources/logback.xml | 49 ++++++++++++++++++++
8 files changed, 220 insertions(+), 24 deletions(-)
create mode 100644 moaSig/common/src/test/java/console/SchemaValidationTest.java
create mode 100644 moaSig/common/src/test/resources/zuse/msg.xml
create mode 100644 moaSig/moa-sig-lib/src/main/java/at/gv/egovernment/moa/spss/server/init/StartupConfigurationHolder.java
create mode 100644 moaSig/moa-sig/src/main/resources/logback.xml
diff --git a/moaSig/common/src/test/java/console/SchemaValidationTest.java b/moaSig/common/src/test/java/console/SchemaValidationTest.java
new file mode 100644
index 0000000..db3041b
--- /dev/null
+++ b/moaSig/common/src/test/java/console/SchemaValidationTest.java
@@ -0,0 +1,52 @@
+package console;
+
+import java.io.InputStream;
+
+import org.w3c.dom.Element;
+
+import at.gv.egovernment.moaspss.util.DOMUtils;
+
+public class SchemaValidationTest {
+
+ public static final String SCHEMA_ROOT = "/config/zuseSchema";
+
+ public static final String XML_NS_URI = "http://www.w3.org/XML/1998/namespace";
+ public static final String XML_SCHEMA_LOCATION = SCHEMA_ROOT + "xml.xsd";
+
+ public static final String XSI_NS_URI = "http://www.w3.org/2001/XMLSchema-instance";
+ public static final String XSI_SCHEMA_LOCATION = SCHEMA_ROOT + "XMLSchema-instance.xsd";
+
+ public static final String eDELIVERY20 = "http://reference.e-government.gv.at/namespace/zustellung/msg/phase2/20181206#";
+ public static final String eDELIVERY20_SCHEMA_LOCATION = SCHEMA_ROOT + "zuse_p2.xsd";
+
+ public static final String eDELIVERY_PERSON_20 = "http://reference.e-government.gv.at/namespace/persondata/phase2/20181206#";
+ public static final String eDELIVERY_PERSON_20_SCHEMA_LOCATION = SCHEMA_ROOT + "zuse_mypersondata_en_p2.xsd";
+
+ private static final String ZUSE_SCHEMAS =
+ (XML_NS_URI + " " + XML_SCHEMA_LOCATION + " ")
+ + (XSI_NS_URI + " " + XSI_SCHEMA_LOCATION + " ")
+ + (eDELIVERY20 + " " + eDELIVERY20_SCHEMA_LOCATION + " ")
+ + (eDELIVERY_PERSON_20 + " " + eDELIVERY_PERSON_20_SCHEMA_LOCATION);
+
+ /**
+ * Simple test.
+ *
+ * @param args not used yet
+ * @throws Exception in case of an error
+ */
+ public static void main(String[] args) throws Exception {
+
+ InputStream is = SchemaValidationTest.class.getResourceAsStream("/zuse/msg.xml");
+
+
+ Element result = DOMUtils.parseXmlValidating(is);
+
+// Document result = DOMUtils.parseDocument(is,
+// true, ZUSE_SCHEMAS, null, new MOASPSSEntityResolver(), new MOAErrorHandler());
+
+
+ System.out.print(DOMUtils.serializeNode(result));
+
+ }
+
+}
diff --git a/moaSig/common/src/test/resources/zuse/msg.xml b/moaSig/common/src/test/resources/zuse/msg.xml
new file mode 100644
index 0000000..200950a
--- /dev/null
+++ b/moaSig/common/src/test/resources/zuse/msg.xml
@@ -0,0 +1,7 @@
+
+
+
+ urn:publicid:gv.at:ecdid+ZUSETNVZ+ZU
+
+
+
diff --git a/moaSig/moa-sig-lib/src/main/java/at/gv/egovernment/moa/spss/api/Configurator.java b/moaSig/moa-sig-lib/src/main/java/at/gv/egovernment/moa/spss/api/Configurator.java
index 59db7b5..bc0acbe 100644
--- a/moaSig/moa-sig-lib/src/main/java/at/gv/egovernment/moa/spss/api/Configurator.java
+++ b/moaSig/moa-sig-lib/src/main/java/at/gv/egovernment/moa/spss/api/Configurator.java
@@ -26,6 +26,7 @@ package at.gv.egovernment.moa.spss.api;
import at.gv.egovernment.moa.spss.MOAException;
import at.gv.egovernment.moa.spss.server.init.ConfiguratorImpl;
+import at.gv.egovernment.moa.spss.server.init.StartupConfigurationHolder;
/**
* Configures the SP/SS API.
@@ -61,15 +62,24 @@ public abstract class Configurator {
return instance;
}
+ /**
+ * Get current configuration object.
+ *
+ * @return Configuration or null
if it was not initialized yet
+ */
+ public abstract StartupConfigurationHolder getCurrentConfiguration();
+
/**
* Initialize the SP/SS configuration.
*
* Only a single call to this method will have an effect. Use
* update()
for reflecting changes in the configuration instead.
*
+ * @return Configuration holder
+ *
* @throws MOAException An error occurred updating the SP/SS configuration.
*/
- public abstract void init() throws MOAException;
+ public abstract StartupConfigurationHolder init() throws MOAException;
/**
* Update the SP/SS configuration.
@@ -77,8 +87,10 @@ public abstract class Configurator {
* This will only have an effect after the system has been initialized once
* using init()
.
*
+ * @return Updated Configuration holder, or null
if it was not initialized
+ *
* @throws MOAException An error occurred updating the SP/SS configuration.
*/
- public abstract void update() throws MOAException;
+ public abstract StartupConfigurationHolder update() throws MOAException;
}
diff --git a/moaSig/moa-sig-lib/src/main/java/at/gv/egovernment/moa/spss/server/init/ConfiguratorImpl.java b/moaSig/moa-sig-lib/src/main/java/at/gv/egovernment/moa/spss/server/init/ConfiguratorImpl.java
index 8ab01d6..32654d4 100644
--- a/moaSig/moa-sig-lib/src/main/java/at/gv/egovernment/moa/spss/server/init/ConfiguratorImpl.java
+++ b/moaSig/moa-sig-lib/src/main/java/at/gv/egovernment/moa/spss/server/init/ConfiguratorImpl.java
@@ -29,6 +29,7 @@ import at.gv.egovernment.moa.spss.api.Configurator;
import at.gv.egovernment.moa.spss.server.config.ConfigurationException;
import at.gv.egovernment.moa.spss.server.config.ConfigurationProvider;
import at.gv.egovernment.moa.spss.server.iaik.config.IaikConfigurator;
+import iaik.server.ConfigurationData;
/**
* Default implementation of Configurator
.
@@ -40,26 +41,42 @@ public class ConfiguratorImpl extends Configurator {
/** whether the configuration has been initialized */
private boolean initialized = false;
- public void init() throws MOAException {
+ StartupConfigurationHolder result;
+
+ public StartupConfigurationHolder getCurrentConfiguration() {
+ return result;
+
+ }
+
+ public StartupConfigurationHolder init() throws MOAException {
if (!initialized) {
- SystemInitializer.init();
+ result = SystemInitializer.init();
initialized = true;
+
}
+
+ return result;
+
}
- public void update() throws MOAException {
+ public StartupConfigurationHolder update() throws MOAException {
if (!initialized) {
- return;
+ return null;
}
- try {
+ try {
// reconfigure the system
ConfigurationProvider config = ConfigurationProvider.reload();
- new IaikConfigurator().configure(config);
+ ConfigurationData iaikConfig = new IaikConfigurator().configure(config);
+ result = new StartupConfigurationHolder(config, iaikConfig);
+ return result;
+
} catch (MOAException e) {
throw e;
+
} catch (Throwable t) {
- throw new ConfigurationException("", null, t);
+ throw new ConfigurationException("MOA-SPSS initialization FAILED with a generic error", null, t);
+
}
}
diff --git a/moaSig/moa-sig-lib/src/main/java/at/gv/egovernment/moa/spss/server/init/StartupConfigurationHolder.java b/moaSig/moa-sig-lib/src/main/java/at/gv/egovernment/moa/spss/server/init/StartupConfigurationHolder.java
new file mode 100644
index 0000000..229a8b2
--- /dev/null
+++ b/moaSig/moa-sig-lib/src/main/java/at/gv/egovernment/moa/spss/server/init/StartupConfigurationHolder.java
@@ -0,0 +1,42 @@
+package at.gv.egovernment.moa.spss.server.init;
+
+import at.gv.egovernment.moa.spss.server.config.ConfigurationProvider;
+import iaik.server.ConfigurationData;
+
+public class StartupConfigurationHolder {
+
+ private final ConfigurationProvider moaSpssConfig;
+ private final ConfigurationData iaikConfiguration;
+
+ /**
+ * Holder for IAIK and MOA-SPSS related configuration object.
+ *
+ * @param config MOA-SPSS specific configuration
+ * @param iaikConfig Internal IAIK module configuration
+ */
+ public StartupConfigurationHolder(ConfigurationProvider config, ConfigurationData iaikConfig) {
+ this.moaSpssConfig = config;
+ this.iaikConfiguration = iaikConfig;
+ }
+
+ /**
+ * Get MOA-SPSS configuration object from start-up process.
+ *
+ * @return MOA-SPSS configuration
+ */
+ public ConfigurationProvider getMoaSpssConfig() {
+ return moaSpssConfig;
+ }
+
+ /**
+ * Get configuration object for IAIK modules from start-up process.
+ *
+ * @return IAIK module configuration
+ */
+ public ConfigurationData getIaikConfiguration() {
+ return iaikConfiguration;
+ }
+
+
+
+}
diff --git a/moaSig/moa-sig-lib/src/main/java/at/gv/egovernment/moa/spss/server/init/SystemInitializer.java b/moaSig/moa-sig-lib/src/main/java/at/gv/egovernment/moa/spss/server/init/SystemInitializer.java
index 6ef9c57..25bb6d9 100644
--- a/moaSig/moa-sig-lib/src/main/java/at/gv/egovernment/moa/spss/server/init/SystemInitializer.java
+++ b/moaSig/moa-sig-lib/src/main/java/at/gv/egovernment/moa/spss/server/init/SystemInitializer.java
@@ -51,6 +51,7 @@ import at.gv.egovernment.moaspss.logging.LoggingContextManager;
import at.gv.egovernment.moaspss.util.Constants;
import at.gv.egovernment.moaspss.util.DOMUtils;
import iaik.asn1.ObjectID;
+import iaik.server.ConfigurationData;
import iaik.utils.RFC2253NameParser;
/**
@@ -71,6 +72,8 @@ public class SystemInitializer {
private static ServiceLoader initializerServices =
ServiceLoader.load(ExternalInitializer.class);
+ private static ConfigurationData iaikConfiguration;
+ private static ConfigurationProvider config;
private static void runInitializer(ConfigurationProvider configurationProvider) {
@@ -84,8 +87,9 @@ public class SystemInitializer {
/**
* Initialize the MOA SP/SS webservice.
+ * @return
*/
- public static void init() {
+ public static StartupConfigurationHolder init() {
logger.info("##############################################################################");
logger.info("##############################################################################");
@@ -141,7 +145,7 @@ public class SystemInitializer {
// initialize configuration
try {
Logger.info("Initialize MOA-SP/SS configuration ... ");
- ConfigurationProvider config = ConfigurationProvider.getInstance();
+ config = ConfigurationProvider.getInstance();
//initialize TSL module
TSLConfiguration moaSPTslConfig = config.getTSLConfiguration();
@@ -168,25 +172,23 @@ public class SystemInitializer {
Logger.info("Building IAIK-MOA configuration ... ");
- new IaikConfigurator().configure(config);
+ iaikConfiguration = new IaikConfigurator().configure(config);
runInitializer(config);
Logger.info(new LogMsg(msg.getMessage("init.01", null)));
+
} catch (MOAException e) {
Logger.fatal(new LogMsg(msg.getMessage("init.00", null)), e);
+ throw new RuntimeException(e);
} catch (Throwable e) {
Logger.fatal(new LogMsg(msg.getMessage("init.00", null)), e);
throw new RuntimeException(e);
- } finally {
- logger.info("Configuration initialized");
- }
-
-
-
+ }
+
// CHANGE IXSIL to XSECT
// set IXSIL debug output
//IXSILInit.setPrintDebugLog(
@@ -207,6 +209,20 @@ public class SystemInitializer {
logger.info("==============================================================================");
logger.info("=== CONFIGURATION DONE ===");
logger.info("==============================================================================");
+
+
+ return new StartupConfigurationHolder(config, iaikConfiguration);
+
+ }
+
+ /**
+ * Get configuration object from IAIK modules.
+ *
+ * @return Configuration or null
of it was not configurated yet
+ */
+ public static ConfigurationData getIaikConfiguration() {
+ return iaikConfiguration;
+
}
private static void initTSLUpdateTask(TSLConfiguration tslconfig) {
diff --git a/moaSig/moa-sig/src/main/resources/log4j.properties b/moaSig/moa-sig/src/main/resources/log4j.properties
index 8cd351c..d7522a7 100644
--- a/moaSig/moa-sig/src/main/resources/log4j.properties
+++ b/moaSig/moa-sig/src/main/resources/log4j.properties
@@ -6,15 +6,16 @@
org.apache.commons.logging.LogFactory=org.apache.commons.logging.impl.Log4jFactory
# Configure root logger and loggers for moa-spss
-log4j.rootLogger=warn, stdout
-log4j.logger.moa.spss.server=info, stdout, moaspss
-log4j.logger.iaik.server=info, stdout, moaspss
-log4j.logger.at.gv.egovernment.moa.spss=TRACE, stdout, moaspss
+log4j.rootLogger=warn,stdout
+#log4j.logger.moa.spss.server=debug,moaspss
+#log4j.logger.iaik.server=debug,moaspss
+#log4j.logger.iaik.pki=debug,moaspss
+#log4j.logger.at.gv.egovernment.moa.spss=debug, moaspss
# Configure the 'stdout' appender to write logging output to the console
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
-log4j.appender.stdout.layout.ConversionPattern=%5p | %d{dd HH:mm:ss,SSS} | %C{1} | %20c | %10t | %m%n
+log4j.appender.stdout.layout.ConversionPattern=log4j | %5p | %d{dd HH:mm:ss,SSS} | %C{1} | %20c | %10t | %m%n
# Configure the 'moaspss' appender to write moa-spss related logging output
# to the file '${catalina.base}/logs/moa-spss.log'. The file is rolled over every 1000KB,
@@ -24,7 +25,7 @@ log4j.appender.moaspss.File=${catalina.base}/logs/moa-spss.log
log4j.appender.moaspss.MaxFileSize=1000KB
log4j.appender.moaspss.MaxBackupIndex=10
log4j.appender.moaspss.layout=org.apache.log4j.PatternLayout
-log4j.appender.moaspss.layout.ConversionPattern=%5p | %d{dd HH:mm:ss,SSS} | %C{1} | %20c | %10t | %m%n
+log4j.appender.moaspss.layout.ConversionPattern=log4j | %5p | %d{dd HH:mm:ss,SSS} | %C{1} | %20c | %10t | %m%n
# Configure the jdbc appender 'JDBC' to write logging output
# to the given PostgreSQL database
diff --git a/moaSig/moa-sig/src/main/resources/logback.xml b/moaSig/moa-sig/src/main/resources/logback.xml
new file mode 100644
index 0000000..501c1a6
--- /dev/null
+++ b/moaSig/moa-sig/src/main/resources/logback.xml
@@ -0,0 +1,49 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ ${catalina.base}/logs/moa-spss.log
+
+ logback | %5p | %d{dd HH:mm:ss,SSS} | %C{1} | %20c | %10t | %m%n
+
+
+ 10
+ ${catalina.base}/logs/moa-spss.log.%i
+
+
+ 1000KB
+
+
+
+
+ logback | %5p | %d{dd HH:mm:ss,SSS} | %C{1} | %20c | %10t | %m%n
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
--
cgit v1.2.3