From fa2384985454568439dc286a6a9051fba47322ed Mon Sep 17 00:00:00 2001
From: Thomas Lenz <thomas.lenz@egiz.gv.at>
Date: Mon, 25 Jan 2021 16:30:07 +0100
Subject: add ID Austria communication-module and additional jUnit test It's
 first alpha-version of eIDAS MS-specific Proxy-Service with ID Austria
 authentication

---
 .../builder/AuthenticationDataBuilder.java         |   3 +
 .../src/main/resources/application.properties      |  71 +++++++++++++++---
 .../test/utils/AuthenticationDataBuilderTest.java  |  80 +++++++++++++++++++--
 .../resources/config/junit_config_1.properties     |  30 ++++++++
 .../config/junit_config_1_springboot.properties    |  32 ++++++++-
 .../config/junit_config_2_springboot.properties    |  30 ++++++++
 .../resources/config/junit_config_3.properties     |  31 ++++++++
 .../src/test/resources/config/keys/junit_test.jks  | Bin 0 -> 8410 bytes
 8 files changed, 258 insertions(+), 19 deletions(-)
 create mode 100644 connector/src/test/resources/config/keys/junit_test.jks

(limited to 'connector/src')

diff --git a/connector/src/main/java/at/asitplus/eidas/specific/connector/builder/AuthenticationDataBuilder.java b/connector/src/main/java/at/asitplus/eidas/specific/connector/builder/AuthenticationDataBuilder.java
index 3a93c1b8..2e70893b 100644
--- a/connector/src/main/java/at/asitplus/eidas/specific/connector/builder/AuthenticationDataBuilder.java
+++ b/connector/src/main/java/at/asitplus/eidas/specific/connector/builder/AuthenticationDataBuilder.java
@@ -86,6 +86,9 @@ public class AuthenticationDataBuilder extends AbstractAuthenticationDataBuilder
       ((EidAuthenticationData)authData).setEidStatus(authProcessData.isTestIdentity() 
           ? EidIdentityStatusLevelValues.TESTIDENTITY : EidIdentityStatusLevelValues.IDENTITY);
       
+      
+      
+      
     } else {
       throw new RuntimeException("Can not inject PiiTransactionId because AuthData is of unknown type: " 
           + authData.getClass().getName());
diff --git a/connector/src/main/resources/application.properties b/connector/src/main/resources/application.properties
index e7437840..f6d9bb7e 100644
--- a/connector/src/main/resources/application.properties
+++ b/connector/src/main/resources/application.properties
@@ -8,6 +8,7 @@ server.servlet.contextPath=/ms_connector
 app.build.artifactId=ms_connector
 
 
+
 #############################################################################
 ## SpringBoot Admin client
 spring.boot.admin.client.enabled=false
@@ -16,9 +17,9 @@ spring.boot.admin.client.enabled=false
 ## SpringBoot Actuator
 management.endpoints.web.exposure.include=health,info
 
-
 #############################################################################
-## MS-speccific eIDAS-Connector configuration
+## Common parts of MS-speccific eIDAS application configuration
+
 #eidas.ms.context.url.prefix=
 eidas.ms.context.url.request.validation=false
 #eidas.ms.configRootDir=file:/.../config/
@@ -48,6 +49,29 @@ eidas.ms.core.pendingrequestid.digist.algorithm=HmacSHA256
 #eidas.ms.core.pendingrequestid.digist.secret=pendingReqIdSecret
 
 
+## HTTP-client defaults
+eidas.ms.client.http.connection.timeout.socket=15
+eidas.ms.client.http.connection.timeout.connection=15
+eidas.ms.client.http.connection.timeout.request=15
+
+
+## Common PVP2 S-Profile (SAML2) configuration
+#eidas.ms.pvp2.metadata.organisation.name=JUnit
+#eidas.ms.pvp2.metadata.organisation.friendyname=For testing with jUnit
+#eidas.ms.pvp2.metadata.organisation.url=http://junit.test
+#eidas.ms.pvp2.metadata.contact.givenname=Max
+#eidas.ms.pvp2.metadata.contact.surname=Mustermann
+#eidas.ms.pvp2.metadata.contact.email=max@junit.test
+
+##only for advanced config
+eidas.ms.configuration.pvp.scheme.validation=true
+eidas.ms.configuration.pvp.enable.entitycategories=false
+
+
+
+#############################################################################
+## MS-speccific eIDAS-Connector configuration
+
 ## eIDAS Ref. Implementation connector ###
 eidas.ms.auth.eIDAS.node_v2.entityId=ownSpecificConnector
 eidas.ms.auth.eIDAS.eid.testidentity.default=false
@@ -139,13 +163,6 @@ eidas.ms.auth.eIDAS.node_v2.attributes.requested.representation.5=LegalName,true
 #eidas.ms.pvp2.key.signing.password=password
 eidas.ms.pvp2.metadata.validity=24
 
-#eidas.ms.pvp2.metadata.organisation.name=JUnit
-#eidas.ms.pvp2.metadata.organisation.friendyname=For testing with jUnit
-#eidas.ms.pvp2.metadata.organisation.url=http://junit.test
-#eidas.ms.pvp2.metadata.contact.givenname=Max
-#eidas.ms.pvp2.metadata.contact.surname=Mustermann
-#eidas.ms.pvp2.metadata.contact.email=max@junit.test
-
 
 ## Service Provider configuration
 #eidas.ms.sp.0.uniqueID=https://demo.egiz.gv.at/demoportal_moaid-2.0/sp/eidas/metadata
@@ -159,5 +176,37 @@ eidas.ms.pvp2.metadata.validity=24
 
 ##only for advanced config
 eidas.ms.configuration.sp.disableRegistrationRequirement=false
-eidas.ms.configuration.pvp.scheme.validation=true
-eidas.ms.configuration.pvp.enable.entitycategories=false
\ No newline at end of file
+
+
+
+#############################################################################
+## MS-speccific eIDAS-Proxy-Service configuration
+
+#### eIDAS ms-specific Proxy-Service configuration
+eidas.ms.auth.eIDAS.node_v2.proxy.entityId=ownSpecificProxy
+#eidas.ms.auth.eIDAS.node_v2.proxy.forward.endpoint=
+
+
+## PVP2 S-Profile communication with ID Austria System 
+# EntityId and optional metadata of ID Austria System
+#eidas.ms.modules.idaustriaauth.idp.entityId=
+#eidas.ms.modules.idaustriaauth.idp.metadataUrl=
+
+# SAML2 client configuration
+eidas.ms.modules.idaustriaauth.keystore.type=jks
+#eidas.ms.modules.idaustriaauth.keystore.name=
+#eidas.ms.modules.idaustriaauth.keystore.path=
+#eidas.ms.modules.idaustriaauth.keystore.password=
+#eidas.ms.modules.idaustriaauth.metadata.sign.alias=
+#eidas.ms.modules.idaustriaauth.metadata.sign.password=
+#eidas.ms.modules.idaustriaauth.request.sign.alias=
+#eidas.ms.modules.idaustriaauth.request.sign.password=
+#eidas.ms.modules.idaustriaauth.response.encryption.alias=
+#eidas.ms.modules.idaustriaauth.response.encryption.password=
+
+# TrustStore to validate SAML2 metadata from ID Austria 
+#eidas.ms.modules.idaustriaauth.truststore.type=jks
+#eidas.ms.modules.idaustriaauth.truststore.name=
+#eidas.ms.modules.idaustriaauth.truststore.path=
+#eidas.ms.modules.idaustriaauth.truststore.password=
+
diff --git a/connector/src/test/java/at/asitplus/eidas/specific/connector/test/utils/AuthenticationDataBuilderTest.java b/connector/src/test/java/at/asitplus/eidas/specific/connector/test/utils/AuthenticationDataBuilderTest.java
index 17ecb2ca..552c448e 100644
--- a/connector/src/test/java/at/asitplus/eidas/specific/connector/test/utils/AuthenticationDataBuilderTest.java
+++ b/connector/src/test/java/at/asitplus/eidas/specific/connector/test/utils/AuthenticationDataBuilderTest.java
@@ -32,6 +32,7 @@ import org.w3c.dom.Element;
 
 import at.asitplus.eidas.specific.connector.builder.AuthenticationDataBuilder;
 import at.asitplus.eidas.specific.modules.auth.eidas.v2.Constants;
+import at.asitplus.eidas.specific.modules.msproxyservice.MsProxyServiceConstants;
 import at.gv.egiz.eaaf.core.api.data.EaafConfigConstants;
 import at.gv.egiz.eaaf.core.api.data.EaafConstants;
 import at.gv.egiz.eaaf.core.api.data.ExtendedPvpAttributeDefinitions;
@@ -72,6 +73,7 @@ public class AuthenticationDataBuilderTest {
   private TestRequestImpl pendingReq;
 
   private DummySpConfiguration oaParam;
+  private Map<String, String> spConfig;
 
   private String eidasBind;
   private String authBlock;
@@ -92,7 +94,7 @@ public class AuthenticationDataBuilderTest {
     RequestContextHolder.resetRequestAttributes();
     RequestContextHolder.setRequestAttributes(new ServletRequestAttributes(httpReq, httpResp));
 
-    final Map<String, String> spConfig = new HashMap<>();
+    spConfig = new HashMap<>();
     spConfig.put(EaafConfigConstants.SERVICE_UNIQUEIDENTIFIER, "testSp");
     spConfig.put("target", "urn:publicid:gv.at:cdid+XX");
     spConfig.put(PROP_CONFIG_SP_NEW_EID_MODE, "true");
@@ -105,26 +107,90 @@ public class AuthenticationDataBuilderTest {
     pendingReq.setSpConfig(oaParam);
     authBlock = RandomStringUtils.randomAlphanumeric(20);
     eidasBind = RandomStringUtils.randomAlphanumeric(20);
-    pendingReq.getSessionData(AuthProcessDataWrapper.class)
-        .setGenericDataToSession(Constants.SZR_AUTHBLOCK, authBlock);
-    pendingReq.getSessionData(AuthProcessDataWrapper.class)
-        .setGenericDataToSession(Constants.EIDAS_BIND, eidasBind);
     pendingReq.getSessionData(AuthProcessDataWrapper.class)
         .setQaaLevel(EaafConstants.EIDAS_LOA_PREFIX + RandomStringUtils.randomAlphabetic(5));
     pendingReq.getSessionData(AuthProcessDataWrapper.class).setGenericDataToSession(
         PvpAttributeDefinitions.EID_ISSUING_NATION_NAME,
-        RandomStringUtils.randomAlphabetic(2));
+        RandomStringUtils.randomAlphabetic(2).toUpperCase());
 
     LocaleContextHolder.resetLocaleContext();
 
   }
 
   @Test
-  public void eidMode() throws EaafAuthenticationException {
+  public void eidasProxyMode() throws EaafAuthenticationException, EaafStorageException {
     // initialize state
     boolean isTestIdentity = RandomUtils.nextBoolean();
+    pendingReq.getSessionData(EidAuthProcessDataWrapper.class).setTestIdentity(isTestIdentity);
     pendingReq.getSessionData(AuthProcessDataWrapper.class).setEidProcess(true);
+    
+    String givenName = RandomStringUtils.randomAlphabetic(10);
+    String familyName = RandomStringUtils.randomAlphabetic(10);
+    String dateOfBirth = "1956-12-08";
+    String bpk = RandomStringUtils.randomAlphanumeric(10);
+    String cc = pendingReq.getSessionData(AuthProcessDataWrapper.class)
+        .getGenericDataFromSession(PvpAttributeDefinitions.EID_ISSUING_NATION_NAME, String.class);
+    String spC = RandomStringUtils.randomAlphabetic(2).toUpperCase();
+    
+    spConfig.put("target", EaafConstants.URN_PREFIX_EIDAS + cc + "+" + spC);
+    
+    pendingReq.getSessionData(AuthProcessDataWrapper.class).setEidProcess(true);
+    pendingReq.getSessionData(AuthProcessDataWrapper.class).setForeigner(false);
+    pendingReq.getSessionData(AuthProcessDataWrapper.class)
+        .setGenericDataToSession(PvpAttributeDefinitions.GIVEN_NAME_NAME, givenName);
+    pendingReq.getSessionData(AuthProcessDataWrapper.class)
+        .setGenericDataToSession(PvpAttributeDefinitions.PRINCIPAL_NAME_NAME, familyName);
+    pendingReq.getSessionData(AuthProcessDataWrapper.class)
+        .setGenericDataToSession(PvpAttributeDefinitions.BIRTHDATE_NAME, dateOfBirth);
+    pendingReq.getSessionData(AuthProcessDataWrapper.class)
+        .setGenericDataToSession(MsProxyServiceConstants.ATTR_EIDAS_PERSONAL_IDENTIFIER, bpk);
+        
+    //set LoA level attribute instead of explicit session-data
+    pendingReq.getSessionData(AuthProcessDataWrapper.class)
+    .setGenericDataToSession(PvpAttributeDefinitions.EID_CITIZEN_EIDAS_QAA_LEVEL_NAME, 
+        pendingReq.getSessionData(AuthProcessDataWrapper.class).getQaaLevel());
+    pendingReq.getSessionData(AuthProcessDataWrapper.class).setQaaLevel(null);
+    
+    
+    
+    // execute test
+    IAuthData authData = authenticationDataBuilder.buildAuthenticationData(pendingReq);
+
+    
+    // validate state
+    Assert.assertNotNull("AuthData null", authData);
+    Assert.assertNull("authBlock null", authData.getGenericData(Constants.SZR_AUTHBLOCK, String.class));
+    Assert.assertNull("eidasBind null", authData.getGenericData(Constants.EIDAS_BIND, String.class));
+        
+    Assert.assertEquals("LoA",  pendingReq.getSessionData(AuthProcessDataWrapper.class)
+        .getGenericDataFromSession(PvpAttributeDefinitions.EID_CITIZEN_EIDAS_QAA_LEVEL_NAME, String.class), 
+        authData.getEidasQaaLevel());
+    Assert.assertEquals("CitizenCountry", cc, authData.getCiticenCountryCode());
+    Assert.assertEquals("familyName", familyName, authData.getFamilyName());
+    Assert.assertEquals("givenName", givenName, authData.getGivenName());
+    Assert.assertEquals("DateOfBirth", dateOfBirth, authData.getFormatedDateOfBirth());
+    
+    Assert.assertEquals("bPK", pendingReq.getSessionData(AuthProcessDataWrapper.class)
+        .getGenericDataFromSession(MsProxyServiceConstants.ATTR_EIDAS_PERSONAL_IDENTIFIER, String.class), 
+        authData.getGenericData(MsProxyServiceConstants.ATTR_EIDAS_PERSONAL_IDENTIFIER, String.class));
+    
+    Assert.assertEquals("testIdentity flag", 
+        isTestIdentity ? EidIdentityStatusLevelValues.TESTIDENTITY : EidIdentityStatusLevelValues.IDENTITY, 
+        ((EidAuthenticationData)authData).getEidStatus());
+    
+    
+  }
+  
+  @Test
+  public void eidMode() throws EaafAuthenticationException, EaafStorageException {
+    // initialize state
+    boolean isTestIdentity = RandomUtils.nextBoolean();
     pendingReq.getSessionData(EidAuthProcessDataWrapper.class).setTestIdentity(isTestIdentity);
+    pendingReq.getSessionData(AuthProcessDataWrapper.class).setEidProcess(true);
+    pendingReq.getSessionData(AuthProcessDataWrapper.class)
+        .setGenericDataToSession(Constants.SZR_AUTHBLOCK, authBlock);
+    pendingReq.getSessionData(AuthProcessDataWrapper.class)
+        .setGenericDataToSession(Constants.EIDAS_BIND, eidasBind);
     
     // execute
     IAuthData authData = authenticationDataBuilder.buildAuthenticationData(pendingReq);
diff --git a/connector/src/test/resources/config/junit_config_1.properties b/connector/src/test/resources/config/junit_config_1.properties
index f6b3e4c1..044e33a6 100644
--- a/connector/src/test/resources/config/junit_config_1.properties
+++ b/connector/src/test/resources/config/junit_config_1.properties
@@ -116,6 +116,36 @@ eidas.ms.sp.1.policy.allowed.requested.targets=test
 eidas.ms.sp.1.policy.hasBaseIdTransferRestriction=true
 
 
+
+#### eIDAS ms-specific Proxy-Service configuration
+eidas.ms.auth.eIDAS.node_v2.proxy.entityId=ownSpecificProxy
+eidas.ms.auth.eIDAS.node_v2.proxy.forward.endpoint=http://eidas.proxy/endpoint
+
+
+## PVP2 S-Profile communication with ID Austria System 
+# EntityId and optional metadata of ID Austria System
+eidas.ms.modules.idaustriaauth.idp.entityId=http://junit.idaustria.at/idp
+#eidas.ms.modules.idaustriaauth.idp.metadataUrl=http://junit.idaustria.at/idp/metadata
+
+# SAML2 client configuration
+eidas.ms.modules.idaustriaauth.keystore.type=jks
+#eidas.ms.modules.idaustriaauth.keystore.name=
+eidas.ms.modules.idaustriaauth.keystore.path=keys/junit_test.jks
+eidas.ms.modules.idaustriaauth.keystore.password=password
+eidas.ms.modules.idaustriaauth.metadata.sign.alias=meta
+eidas.ms.modules.idaustriaauth.metadata.sign.password=password
+eidas.ms.modules.idaustriaauth.request.sign.alias=sig
+eidas.ms.modules.idaustriaauth.request.sign.password=password
+eidas.ms.modules.idaustriaauth.response.encryption.alias=enc
+eidas.ms.modules.idaustriaauth.response.encryption.password=password
+
+# TrustStore to validate SAML2 metadata from ID Austria 
+eidas.ms.modules.idaustriaauth.truststore.type=jks
+eidas.ms.modules.idaustriaauth.truststore.name=
+eidas.ms.modules.idaustriaauth.truststore.path=keys/junit_test.jks
+eidas.ms.modules.idaustriaauth.truststore.password=password
+
+
 ##only for advanced config
 eidas.ms.configuration.sp.disableRegistrationRequirement=
 #eidas.ms.configuration.restrictions.baseID.spTransmission=
diff --git a/connector/src/test/resources/config/junit_config_1_springboot.properties b/connector/src/test/resources/config/junit_config_1_springboot.properties
index e63cda7b..991036fe 100644
--- a/connector/src/test/resources/config/junit_config_1_springboot.properties
+++ b/connector/src/test/resources/config/junit_config_1_springboot.properties
@@ -43,7 +43,6 @@ eidas.ms.auth.eIDAS.szrclient.debug.logfullmessages=true
 eidas.ms.auth.eIDAS.szrclient.debug.useDummySolution=false
 
 
-
 ## PVP2 S-Profile end-point configuration
 eidas.ms.pvp2.keystore.type=jks
 eidas.ms.pvp2.keystore.path=keys/junit.jks
@@ -81,3 +80,34 @@ eidas.ms.sp.1.pvp2.metadata.url=http://junit.test/metadata
 eidas.ms.sp.1.policy.allowed.requested.targets=test
 eidas.ms.sp.1.policy.hasBaseIdTransferRestriction=true
 
+
+
+#### eIDAS ms-specific Proxy-Service configuration
+eidas.ms.auth.eIDAS.node_v2.proxy.entityId=ownSpecificProxy
+eidas.ms.auth.eIDAS.node_v2.proxy.forward.endpoint=http://eidas.proxy/endpoint
+
+
+## PVP2 S-Profile communication with ID Austria System 
+# EntityId and optional metadata of ID Austria System
+eidas.ms.modules.idaustriaauth.idp.entityId=http://junit.idaustria.at/idp
+#eidas.ms.modules.idaustriaauth.idp.metadataUrl=http://junit.idaustria.at/idp/metadata
+
+# SAML2 client configuration
+eidas.ms.modules.idaustriaauth.keystore.type=jks
+#eidas.ms.modules.idaustriaauth.keystore.name=
+eidas.ms.modules.idaustriaauth.keystore.path=keys/junit_test.jks
+eidas.ms.modules.idaustriaauth.keystore.password=password
+eidas.ms.modules.idaustriaauth.metadata.sign.alias=meta
+eidas.ms.modules.idaustriaauth.metadata.sign.password=password
+eidas.ms.modules.idaustriaauth.request.sign.alias=sig
+eidas.ms.modules.idaustriaauth.request.sign.password=password
+eidas.ms.modules.idaustriaauth.response.encryption.alias=enc
+eidas.ms.modules.idaustriaauth.response.encryption.password=password
+
+# TrustStore to validate SAML2 metadata from ID Austria 
+eidas.ms.modules.idaustriaauth.truststore.type=jks
+eidas.ms.modules.idaustriaauth.truststore.name=
+eidas.ms.modules.idaustriaauth.truststore.path=keys/junit_test.jks
+eidas.ms.modules.idaustriaauth.truststore.password=password
+
+
diff --git a/connector/src/test/resources/config/junit_config_2_springboot.properties b/connector/src/test/resources/config/junit_config_2_springboot.properties
index ecb22dec..de887fe6 100644
--- a/connector/src/test/resources/config/junit_config_2_springboot.properties
+++ b/connector/src/test/resources/config/junit_config_2_springboot.properties
@@ -81,3 +81,33 @@ eidas.ms.sp.1.pvp2.metadata.url=http://junit.test/metadata
 eidas.ms.sp.1.policy.allowed.requested.targets=test
 eidas.ms.sp.1.policy.hasBaseIdTransferRestriction=true
 
+
+
+#### eIDAS ms-specific Proxy-Service configuration
+eidas.ms.auth.eIDAS.node_v2.proxy.entityId=ownSpecificProxy
+eidas.ms.auth.eIDAS.node_v2.proxy.forward.endpoint=http://eidas.proxy/endpoint
+
+
+## PVP2 S-Profile communication with ID Austria System 
+# EntityId and optional metadata of ID Austria System
+eidas.ms.modules.idaustriaauth.idp.entityId=http://junit.idaustria.at/idp
+#eidas.ms.modules.idaustriaauth.idp.metadataUrl=http://junit.idaustria.at/idp/metadata
+
+# SAML2 client configuration
+eidas.ms.modules.idaustriaauth.keystore.type=jks
+#eidas.ms.modules.idaustriaauth.keystore.name=
+eidas.ms.modules.idaustriaauth.keystore.path=keys/junit_test.jks
+eidas.ms.modules.idaustriaauth.keystore.password=password
+eidas.ms.modules.idaustriaauth.metadata.sign.alias=meta
+eidas.ms.modules.idaustriaauth.metadata.sign.password=password
+eidas.ms.modules.idaustriaauth.request.sign.alias=sig
+eidas.ms.modules.idaustriaauth.request.sign.password=password
+eidas.ms.modules.idaustriaauth.response.encryption.alias=enc
+eidas.ms.modules.idaustriaauth.response.encryption.password=password
+
+# TrustStore to validate SAML2 metadata from ID Austria 
+eidas.ms.modules.idaustriaauth.truststore.type=jks
+eidas.ms.modules.idaustriaauth.truststore.name=
+eidas.ms.modules.idaustriaauth.truststore.path=keys/junit_test.jks
+eidas.ms.modules.idaustriaauth.truststore.password=password
+
diff --git a/connector/src/test/resources/config/junit_config_3.properties b/connector/src/test/resources/config/junit_config_3.properties
index 8b2c63a8..b4de5aa9 100644
--- a/connector/src/test/resources/config/junit_config_3.properties
+++ b/connector/src/test/resources/config/junit_config_3.properties
@@ -109,6 +109,37 @@ eidas.ms.sp.0.newEidMode=true
 #eidas.ms.sp.0.policy.hasBaseIdTransferRestriction=false
 
 
+
+#### eIDAS ms-specific Proxy-Service configuration
+eidas.ms.auth.eIDAS.node_v2.proxy.entityId=ownSpecificProxy
+eidas.ms.auth.eIDAS.node_v2.proxy.forward.endpoint=http://eidas.proxy/endpoint
+
+
+## PVP2 S-Profile communication with ID Austria System 
+# EntityId and optional metadata of ID Austria System
+eidas.ms.modules.idaustriaauth.idp.entityId=http://junit.idaustria.at/idp
+#eidas.ms.modules.idaustriaauth.idp.metadataUrl=http://junit.idaustria.at/idp/metadata
+
+# SAML2 client configuration
+eidas.ms.modules.idaustriaauth.keystore.type=jks
+#eidas.ms.modules.idaustriaauth.keystore.name=
+eidas.ms.modules.idaustriaauth.keystore.path=keys/junit_test.jks
+eidas.ms.modules.idaustriaauth.keystore.password=password
+eidas.ms.modules.idaustriaauth.metadata.sign.alias=meta
+eidas.ms.modules.idaustriaauth.metadata.sign.password=password
+eidas.ms.modules.idaustriaauth.request.sign.alias=sig
+eidas.ms.modules.idaustriaauth.request.sign.password=password
+eidas.ms.modules.idaustriaauth.response.encryption.alias=enc
+eidas.ms.modules.idaustriaauth.response.encryption.password=password
+
+# TrustStore to validate SAML2 metadata from ID Austria 
+eidas.ms.modules.idaustriaauth.truststore.type=jks
+eidas.ms.modules.idaustriaauth.truststore.name=
+eidas.ms.modules.idaustriaauth.truststore.path=keys/junit_test.jks
+eidas.ms.modules.idaustriaauth.truststore.password=password
+
+
+
 ##only for advanced config
 eidas.ms.configuration.sp.disableRegistrationRequirement=
 eidas.ms.configuration.restrictions.baseID.spTransmission=
diff --git a/connector/src/test/resources/config/keys/junit_test.jks b/connector/src/test/resources/config/keys/junit_test.jks
new file mode 100644
index 00000000..ee6254a9
Binary files /dev/null and b/connector/src/test/resources/config/keys/junit_test.jks differ
-- 
cgit v1.2.3


From 1ae77e971928a44dd278eaa473392c35855c4227 Mon Sep 17 00:00:00 2001
From: Thomas Lenz <thomas.lenz@egiz.gv.at>
Date: Tue, 26 Jan 2021 07:40:01 +0100
Subject: update SAML2 IDP elements of MS-specific Connector to current
 snapshot version (1.1.12-SNAPSHOT) of eaaf_module_pvp2_idp

---
 .../resources/specific_eIDAS_connector.beans.xml   | 81 ++++++++++------------
 .../spring/SpringTest_connector.beans.xml          | 21 ++----
 2 files changed, 42 insertions(+), 60 deletions(-)

(limited to 'connector/src')

diff --git a/connector/src/main/resources/specific_eIDAS_connector.beans.xml b/connector/src/main/resources/specific_eIDAS_connector.beans.xml
index 8ff4e565..ecf6d348 100644
--- a/connector/src/main/resources/specific_eIDAS_connector.beans.xml
+++ b/connector/src/main/resources/specific_eIDAS_connector.beans.xml
@@ -14,71 +14,60 @@
   <import resource="common_gui.beans.xml"/>
 
   <bean id="WebResourceConfiguration"
-    class="at.asitplus.eidas.specific.connector.config.StaticResourceConfiguration" />
+        class="at.asitplus.eidas.specific.connector.config.StaticResourceConfiguration" />
 
   <bean id="processEngineSignalController"
-    class="at.asitplus.eidas.specific.connector.controller.ProcessEngineSignalController" />
+        class="at.asitplus.eidas.specific.connector.controller.ProcessEngineSignalController" />
 
   <bean id="saml2MetadataGeneration"
         class="at.asitplus.eidas.specific.connector.health.Saml2MetadataHealthIndicator">
-    <property name="pvpIdpCredentials">
-      <ref bean="PVPEndPointCredentialProvider" />
-    </property>
+    <property name="pvpIdpCredentials" ref="PVPEndPointCredentialProvider" />
   </bean>
 
   <bean id="eidasNodeMetadata"
         class="at.asitplus.eidas.specific.connector.health.EidasNodeMetadataHealthIndicator" />
 
   <bean id="AuthenticationManager"
-    class="at.asitplus.eidas.specific.connector.auth.AuthenticationManager" />
+        class="at.asitplus.eidas.specific.connector.auth.AuthenticationManager" />
 
   <bean id="AuthenticationDataBuilder"
-    class="at.asitplus.eidas.specific.connector.builder.AuthenticationDataBuilder" />
+        class="at.asitplus.eidas.specific.connector.builder.AuthenticationDataBuilder" />
 
   <bean id="PVPEndPointConfiguration"
-    class="at.asitplus.eidas.specific.connector.config.PvpEndPointConfiguration" />
+        class="at.asitplus.eidas.specific.connector.config.PvpEndPointConfiguration" />
 
   <bean id="PVPEndPointCredentialProvider"
-    class="at.asitplus.eidas.specific.connector.provider.PvpEndPointCredentialProvider" />
+        class="at.asitplus.eidas.specific.connector.provider.PvpEndPointCredentialProvider" />
 
   <bean id="PVPMetadataConfigurationFactory"
-    class="at.asitplus.eidas.specific.connector.provider.PvpMetadataConfigurationFactory" />
+        class="at.asitplus.eidas.specific.connector.provider.PvpMetadataConfigurationFactory" />
 
   <bean id="pvp2SProfileEndpoint"
-    class="at.asitplus.eidas.specific.connector.controller.Pvp2SProfileEndpoint">
-    <property name="pvpIdpCredentials">
-      <ref bean="PVPEndPointCredentialProvider" />
-    </property>
-    <property name="metadataProvider">
-      <ref bean="PVPMetadataProvider" />
-    </property>   
+        class="at.asitplus.eidas.specific.connector.controller.Pvp2SProfileEndpoint">
+    <property name="pvpIdpCredentials" ref="PVPEndPointCredentialProvider" />
+    <property name="metadataProvider" ref="PVPMetadataProvider" />
+
   </bean>
 
   <bean id="AuthnRequestValidator"
-    class="at.asitplus.eidas.specific.connector.verification.AuthnRequestValidator" />
+        class="at.asitplus.eidas.specific.connector.verification.AuthnRequestValidator" />
 
-  <bean id="SAMLVerificationEngine"
-    class="at.gv.egiz.eaaf.modules.pvp2.impl.verification.SamlVerificationEngine" />
+  <!-- bean id="SAMLVerificationEngine"
+        class="at.gv.egiz.eaaf.modules.pvp2.impl.verification.SamlVerificationEngine" /-->
 
   <bean id="pvpMetadataService"
-    class="at.gv.egiz.eaaf.modules.pvp2.idp.impl.MetadataAction">
-    <property name="pvpIdpCredentials">
-      <ref bean="PVPEndPointCredentialProvider" />
-    </property>
+        class="at.gv.egiz.eaaf.modules.pvp2.idp.impl.MetadataAction">
+    <property name="pvpIdpCredentials" ref="PVPEndPointCredentialProvider" />
   </bean>
 
   <bean id="PVPAuthenticationRequestAction"
-    class="at.gv.egiz.eaaf.modules.pvp2.idp.impl.AuthenticationAction">
-    <property name="pvpIdpCredentials">
-      <ref bean="PVPEndPointCredentialProvider" />
-    </property>
-    <property name="metadataProvider">
-      <ref bean="PVPMetadataProvider" />
-    </property>     
+        class="at.gv.egiz.eaaf.modules.pvp2.idp.impl.AuthenticationAction">
+    <property name="pvpIdpCredentials" ref="PVPEndPointCredentialProvider" />
+    <property name="metadataProvider" ref="PVPMetadataProvider" />
   </bean>
 
   <bean id="eaafProtocolAuthenticationService"
-    class="at.gv.egiz.eaaf.core.impl.idp.auth.services.ProtocolAuthenticationService">
+        class="at.gv.egiz.eaaf.core.impl.idp.auth.services.ProtocolAuthenticationService">
     <property name="guiBuilder" ref="mvcGUIBuilderImpl" />
   </bean>
 
@@ -86,43 +75,43 @@
         class="at.gv.egiz.eaaf.core.impl.idp.auth.services.DefaultErrorService"/>
 
   <bean id="securePendingRequestIdGeneration"
-    class="at.gv.egiz.eaaf.core.impl.utils.SecurePendingRequestIdGenerationStrategy" />
+        class="at.gv.egiz.eaaf.core.impl.utils.SecurePendingRequestIdGenerationStrategy" />
 
   <bean id="PVPMetadataProvider"
-    class="at.asitplus.eidas.specific.connector.provider.PvpMetadataProvider" />
+        class="at.asitplus.eidas.specific.connector.provider.PvpMetadataProvider" />
 
   <bean id="PVPSubjectNameGenerator"
-    class="at.asitplus.eidas.specific.connector.builder.PvpSubjectNameGenerator" />
+        class="at.asitplus.eidas.specific.connector.builder.PvpSubjectNameGenerator" />
 
   <bean id="LoALevelMapper"
-    class="at.asitplus.eidas.specific.connector.mapper.LoALevelMapper" />
+        class="at.asitplus.eidas.specific.connector.mapper.LoALevelMapper" />
 
   <bean id="GUIBuilderConfigurationFactory"
-    class="at.asitplus.eidas.specific.connector.gui.GuiBuilderConfigurationFactory" />
+        class="at.asitplus.eidas.specific.connector.gui.GuiBuilderConfigurationFactory" />
 
   <bean id="velocityGUIBuilderImpl"
-    class="at.asitplus.eidas.specific.connector.gui.DefaultVelocityGuiBuilderImpl" />
+        class="at.asitplus.eidas.specific.connector.gui.DefaultVelocityGuiBuilderImpl" />
 
   <bean id="mvcGUIBuilderImpl"
-    class="at.gv.egiz.eaaf.core.impl.gui.builder.SpringMvcGuiFormBuilderImpl" />
+        class="at.gv.egiz.eaaf.core.impl.gui.builder.SpringMvcGuiFormBuilderImpl" />
 
   <bean id="StatusMessageProvider"
-    class="at.asitplus.eidas.specific.connector.provider.StatusMessageProvider" />
+        class="at.asitplus.eidas.specific.connector.provider.StatusMessageProvider" />
 
   <bean id="eidasRevisionLogger"
-    class="at.asitplus.eidas.specific.connector.logger.RevisionLogger" />
+        class="at.asitplus.eidas.specific.connector.logger.RevisionLogger" />
 
   <bean id="eidasStatisticLogger"
-    class="at.asitplus.eidas.specific.connector.logger.StatisticLogger" />
+        class="at.asitplus.eidas.specific.connector.logger.StatisticLogger" />
 
 
   <!-- Tasks -->
   <bean id="GenerateCountrySelectionFrameTask"
-    class="at.asitplus.eidas.specific.connector.processes.tasks.GenerateCountrySelectionFrameTask"
-    scope="prototype" />
+        class="at.asitplus.eidas.specific.connector.processes.tasks.GenerateCountrySelectionFrameTask"
+        scope="prototype" />
 
   <bean id="EvaluateCountrySelectionTask"
-    class="at.asitplus.eidas.specific.connector.processes.tasks.EvaluateCountrySelectionTask"
-    scope="prototype" />
+        class="at.asitplus.eidas.specific.connector.processes.tasks.EvaluateCountrySelectionTask"
+        scope="prototype" />
 
 </beans>
\ No newline at end of file
diff --git a/connector/src/test/resources/spring/SpringTest_connector.beans.xml b/connector/src/test/resources/spring/SpringTest_connector.beans.xml
index 8f3d25ad..6fec6000 100644
--- a/connector/src/test/resources/spring/SpringTest_connector.beans.xml
+++ b/connector/src/test/resources/spring/SpringTest_connector.beans.xml
@@ -38,19 +38,16 @@
 
   <bean id="PVP2XProtocol"
     class="at.asitplus.eidas.specific.connector.controller.Pvp2SProfileEndpoint">
-    <property name="pvpIdpCredentials">
-      <ref bean="PVPEndPointCredentialProvider" />
-    </property>
-    <property name="metadataProvider">
-      <ref bean="PVPMetadataProvider" />
-    </property>       
+    <property name="pvpIdpCredentials" ref="PVPEndPointCredentialProvider" />
+    <property name="metadataProvider" ref="PVPMetadataProvider" />
   </bean>
 
   <bean id="AuthnRequestValidator"
     class="at.asitplus.eidas.specific.connector.verification.AuthnRequestValidator" />
 
-  <bean id="SAMLVerificationEngine"
-    class="at.gv.egiz.eaaf.modules.pvp2.impl.verification.SamlVerificationEngine" />
+  <!-- bean id="SAMLVerificationEngine"
+        class="at.gv.egiz.eaaf.modules.pvp2.impl.verification.SamlVerificationEngine" /-->
+
 
   <bean id="pvpMetadataService"
     class="at.gv.egiz.eaaf.modules.pvp2.idp.impl.MetadataAction">
@@ -61,12 +58,8 @@
 
   <bean id="PVPAuthenticationRequestAction"
     class="at.gv.egiz.eaaf.modules.pvp2.idp.impl.AuthenticationAction">
-    <property name="pvpIdpCredentials">
-      <ref bean="PVPEndPointCredentialProvider" />
-    </property>
-    <property name="metadataProvider">
-      <ref bean="PVPMetadataProvider" />
-    </property>     
+    <property name="pvpIdpCredentials" ref="PVPEndPointCredentialProvider" />
+    <property name="metadataProvider" ref="PVPMetadataProvider" />
   </bean>
 
   <bean id="eaafProtocolAuthenticationService"
-- 
cgit v1.2.3


From 2daed784e006d449de5b6151f6e109ab2a829749 Mon Sep 17 00:00:00 2001
From: Thomas <>
Date: Tue, 30 Mar 2021 15:08:07 +0200
Subject: add mandate functionality into eIDAS out-going process

---
 .../builder/AuthenticationDataBuilder.java         | 182 +++++++++++++++---
 .../test/utils/AuthenticationDataBuilderTest.java  | 206 ++++++++++++++++++++-
 2 files changed, 359 insertions(+), 29 deletions(-)

(limited to 'connector/src')

diff --git a/connector/src/main/java/at/asitplus/eidas/specific/connector/builder/AuthenticationDataBuilder.java b/connector/src/main/java/at/asitplus/eidas/specific/connector/builder/AuthenticationDataBuilder.java
index 2e70893b..629d015e 100644
--- a/connector/src/main/java/at/asitplus/eidas/specific/connector/builder/AuthenticationDataBuilder.java
+++ b/connector/src/main/java/at/asitplus/eidas/specific/connector/builder/AuthenticationDataBuilder.java
@@ -24,19 +24,31 @@
 package at.asitplus.eidas.specific.connector.builder;
 
 import java.util.Date;
+import java.util.Optional;
+import java.util.Set;
+import java.util.stream.Collectors;
 
 import org.springframework.stereotype.Service;
 
+import com.google.common.collect.Streams;
+
 import at.asitplus.eidas.specific.connector.MsEidasNodeConstants;
+import at.asitplus.eidas.specific.modules.auth.idaustria.IdAustriaAuthConstants;
+import at.asitplus.eidas.specific.modules.msproxyservice.MsProxyServiceConstants;
 import at.gv.egiz.eaaf.core.api.IRequest;
 import at.gv.egiz.eaaf.core.api.data.ExtendedPvpAttributeDefinitions;
+import at.gv.egiz.eaaf.core.api.data.PvpAttributeDefinitions;
 import at.gv.egiz.eaaf.core.api.data.PvpAttributeDefinitions.EidIdentityStatusLevelValues;
 import at.gv.egiz.eaaf.core.api.idp.IAuthData;
 import at.gv.egiz.eaaf.core.api.idp.ISpConfiguration;
 import at.gv.egiz.eaaf.core.api.idp.auth.data.IAuthProcessDataContainer;
+import at.gv.egiz.eaaf.core.exceptions.EaafAuthenticationException;
 import at.gv.egiz.eaaf.core.exceptions.EaafBuilderException;
 import at.gv.egiz.eaaf.core.exceptions.EaafException;
+import at.gv.egiz.eaaf.core.exceptions.EaafStorageException;
+import at.gv.egiz.eaaf.core.impl.builder.BpkBuilder;
 import at.gv.egiz.eaaf.core.impl.data.Pair;
+import at.gv.egiz.eaaf.core.impl.data.Triple;
 import at.gv.egiz.eaaf.core.impl.idp.AuthenticationData;
 import at.gv.egiz.eaaf.core.impl.idp.EidAuthenticationData;
 import at.gv.egiz.eaaf.core.impl.idp.auth.builder.AbstractAuthenticationDataBuilder;
@@ -46,55 +58,59 @@ import lombok.extern.slf4j.Slf4j;
 @Service("AuthenticationDataBuilder")
 @Slf4j
 public class AuthenticationDataBuilder extends AbstractAuthenticationDataBuilder {
-  
+
+  private static final String ERROR_B11 = "builder.11";
+
   @Override
-  protected IAuthData buildDeprecatedAuthData(IRequest pendingReq) throws EaafException {        
+  protected IAuthData buildDeprecatedAuthData(IRequest pendingReq) throws EaafException {
     final EidAuthProcessDataWrapper authProcessData =
-        pendingReq.getSessionData(EidAuthProcessDataWrapper.class);    
-    EidAuthenticationData authData = new EidAuthenticationData();
-    
-    //set basis infos
+        pendingReq.getSessionData(EidAuthProcessDataWrapper.class);
+    final EidAuthenticationData authData = new EidAuthenticationData();
+
+    // set basis infos
     super.generateDeprecatedBasicAuthData(authData, pendingReq, authProcessData);
-    
+
     // set specific informations
     authData.setSsoSessionValidTo(
         new Date(new Date().getTime() + MsEidasNodeConstants.DEFAULT_PVP_ASSERTION_VALIDITY * 60 * 1000));
-    
-    authData.setEidStatus(authProcessData.isTestIdentity() 
-        ? EidIdentityStatusLevelValues.TESTIDENTITY : EidIdentityStatusLevelValues.IDENTITY);
-    
+
+    authData.setEidStatus(authProcessData.isTestIdentity()
+        ? EidIdentityStatusLevelValues.TESTIDENTITY
+        : EidIdentityStatusLevelValues.IDENTITY);
+
     return authData;
 
   }
 
   @Override
-  protected void buildServiceSpecificAuthenticationData(IAuthData authData, IRequest pendingReq) 
+  protected void buildServiceSpecificAuthenticationData(IAuthData authData, IRequest pendingReq)
       throws EaafException {
     if (authData instanceof EidAuthenticationData) {
-      ((EidAuthenticationData)authData).setGenericData(
-          ExtendedPvpAttributeDefinitions.EID_PII_TRANSACTION_ID_NAME, 
+      ((EidAuthenticationData) authData).setGenericData(
+          ExtendedPvpAttributeDefinitions.EID_PII_TRANSACTION_ID_NAME,
           pendingReq.getUniquePiiTransactionIdentifier());
       log.trace("Inject piiTransactionId: {} into AuthData", pendingReq.getUniquePiiTransactionIdentifier());
-    
+
       // set specific informations
-      ((EidAuthenticationData)authData).setSsoSessionValidTo(
+      ((EidAuthenticationData) authData).setSsoSessionValidTo(
           new Date(new Date().getTime() + MsEidasNodeConstants.DEFAULT_PVP_ASSERTION_VALIDITY * 60 * 1000));
 
-      //set E-ID status-level
+      // set E-ID status-level
       final EidAuthProcessDataWrapper authProcessData =
-          pendingReq.getSessionData(EidAuthProcessDataWrapper.class);        
-      ((EidAuthenticationData)authData).setEidStatus(authProcessData.isTestIdentity() 
-          ? EidIdentityStatusLevelValues.TESTIDENTITY : EidIdentityStatusLevelValues.IDENTITY);
-      
-      
-      
-      
+          pendingReq.getSessionData(EidAuthProcessDataWrapper.class);
+      ((EidAuthenticationData) authData).setEidStatus(authProcessData.isTestIdentity()
+          ? EidIdentityStatusLevelValues.TESTIDENTITY
+          : EidIdentityStatusLevelValues.IDENTITY);
+
+      // handle mandate informations
+      buildMandateInformation((EidAuthenticationData) authData, pendingReq, authProcessData);
+
     } else {
-      throw new RuntimeException("Can not inject PiiTransactionId because AuthData is of unknown type: " 
+      throw new RuntimeException("Can not inject PiiTransactionId because AuthData is of unknown type: "
           + authData.getClass().getName());
-      
+
     }
-        
+
   }
 
   @Override
@@ -123,4 +139,116 @@ public class AuthenticationDataBuilder extends AbstractAuthenticationDataBuilder
 
   }
 
+  private void buildMandateInformation(EidAuthenticationData authData, IRequest pendingReq,
+      EidAuthProcessDataWrapper authProcessData) throws EaafAuthenticationException, EaafBuilderException,
+      EaafStorageException {
+    authData.setUseMandate(authProcessData.isMandateUsed());
+    if (authProcessData.isMandateUsed()) {
+      log.debug("Build mandate-releated authentication data ... ");
+      if (authProcessData.isForeigner()) {
+        buildMandateInformationForEidasIncoming();
+
+      } else {
+        buildMandateInformationForEidasOutgoing(authData, pendingReq, authProcessData);
+
+      }
+
+      // inject mandate information into authdata
+      final Set<String> mandateAttributes = Streams.concat(
+          IdAustriaAuthConstants.DEFAULT_REQUIRED_MANDATE_NAT_PVP_ATTRIBUTES.stream(),
+          IdAustriaAuthConstants.DEFAULT_REQUIRED_MANDATE_JUR_PVP_ATTRIBUTES.stream())
+          .map(el -> el.getFirst())
+          .collect(Collectors.toSet());
+
+      authProcessData.getGenericSessionDataStream()
+          .filter(el -> mandateAttributes.contains(el.getKey()))
+          .forEach(el -> {
+            try {
+              authData.setGenericData(el.getKey(), el.getValue());
+
+            } catch (final EaafStorageException e) {
+              log.error("Can not store attribute: {} into session.", el.getKey(), e);
+              throw new RuntimeException(e);
+
+            }
+          });
+    }
+  }
+
+  private void buildMandateInformationForEidasIncoming() {
+    log.debug("Find eIDAS incoming process. Generated mandate-information for ID-Austria system ... ");
+
+    // TODO: implement IDA specific processing of foreign mandate
+
+  }
+
+  private void buildMandateInformationForEidasOutgoing(EidAuthenticationData authData, IRequest pendingReq,
+      EidAuthProcessDataWrapper authProcessData) throws EaafAuthenticationException, EaafBuilderException,
+      EaafStorageException {
+    log.debug("Find eIDAS outgoing process. Generated mandate-information for other country ... ");
+    if (authProcessData.getGenericDataFromSession(
+        PvpAttributeDefinitions.MANDATE_NAT_PER_BPK_NAME) != null) {
+      final Optional<Triple<String, String, Boolean>> missingAttribute =
+          IdAustriaAuthConstants.DEFAULT_REQUIRED_MANDATE_NAT_PVP_ATTRIBUTES.stream()
+              .filter(el -> authProcessData.getGenericDataFromSession(el.getFirst()) == null)
+              .findFirst();
+      if (missingAttribute.isPresent()) {
+        log.error("ID-Austria response contains not all attributes for nat. person mandator. Missing: {}",
+            missingAttribute.get().getFirst());
+        throw new EaafAuthenticationException(ERROR_B11, new Object[] { "Nat. person mandate" });
+
+      } else {
+        log.trace("Find nat. person mandate. Mandate can be used as it is ");
+        authData.setGenericData(MsProxyServiceConstants.ATTR_EIDAS_NAT_MANDATOR_PERSONAL_IDENTIFIER,
+            extractBpkFromResponse(authProcessData.getGenericDataFromSession(
+                PvpAttributeDefinitions.MANDATE_NAT_PER_BPK_NAME, String.class)));
+
+      }
+
+    } else {
+      final Optional<Triple<String, String, Boolean>> missingAttribute =
+          IdAustriaAuthConstants.DEFAULT_REQUIRED_MANDATE_JUR_PVP_ATTRIBUTES.stream()
+              .filter(el -> authProcessData.getGenericDataFromSession(el.getFirst()) == null)
+              .findFirst();
+      if (missingAttribute.isPresent()) {
+        log.error("ID-Austria response contains not all attributes for legal. person mandator. Missing: {}",
+            missingAttribute.get().getFirst());
+        throw new EaafAuthenticationException(ERROR_B11, new Object[] { "Legal. person mandate" });
+
+      } else {
+        log.trace(
+            "Find jur. person mandate. Generate eIDAS identifier from legal-person sourcePin and type ... ");
+        final String sourcePin = authProcessData.getGenericDataFromSession(
+            PvpAttributeDefinitions.MANDATE_LEG_PER_SOURCE_PIN_NAME, String.class);
+        final String sourcePinType = authProcessData.getGenericDataFromSession(
+            PvpAttributeDefinitions.MANDATE_LEG_PER_SOURCE_PIN_TYPE_NAME, String.class);
+
+        // TODO: check if we should to this in such a way!
+        final Pair<String, String> leagalPersonIdentifier =
+            BpkBuilder.generateAreaSpecificPersonIdentifier(
+                sourcePinType + sourcePin,
+                sourcePinType,
+                pendingReq.getServiceProviderConfiguration().getAreaSpecificTargetIdentifier());
+
+        log.debug("Use legal-person eIDAS identifer: {} from baseId: {} and baseIdType: {}",
+            leagalPersonIdentifier.getFirst(), sourcePin, sourcePinType);
+        authData.setGenericData(MsProxyServiceConstants.ATTR_EIDAS_JUR_MANDATOR_PERSONAL_IDENTIFIER,
+            leagalPersonIdentifier.getFirst());
+
+      }
+    }
+  }
+
+  private String extractBpkFromResponse(String pvpBpkAttrValue) {
+    final String[] split = pvpBpkAttrValue.split(":", 2);
+    if (split.length == 2) {
+      return split[1];
+
+    } else {
+      log.warn("PVP bPK attribute: {} has wrong format. Use it as it is.", pvpBpkAttrValue);
+      return pvpBpkAttrValue;
+
+    }
+  }
+
 }
diff --git a/connector/src/test/java/at/asitplus/eidas/specific/connector/test/utils/AuthenticationDataBuilderTest.java b/connector/src/test/java/at/asitplus/eidas/specific/connector/test/utils/AuthenticationDataBuilderTest.java
index 552c448e..277138ef 100644
--- a/connector/src/test/java/at/asitplus/eidas/specific/connector/test/utils/AuthenticationDataBuilderTest.java
+++ b/connector/src/test/java/at/asitplus/eidas/specific/connector/test/utils/AuthenticationDataBuilderTest.java
@@ -1,6 +1,10 @@
 package at.asitplus.eidas.specific.connector.test.utils;
 
 import static at.asitplus.eidas.specific.connector.MsEidasNodeConstants.PROP_CONFIG_SP_NEW_EID_MODE;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertThrows;
+import static org.junit.Assert.assertTrue;
 
 import java.io.IOException;
 import java.security.PublicKey;
@@ -176,9 +180,169 @@ public class AuthenticationDataBuilderTest {
     
     Assert.assertEquals("testIdentity flag", 
         isTestIdentity ? EidIdentityStatusLevelValues.TESTIDENTITY : EidIdentityStatusLevelValues.IDENTITY, 
-        ((EidAuthenticationData)authData).getEidStatus());
+        ((EidAuthenticationData)authData).getEidStatus());        
+    assertFalse("mandate flag", ((EidAuthenticationData)authData).isUseMandate());
+    
+  }
+  
+  @Test
+  public void eidasProxyModeWithJurMandate() throws EaafAuthenticationException, EaafStorageException {
+    // initialize state    
+    injectRepresentativeInfosIntoSession();
+    
+    String commonMandate = RandomStringUtils.randomAlphabetic(10);
+    
+    // set constant country-code and sourcePin to check hashed eIDAS identifier
+    String sourcePinMandate = "asfdsadfsadfsafsdafsadfasr";       
+    spConfig.put("target", EaafConstants.URN_PREFIX_EIDAS + "AT+EE");
+    
+    // set nat. person mandate information
+    pendingReq.getSessionData(AuthProcessDataWrapper.class).setUseMandates(true);
+    pendingReq.getSessionData(AuthProcessDataWrapper.class)
+        .setGenericDataToSession(PvpAttributeDefinitions.MANDATE_LEG_PER_FULL_NAME_NAME, commonMandate);
+    pendingReq.getSessionData(AuthProcessDataWrapper.class)
+        .setGenericDataToSession(PvpAttributeDefinitions.MANDATE_LEG_PER_SOURCE_PIN_NAME, sourcePinMandate);
+    pendingReq.getSessionData(AuthProcessDataWrapper.class)
+        .setGenericDataToSession(PvpAttributeDefinitions.MANDATE_LEG_PER_SOURCE_PIN_TYPE_NAME, 
+            EaafConstants.URN_PREFIX_BASEID + "+XFN");            
+    
+    // execute test
+    IAuthData authData = authenticationDataBuilder.buildAuthenticationData(pendingReq);
+
+    
+    // validate state
+    Assert.assertNotNull("AuthData null", authData);    
+    assertTrue("mandate flag", ((EidAuthenticationData)authData).isUseMandate());
+    
+    //check mandate informations
+    checkGenericAttribute(authData, PvpAttributeDefinitions.MANDATE_LEG_PER_FULL_NAME_NAME, commonMandate);
+    checkGenericAttribute(authData, MsProxyServiceConstants.ATTR_EIDAS_JUR_MANDATOR_PERSONAL_IDENTIFIER, 
+        "AT/EE/oaAGaV/zIHSf6rcB0TIOqjWPoOU=");
+        
+  }
+  
+  @Test
+  public void eidasProxyModeWithJurMandateMissingAttribute() throws EaafAuthenticationException, EaafStorageException {
+    // initialize state    
+    injectRepresentativeInfosIntoSession();
+    
+    // set constant country-code and sourcePin to check hashed eIDAS identifier
+    String sourcePinMandate = "asfdsadfsadfsafsdafsadfasr";       
+    spConfig.put("target", EaafConstants.URN_PREFIX_EIDAS + "AT+EE");
+    
+    // set nat. person mandate information
+    pendingReq.getSessionData(AuthProcessDataWrapper.class).setUseMandates(true);
+    pendingReq.getSessionData(AuthProcessDataWrapper.class)
+        .setGenericDataToSession(PvpAttributeDefinitions.MANDATE_LEG_PER_SOURCE_PIN_NAME, sourcePinMandate);
+    pendingReq.getSessionData(AuthProcessDataWrapper.class)
+        .setGenericDataToSession(PvpAttributeDefinitions.MANDATE_LEG_PER_SOURCE_PIN_TYPE_NAME, 
+            EaafConstants.URN_PREFIX_BASEID + "+XFN");            
+    
+    // execute test
+    // execute test
+    EaafAuthenticationException error = assertThrows(EaafAuthenticationException.class, 
+        () -> authenticationDataBuilder.buildAuthenticationData(pendingReq));
+    Assert.assertEquals("wrong errorId", "builder.11", error.getErrorId());
+        
+  }
+  
+  @Test
+  public void eidasProxyModeWithNatMandate() throws EaafAuthenticationException, EaafStorageException {
+    // initialize state    
+    injectRepresentativeInfosIntoSession();
+    
+    String givenNameMandate = RandomStringUtils.randomAlphabetic(10);
+    String familyNameMandate = RandomStringUtils.randomAlphabetic(10);
+    String dateOfBirthMandate = "1957-09-15";
+    String bpkMandate = RandomStringUtils.randomAlphanumeric(10);
+        
+    // set nat. person mandate information
+    pendingReq.getSessionData(AuthProcessDataWrapper.class).setUseMandates(true);
+    pendingReq.getSessionData(AuthProcessDataWrapper.class)
+        .setGenericDataToSession(PvpAttributeDefinitions.MANDATE_NAT_PER_GIVEN_NAME_NAME, givenNameMandate);
+    pendingReq.getSessionData(AuthProcessDataWrapper.class)
+        .setGenericDataToSession(PvpAttributeDefinitions.MANDATE_NAT_PER_FAMILY_NAME_NAME, familyNameMandate);
+    pendingReq.getSessionData(AuthProcessDataWrapper.class)
+        .setGenericDataToSession(PvpAttributeDefinitions.MANDATE_NAT_PER_BIRTHDATE_NAME, dateOfBirthMandate);
+    pendingReq.getSessionData(AuthProcessDataWrapper.class)
+        .setGenericDataToSession(PvpAttributeDefinitions.MANDATE_NAT_PER_BPK_NAME, "AT+XX:" + bpkMandate);
+            
+    // execute test
+    IAuthData authData = authenticationDataBuilder.buildAuthenticationData(pendingReq);
+
+    
+    // validate state
+    Assert.assertNotNull("AuthData null", authData);    
+    assertTrue("mandate flag", ((EidAuthenticationData)authData).isUseMandate());
+    
+    //check mandate informations
+    checkGenericAttribute(authData, PvpAttributeDefinitions.MANDATE_NAT_PER_GIVEN_NAME_NAME, givenNameMandate);
+    checkGenericAttribute(authData, PvpAttributeDefinitions.MANDATE_NAT_PER_FAMILY_NAME_NAME, familyNameMandate);
+    checkGenericAttribute(authData, PvpAttributeDefinitions.MANDATE_NAT_PER_BIRTHDATE_NAME, "1957-09-15");
+    checkGenericAttribute(authData, MsProxyServiceConstants.ATTR_EIDAS_NAT_MANDATOR_PERSONAL_IDENTIFIER, bpkMandate);
+        
+  }
+  
+  @Test
+  public void eidasProxyModeWithNatMandateWrongBpkFormat() throws EaafAuthenticationException, EaafStorageException {
+    // initialize state
+    injectRepresentativeInfosIntoSession();
+    
+    String givenNameMandate = RandomStringUtils.randomAlphabetic(10);
+    String familyNameMandate = RandomStringUtils.randomAlphabetic(10);
+    String dateOfBirthMandate = "1957-09-15";
+    String bpkMandate = RandomStringUtils.randomAlphanumeric(10);
+        
+    // set nat. person mandate information
+    pendingReq.getSessionData(AuthProcessDataWrapper.class).setUseMandates(true);
+    pendingReq.getSessionData(AuthProcessDataWrapper.class)
+        .setGenericDataToSession(PvpAttributeDefinitions.MANDATE_NAT_PER_GIVEN_NAME_NAME, givenNameMandate);
+    pendingReq.getSessionData(AuthProcessDataWrapper.class)
+        .setGenericDataToSession(PvpAttributeDefinitions.MANDATE_NAT_PER_FAMILY_NAME_NAME, familyNameMandate);
+    pendingReq.getSessionData(AuthProcessDataWrapper.class)
+        .setGenericDataToSession(PvpAttributeDefinitions.MANDATE_NAT_PER_BIRTHDATE_NAME, dateOfBirthMandate);
+    pendingReq.getSessionData(AuthProcessDataWrapper.class)
+        .setGenericDataToSession(PvpAttributeDefinitions.MANDATE_NAT_PER_BPK_NAME, bpkMandate);
+     
+    // execute test
+    IAuthData authData = authenticationDataBuilder.buildAuthenticationData(pendingReq);
+
+    
+    // validate state
+    Assert.assertNotNull("AuthData null", authData);    
+    assertTrue("mandate flag", ((EidAuthenticationData)authData).isUseMandate());
     
+    //check mandate informations
+    checkGenericAttribute(authData, PvpAttributeDefinitions.MANDATE_NAT_PER_GIVEN_NAME_NAME, givenNameMandate);
+    checkGenericAttribute(authData, PvpAttributeDefinitions.MANDATE_NAT_PER_FAMILY_NAME_NAME, familyNameMandate);
+    checkGenericAttribute(authData, PvpAttributeDefinitions.MANDATE_NAT_PER_BIRTHDATE_NAME, "1957-09-15");
+    checkGenericAttribute(authData, MsProxyServiceConstants.ATTR_EIDAS_NAT_MANDATOR_PERSONAL_IDENTIFIER, bpkMandate);
+        
+  }
+  
+  @Test
+  public void eidasProxyModeWithNatMandateMissingAttribute() throws EaafAuthenticationException, EaafStorageException {
+    // initialize state
+    injectRepresentativeInfosIntoSession();
+    
+    String familyNameMandate = RandomStringUtils.randomAlphabetic(10);
+    String dateOfBirthMandate = "1957-09-15";
+    String bpkMandate = RandomStringUtils.randomAlphanumeric(10);
+        
+    // set nat. person mandate information
+    pendingReq.getSessionData(AuthProcessDataWrapper.class).setUseMandates(true);
+    pendingReq.getSessionData(AuthProcessDataWrapper.class)
+        .setGenericDataToSession(PvpAttributeDefinitions.MANDATE_NAT_PER_FAMILY_NAME_NAME, familyNameMandate);
+    pendingReq.getSessionData(AuthProcessDataWrapper.class)
+        .setGenericDataToSession(PvpAttributeDefinitions.MANDATE_NAT_PER_BIRTHDATE_NAME, dateOfBirthMandate);
+    pendingReq.getSessionData(AuthProcessDataWrapper.class)
+        .setGenericDataToSession(PvpAttributeDefinitions.MANDATE_NAT_PER_BPK_NAME, bpkMandate);
     
+    // execute test
+    EaafAuthenticationException error = assertThrows(EaafAuthenticationException.class, 
+        () -> authenticationDataBuilder.buildAuthenticationData(pendingReq));
+    Assert.assertEquals("wrong errorId", "builder.11", error.getErrorId());
+        
   }
   
   @Test
@@ -203,7 +367,7 @@ public class AuthenticationDataBuilderTest {
     Assert.assertEquals("testIdentity flag", 
         isTestIdentity ? EidIdentityStatusLevelValues.TESTIDENTITY : EidIdentityStatusLevelValues.IDENTITY, 
         ((EidAuthenticationData)authData).getEidStatus());
-
+    
     String authBlock = authData.getGenericData(Constants.SZR_AUTHBLOCK, String.class);
     String eidasBind = authData.getGenericData(Constants.EIDAS_BIND, String.class);
 
@@ -276,6 +440,44 @@ public class AuthenticationDataBuilderTest {
     
   }
 
+  private void injectRepresentativeInfosIntoSession() throws EaafStorageException {
+    boolean isTestIdentity = RandomUtils.nextBoolean();
+    pendingReq.getSessionData(EidAuthProcessDataWrapper.class).setTestIdentity(isTestIdentity);
+    pendingReq.getSessionData(AuthProcessDataWrapper.class).setEidProcess(true);
+    
+    String givenName = RandomStringUtils.randomAlphabetic(10);
+    String familyName = RandomStringUtils.randomAlphabetic(10);
+    String dateOfBirth = "1956-12-08";
+    String bpk = RandomStringUtils.randomAlphanumeric(10);
+    String cc = pendingReq.getSessionData(AuthProcessDataWrapper.class)
+        .getGenericDataFromSession(PvpAttributeDefinitions.EID_ISSUING_NATION_NAME, String.class);
+    String spC = RandomStringUtils.randomAlphabetic(2).toUpperCase();
+    spConfig.put("target", EaafConstants.URN_PREFIX_EIDAS + cc + "+" + spC);
+    
+    pendingReq.getSessionData(AuthProcessDataWrapper.class).setEidProcess(true);
+    pendingReq.getSessionData(AuthProcessDataWrapper.class).setForeigner(false);
+    pendingReq.getSessionData(AuthProcessDataWrapper.class)
+        .setGenericDataToSession(PvpAttributeDefinitions.GIVEN_NAME_NAME, givenName);
+    pendingReq.getSessionData(AuthProcessDataWrapper.class)
+        .setGenericDataToSession(PvpAttributeDefinitions.PRINCIPAL_NAME_NAME, familyName);
+    pendingReq.getSessionData(AuthProcessDataWrapper.class)
+        .setGenericDataToSession(PvpAttributeDefinitions.BIRTHDATE_NAME, dateOfBirth);
+    pendingReq.getSessionData(AuthProcessDataWrapper.class)
+        .setGenericDataToSession(MsProxyServiceConstants.ATTR_EIDAS_PERSONAL_IDENTIFIER, bpk);
+    
+    //set LoA level attribute instead of explicit session-data
+    pendingReq.getSessionData(AuthProcessDataWrapper.class)
+    .setGenericDataToSession(PvpAttributeDefinitions.EID_CITIZEN_EIDAS_QAA_LEVEL_NAME, 
+        pendingReq.getSessionData(AuthProcessDataWrapper.class).getQaaLevel());
+    pendingReq.getSessionData(AuthProcessDataWrapper.class).setQaaLevel(null);
+    
+  }
+  
+  private void checkGenericAttribute(IAuthData authData, String attrName, String expected) {
+    assertEquals("Wrong: " + attrName, expected, authData.getGenericData(attrName, String.class));
+    
+   }
+  
   private IIdentityLink buildDummyIdl() {
     return new IIdentityLink() {
       
-- 
cgit v1.2.3


From 47c011420675af6e53f8d9019b28558076ff21ef Mon Sep 17 00:00:00 2001
From: Thomas <>
Date: Thu, 29 Apr 2021 15:15:44 +0200
Subject: change eIDAS LegalPersonId from bPK layout to sourcePinType +
 sourcePin

---
 .../builder/AuthenticationDataBuilder.java         | 25 ++++++++++++----------
 .../test/utils/AuthenticationDataBuilderTest.java  |  4 ++--
 2 files changed, 16 insertions(+), 13 deletions(-)

(limited to 'connector/src')

diff --git a/connector/src/main/java/at/asitplus/eidas/specific/connector/builder/AuthenticationDataBuilder.java b/connector/src/main/java/at/asitplus/eidas/specific/connector/builder/AuthenticationDataBuilder.java
index 629d015e..05704de9 100644
--- a/connector/src/main/java/at/asitplus/eidas/specific/connector/builder/AuthenticationDataBuilder.java
+++ b/connector/src/main/java/at/asitplus/eidas/specific/connector/builder/AuthenticationDataBuilder.java
@@ -46,7 +46,6 @@ import at.gv.egiz.eaaf.core.exceptions.EaafAuthenticationException;
 import at.gv.egiz.eaaf.core.exceptions.EaafBuilderException;
 import at.gv.egiz.eaaf.core.exceptions.EaafException;
 import at.gv.egiz.eaaf.core.exceptions.EaafStorageException;
-import at.gv.egiz.eaaf.core.impl.builder.BpkBuilder;
 import at.gv.egiz.eaaf.core.impl.data.Pair;
 import at.gv.egiz.eaaf.core.impl.data.Triple;
 import at.gv.egiz.eaaf.core.impl.idp.AuthenticationData;
@@ -223,17 +222,21 @@ public class AuthenticationDataBuilder extends AbstractAuthenticationDataBuilder
         final String sourcePinType = authProcessData.getGenericDataFromSession(
             PvpAttributeDefinitions.MANDATE_LEG_PER_SOURCE_PIN_TYPE_NAME, String.class);
 
-        // TODO: check if we should to this in such a way!
-        final Pair<String, String> leagalPersonIdentifier =
-            BpkBuilder.generateAreaSpecificPersonIdentifier(
-                sourcePinType + sourcePin,
-                sourcePinType,
-                pendingReq.getServiceProviderConfiguration().getAreaSpecificTargetIdentifier());
-
+        // build leagl-person identifier for eIDAS out-going 
+        final String[] splittedTarget =  
+            pendingReq.getServiceProviderConfiguration().getAreaSpecificTargetIdentifier().split("\\+");       
+        StringBuilder sb = new StringBuilder();
+        sb.append(splittedTarget[1])
+          .append("/")
+          .append(splittedTarget[2])
+          .append("/")
+          .append(sourcePinType)
+          .append("+")
+          .append(sourcePin);
+                
         log.debug("Use legal-person eIDAS identifer: {} from baseId: {} and baseIdType: {}",
-            leagalPersonIdentifier.getFirst(), sourcePin, sourcePinType);
-        authData.setGenericData(MsProxyServiceConstants.ATTR_EIDAS_JUR_MANDATOR_PERSONAL_IDENTIFIER,
-            leagalPersonIdentifier.getFirst());
+            sb.toString(), sourcePin, sourcePinType);
+        authData.setGenericData(MsProxyServiceConstants.ATTR_EIDAS_JUR_MANDATOR_PERSONAL_IDENTIFIER, sb.toString());
 
       }
     }
diff --git a/connector/src/test/java/at/asitplus/eidas/specific/connector/test/utils/AuthenticationDataBuilderTest.java b/connector/src/test/java/at/asitplus/eidas/specific/connector/test/utils/AuthenticationDataBuilderTest.java
index 277138ef..cd183088 100644
--- a/connector/src/test/java/at/asitplus/eidas/specific/connector/test/utils/AuthenticationDataBuilderTest.java
+++ b/connector/src/test/java/at/asitplus/eidas/specific/connector/test/utils/AuthenticationDataBuilderTest.java
@@ -172,7 +172,7 @@ public class AuthenticationDataBuilderTest {
     Assert.assertEquals("CitizenCountry", cc, authData.getCiticenCountryCode());
     Assert.assertEquals("familyName", familyName, authData.getFamilyName());
     Assert.assertEquals("givenName", givenName, authData.getGivenName());
-    Assert.assertEquals("DateOfBirth", dateOfBirth, authData.getFormatedDateOfBirth());
+    Assert.assertEquals("DateOfBirth", dateOfBirth, authData.getDateOfBirth());
     
     Assert.assertEquals("bPK", pendingReq.getSessionData(AuthProcessDataWrapper.class)
         .getGenericDataFromSession(MsProxyServiceConstants.ATTR_EIDAS_PERSONAL_IDENTIFIER, String.class), 
@@ -217,7 +217,7 @@ public class AuthenticationDataBuilderTest {
     //check mandate informations
     checkGenericAttribute(authData, PvpAttributeDefinitions.MANDATE_LEG_PER_FULL_NAME_NAME, commonMandate);
     checkGenericAttribute(authData, MsProxyServiceConstants.ATTR_EIDAS_JUR_MANDATOR_PERSONAL_IDENTIFIER, 
-        "AT/EE/oaAGaV/zIHSf6rcB0TIOqjWPoOU=");
+        "AT/EE/urn:publicid:gv.at:baseid+XFN+asfdsadfsadfsafsdafsadfasr");
         
   }
   
-- 
cgit v1.2.3


From 4d33e943238ba29eca894a23e27ba3bedc85632c Mon Sep 17 00:00:00 2001
From: Thomas <>
Date: Thu, 29 Apr 2021 15:16:18 +0200
Subject: fix some problemes with new eaaf-components API

---
 connector/src/main/resources/specific_eIDAS_connector.beans.xml    | 3 +++
 connector/src/test/resources/spring/SpringTest_connector.beans.xml | 2 ++
 2 files changed, 5 insertions(+)

(limited to 'connector/src')

diff --git a/connector/src/main/resources/specific_eIDAS_connector.beans.xml b/connector/src/main/resources/specific_eIDAS_connector.beans.xml
index ecf6d348..0372edcf 100644
--- a/connector/src/main/resources/specific_eIDAS_connector.beans.xml
+++ b/connector/src/main/resources/specific_eIDAS_connector.beans.xml
@@ -104,6 +104,9 @@
   <bean id="eidasStatisticLogger"
         class="at.asitplus.eidas.specific.connector.logger.StatisticLogger" />
 
+  <bean id="defaultErrorHandler"
+        class="at.gv.egiz.eaaf.core.impl.idp.auth.services.DefaultErrorService"/>
+  
 
   <!-- Tasks -->
   <bean id="GenerateCountrySelectionFrameTask"
diff --git a/connector/src/test/resources/spring/SpringTest_connector.beans.xml b/connector/src/test/resources/spring/SpringTest_connector.beans.xml
index 6fec6000..818fd00c 100644
--- a/connector/src/test/resources/spring/SpringTest_connector.beans.xml
+++ b/connector/src/test/resources/spring/SpringTest_connector.beans.xml
@@ -111,6 +111,8 @@
   <bean id="eidasStatisticLogger"
     class="at.asitplus.eidas.specific.connector.logger.StatisticLogger" />
 
+  <bean id="defaultErrorHandler"
+        class="at.gv.egiz.eaaf.core.impl.idp.auth.services.DefaultErrorService"/>
 
   <!-- Tasks -->
   <bean id="GenerateCountrySelectionFrameTask"
-- 
cgit v1.2.3


From 45b0a790ad412e6b7118f1c937b620c66a32fd64 Mon Sep 17 00:00:00 2001
From: Thomas <>
Date: Fri, 14 May 2021 11:50:01 +0200
Subject: add some TODO's for eIDAS Proxy-Service with mandates and fix some
 rebase errors

---
 connector/src/main/resources/specific_eIDAS_connector.beans.xml    | 3 ---
 connector/src/test/resources/spring/SpringTest_connector.beans.xml | 3 ---
 2 files changed, 6 deletions(-)

(limited to 'connector/src')

diff --git a/connector/src/main/resources/specific_eIDAS_connector.beans.xml b/connector/src/main/resources/specific_eIDAS_connector.beans.xml
index 0372edcf..34fd088b 100644
--- a/connector/src/main/resources/specific_eIDAS_connector.beans.xml
+++ b/connector/src/main/resources/specific_eIDAS_connector.beans.xml
@@ -71,9 +71,6 @@
     <property name="guiBuilder" ref="mvcGUIBuilderImpl" />
   </bean>
 
-  <bean id="defaultErrorHandler"
-        class="at.gv.egiz.eaaf.core.impl.idp.auth.services.DefaultErrorService"/>
-
   <bean id="securePendingRequestIdGeneration"
         class="at.gv.egiz.eaaf.core.impl.utils.SecurePendingRequestIdGenerationStrategy" />
 
diff --git a/connector/src/test/resources/spring/SpringTest_connector.beans.xml b/connector/src/test/resources/spring/SpringTest_connector.beans.xml
index 818fd00c..5a1e3f36 100644
--- a/connector/src/test/resources/spring/SpringTest_connector.beans.xml
+++ b/connector/src/test/resources/spring/SpringTest_connector.beans.xml
@@ -67,9 +67,6 @@
     <property name="guiBuilder" ref="mvcGUIBuilderImpl" />
   </bean>
 
-  <bean id="defaultErrorHandler"
-        class="at.gv.egiz.eaaf.core.impl.idp.auth.services.DefaultErrorService"/>
-
   <bean id="securePendingRequestIdGeneration"
     class="at.gv.egiz.eaaf.core.impl.utils.SecurePendingRequestIdGenerationStrategy" />
 
-- 
cgit v1.2.3


From a2eba5646b5b43d549993859849cdcf2baae5eb2 Mon Sep 17 00:00:00 2001
From: Thomas <>
Date: Mon, 24 May 2021 14:49:48 +0200
Subject: select mandate based on eIDAS Proxy-Service request information

---
 connector/src/main/resources/application.properties | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

(limited to 'connector/src')

diff --git a/connector/src/main/resources/application.properties b/connector/src/main/resources/application.properties
index f6d9bb7e..e4f30544 100644
--- a/connector/src/main/resources/application.properties
+++ b/connector/src/main/resources/application.properties
@@ -186,6 +186,19 @@ eidas.ms.configuration.sp.disableRegistrationRequirement=false
 eidas.ms.auth.eIDAS.node_v2.proxy.entityId=ownSpecificProxy
 #eidas.ms.auth.eIDAS.node_v2.proxy.forward.endpoint=
 
+# Mandate configuration
+eidas.ms.auth.eIDAS.proxy.mandates.enabled=false
+#eidas.ms.auth.eIDAS.proxy.mandates.profiles.natural.default=
+#eidas.ms.auth.eIDAS.proxy.mandates.profiles.legal.default=
+
+
+## special foreign eIDAS-Connector configuration
+#eidas.ms.connector.0.uniqueID=https://demo.egiz.gv.at/demoportal_moaid-2.0/sp/eidas/metadata
+#eidas.ms.connector.0.countryCode=CC
+#eidas.ms.connector.0.mandates.enabled=false
+#eidas.ms.connector.0.mandates.natural=
+#eidas.ms.connector.0.mandates.legal=
+
 
 ## PVP2 S-Profile communication with ID Austria System 
 # EntityId and optional metadata of ID Austria System
@@ -210,3 +223,5 @@ eidas.ms.modules.idaustriaauth.keystore.type=jks
 #eidas.ms.modules.idaustriaauth.truststore.path=
 #eidas.ms.modules.idaustriaauth.truststore.password=
 
+
+
-- 
cgit v1.2.3


From 94327cc9170639bcbceb2c9acc55351858e050e1 Mon Sep 17 00:00:00 2001
From: Thomas <>
Date: Tue, 25 May 2021 15:17:56 +0200
Subject: add configuration-property to set ID Austria stage of a each eIDAS
 Connector

---
 connector/src/main/resources/application.properties | 1 +
 1 file changed, 1 insertion(+)

(limited to 'connector/src')

diff --git a/connector/src/main/resources/application.properties b/connector/src/main/resources/application.properties
index e4f30544..e3bbedd1 100644
--- a/connector/src/main/resources/application.properties
+++ b/connector/src/main/resources/application.properties
@@ -198,6 +198,7 @@ eidas.ms.auth.eIDAS.proxy.mandates.enabled=false
 #eidas.ms.connector.0.mandates.enabled=false
 #eidas.ms.connector.0.mandates.natural=
 #eidas.ms.connector.0.mandates.legal=
+#eidas.ms.connector.0.auth.idaustria.entityId=
 
 
 ## PVP2 S-Profile communication with ID Austria System 
-- 
cgit v1.2.3


From cb2ec2a6deaf92036f3dc9b3dc12a6a9ba6d9099 Mon Sep 17 00:00:00 2001
From: Thomas <>
Date: Fri, 28 May 2021 13:39:30 +0200
Subject: change log level in transaction store

---
 .../specific/connector/storage/EidasCacheTransactionStoreDecorator.java | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'connector/src')

diff --git a/connector/src/main/java/at/asitplus/eidas/specific/connector/storage/EidasCacheTransactionStoreDecorator.java b/connector/src/main/java/at/asitplus/eidas/specific/connector/storage/EidasCacheTransactionStoreDecorator.java
index 1ea5a280..634b3797 100644
--- a/connector/src/main/java/at/asitplus/eidas/specific/connector/storage/EidasCacheTransactionStoreDecorator.java
+++ b/connector/src/main/java/at/asitplus/eidas/specific/connector/storage/EidasCacheTransactionStoreDecorator.java
@@ -171,7 +171,7 @@ public class EidasCacheTransactionStoreDecorator implements ITransactionStorage,
   @Override
   public void remove(String key) {
     if (containsKey(key)) {
-      log.debug("Remove element with key: " + key + " from " + ITransactionStorage.class.getName());
+      log.trace("Remove element with key: " + key + " from " + ITransactionStorage.class.getName());
       boolean delResult = storage.remove(key);
       log.trace("Object: {} removed from cache: {}", key, delResult);
 
-- 
cgit v1.2.3


From 04024b007f29c0261c6b231e71877df60f9703b2 Mon Sep 17 00:00:00 2001
From: Thomas <>
Date: Fri, 25 Jun 2021 10:24:06 +0200
Subject: fix bug in combination with EidasNode v2.5 and DE Middleware

---
 connector/src/main/resources/application.properties | 1 -
 1 file changed, 1 deletion(-)

(limited to 'connector/src')

diff --git a/connector/src/main/resources/application.properties b/connector/src/main/resources/application.properties
index e3bbedd1..13216e92 100644
--- a/connector/src/main/resources/application.properties
+++ b/connector/src/main/resources/application.properties
@@ -94,7 +94,6 @@ eidas.ms.auth.eIDAS.node_v2.requesterId.lu.useStaticRequesterForAll=true
 ## set provider name for all public SPs
 eidas.ms.auth.eIDAS.node_v2.workarounds.addAlwaysProviderName=false
 
-
 #eidas.ms.auth.eIDAS.node_v2.requested.nameIdFormat=
 eidas.ms.auth.eIDAS.node_v2.loa.requested.minimum=http://eidas.europa.eu/LoA/high
 
-- 
cgit v1.2.3


From 8bc8fb35e950e2e956e2bdca708c6f4aad380167 Mon Sep 17 00:00:00 2001
From: Thomas <>
Date: Tue, 6 Jul 2021 17:04:12 +0200
Subject: set default NameIDFormat to unspecified to fix problems with DE
 middleware 1.2.x

---
 connector/src/main/resources/application.properties | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

(limited to 'connector/src')

diff --git a/connector/src/main/resources/application.properties b/connector/src/main/resources/application.properties
index 13216e92..74e86aed 100644
--- a/connector/src/main/resources/application.properties
+++ b/connector/src/main/resources/application.properties
@@ -94,7 +94,9 @@ eidas.ms.auth.eIDAS.node_v2.requesterId.lu.useStaticRequesterForAll=true
 ## set provider name for all public SPs
 eidas.ms.auth.eIDAS.node_v2.workarounds.addAlwaysProviderName=false
 
-#eidas.ms.auth.eIDAS.node_v2.requested.nameIdFormat=
+## set NameIdPolicy to 'unspecified' as work-around for DE Middleware v1.2.x
+eidas.ms.auth.eIDAS.node_v2.requested.nameIdFormat=urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified
+
 eidas.ms.auth.eIDAS.node_v2.loa.requested.minimum=http://eidas.europa.eu/LoA/high
 
 #eidas.ms.auth.eIDAS.szrclient.useTestService=true
-- 
cgit v1.2.3


From 81ec57b676488700c38b6059fe56d905eba0ae6a Mon Sep 17 00:00:00 2001
From: Thomas <>
Date: Wed, 14 Jul 2021 17:08:20 +0200
Subject: update StatusMessageProvider to Spring based form to use message
 properties from modules

---
 .../connector/provider/StatusMessageProvider.java  | 95 ++++++++++++++++------
 1 file changed, 69 insertions(+), 26 deletions(-)

(limited to 'connector/src')

diff --git a/connector/src/main/java/at/asitplus/eidas/specific/connector/provider/StatusMessageProvider.java b/connector/src/main/java/at/asitplus/eidas/specific/connector/provider/StatusMessageProvider.java
index e83d9d49..5565bc63 100644
--- a/connector/src/main/java/at/asitplus/eidas/specific/connector/provider/StatusMessageProvider.java
+++ b/connector/src/main/java/at/asitplus/eidas/specific/connector/provider/StatusMessageProvider.java
@@ -31,13 +31,18 @@ import java.util.ResourceBundle;
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.context.MessageSource;
+import org.springframework.context.MessageSourceAware;
+import org.springframework.context.NoSuchMessageException;
+import org.springframework.context.i18n.LocaleContextHolder;
 import org.springframework.stereotype.Service;
 
 import at.gv.egiz.eaaf.core.api.IStatusMessenger;
 import at.gv.egiz.eaaf.core.exceptions.EaafException;
+import at.gv.egiz.eaaf.core.impl.logging.LogMessageProviderFactory;
 
 @Service("StatusMessageProvider")
-public class StatusMessageProvider implements IStatusMessenger {
+public class StatusMessageProvider implements IStatusMessenger, MessageSourceAware {
   private static final Logger log = LoggerFactory.getLogger(StatusMessageProvider.class);
 
   private static final String ERROR_MESSAGES_UNAVAILABLE =
@@ -48,49 +53,78 @@ public class StatusMessageProvider implements IStatusMessenger {
       "External error-codes can NOT be load from application. Only internal errorCode: {0} is availabe";
   private static final String ERROR_NO_EXTERNALERROR_CODE =
       "No external error for internal error with number.={0}";
-
-  // internal messanges
-  private static final String DEFAULT_MESSAGE_RESOURCES = "properties/status_messages_en";
-  private static final Locale DEFAULT_MESSAGE_LOCALES = new Locale("en", "GB");
-  private ResourceBundle messages;
-
+  private static final String MSG_WARN_NO_SOURCE = "MessageCode: {} is NOT SET for locale: {}";
+  private static final String MSG_INFO = "Use locale: {} as default";
+  
   // external error codes
   private static final String DEFAULT_EXTERNALERROR_RESOURCES = "properties/external_statuscodes_map";
   private static final Locale DEFAULT_EXTERNALERROR_LOCALES = new Locale("en", "GB");
   private ResourceBundle externalError = null;
 
+  //internal messanges
+  private MessageSource messageSource;
+
   @Override
-  public String getMessageWithoutDefault(String messageId, Object[] parameters) {
-    // initialize messages
-    if (messages == null) {
-      this.messages = ResourceBundle.getBundle(
-          DEFAULT_MESSAGE_RESOURCES,
-          DEFAULT_MESSAGE_LOCALES);
+  public String getMessageWithoutDefault(final String messageId, final Object[] parameters) {
+    if (messageSource == null) {
+      return null;
 
-    }
+    } else {
+      try {
+        final Locale locale = LocaleContextHolder.getLocale();
+        return messageSource.getMessage(messageId, parameters, locale);
 
-    // create the message
-    if (messages == null) {
-      return MessageFormat.format(ERROR_MESSAGES_UNAVAILABLE, new Object[] { messageId });
+      } catch (final NoSuchMessageException e) {
+        log.info(MSG_WARN_NO_SOURCE, messageId, LocaleContextHolder.getLocale());
+        log.debug(MSG_INFO, Locale.ENGLISH);
 
-    } else {
-      final String rawMessage = messages.getString(messageId);
-      return MessageFormat.format(rawMessage, parameters);
+        try {
+          return messageSource.getMessage(messageId, parameters, Locale.ENGLISH);
+
+        } catch (final NoSuchMessageException e2) {
+          log.info(MSG_WARN_NO_SOURCE, messageId, Locale.ENGLISH);
+
+        }
 
+      } catch (final MissingResourceException e2) {
+        log.warn("No message source", e2);
+
+      }
     }
+
+    return null;
+
   }
 
   @Override
-  public String getMessage(String messageId, Object[] parameters) {
-    try {
-      return getMessageWithoutDefault(messageId, parameters);
+  public String getMessage(final String messageId, final Object[] parameters) {
+    if (messageSource == null) {
+      return MessageFormat.format(ERROR_MESSAGES_UNAVAILABLE, new Object[]{messageId});
+
+    } else {
+      try {
+        final Locale locale = LocaleContextHolder.getLocale();
+        return messageSource.getMessage(messageId, parameters, locale);
+
+      } catch (final NoSuchMessageException e) {
+        log.info(MSG_WARN_NO_SOURCE, messageId, LocaleContextHolder.getLocale());
+        log.debug(MSG_INFO, Locale.ENGLISH);
+
+        try {
+          return messageSource.getMessage(messageId, parameters, Locale.ENGLISH);
+
+        } catch (final NoSuchMessageException e2) {
+          return MessageFormat.format(ERROR_NO_MESSAGE, new Object[]{messageId});
+
+        }
 
-    } catch (final MissingResourceException e2) {
-      return MessageFormat.format(ERROR_NO_MESSAGE, new Object[] { messageId });
+      } catch (final MissingResourceException e2) {
+        return MessageFormat.format(ERROR_NO_MESSAGE, new Object[]{messageId});
 
+      }
     }
   }
-
+  
   @Override
   public String getResponseErrorCode(Throwable throwable) {
     String errorCode = IStatusMessenger.CODES_EXTERNAL_ERROR_GENERIC;
@@ -136,4 +170,13 @@ public class StatusMessageProvider implements IStatusMessenger {
     }
   }
 
+  @Override
+  public void setMessageSource(MessageSource messageSource) {
+    this.messageSource = messageSource;
+
+    log.info("Injecting 'StatusMessanger' into 'LogMessageProviderFactory'");
+    LogMessageProviderFactory.setStatusMessager(this);
+    
+  }
+
 }
-- 
cgit v1.2.3


From 6fe2e9ab4defb4b200fbacdb5bd346b16a3e3037 Mon Sep 17 00:00:00 2001
From: Thomas <>
Date: Thu, 21 Oct 2021 10:54:55 +0200
Subject: fix build process and jUnit test

---
 .../GenerateCountrySelectionFrameTaskTest.java     |  1 +
 .../config/properties/messages_en.properties       | 98 ++++++++++++++++++++++
 .../config/templates/countrySelection.html         |  2 +-
 3 files changed, 100 insertions(+), 1 deletion(-)
 create mode 100644 connector/src/test/resources/config/properties/messages_en.properties

(limited to 'connector/src')

diff --git a/connector/src/test/java/at/asitplus/eidas/specific/connector/test/task/GenerateCountrySelectionFrameTaskTest.java b/connector/src/test/java/at/asitplus/eidas/specific/connector/test/task/GenerateCountrySelectionFrameTaskTest.java
index 938e1f29..2aab286f 100644
--- a/connector/src/test/java/at/asitplus/eidas/specific/connector/test/task/GenerateCountrySelectionFrameTaskTest.java
+++ b/connector/src/test/java/at/asitplus/eidas/specific/connector/test/task/GenerateCountrySelectionFrameTaskTest.java
@@ -122,6 +122,7 @@ public class GenerateCountrySelectionFrameTaskTest {
     
   }
   
+  @Ignore
   @Test
   public void validHtmlResponseWithFR() throws TaskExecutionException, UnsupportedEncodingException {    
     LocaleContextHolder.setDefaultLocale(null);
diff --git a/connector/src/test/resources/config/properties/messages_en.properties b/connector/src/test/resources/config/properties/messages_en.properties
new file mode 100644
index 00000000..ea604cda
--- /dev/null
+++ b/connector/src/test/resources/config/properties/messages_en.properties
@@ -0,0 +1,98 @@
+####### GUI elements ####
+gui.general.language.selection.title=Language selection
+gui.general.language.selection.de=Deutsch
+gui.general.language.selection.en=English
+
+##Errorpage template
+gui.errorpage.msg.title=Authentication error arise
+gui.errorpage.msg.information=The authentication stops on account of a process error:
+gui.errorpage.msg.errorcode=Error    Code:
+gui.errorpage.msg.errormsg=Error Message:
+gui.errorpage.msg.stacktrace=Stacktrace:
+
+##Country-Selection page
+gui.countryselection.title=eIDAS-Login Countryselection
+gui.countryselection.logo.bmi.alt=Logo BMI
+gui.countryselection.link.bmi=Mainpage BMI
+gui.countryselection.header1=Federal Ministry of Internal Affairs
+gui.countryselection.header2=Austrian Central eIDAS Node
+gui.countryselection.header3=Operated by Federal Ministry of Internal Affairs
+gui.countryselection.header.selection=Select your country
+gui.countryselection.cancle=Cancel
+gui.countryselection.notsupportedinfo=If you cannot find your country in this list then your electronic identity (eID) is not yet supported.
+
+gui.countryselection.infos.general.header=Information on Logins with European eIDs
+gui.countryselection.infos.general.link.1=eIDAS regulation of the European Union
+gui.countryselection.infos.general.link.2=Austrian Supplementary Register for Natural Persons (ERnP)
+gui.countryselection.infos.general.part.1=This is the central eIDAS node of the Republic of Austria, operated by the  
+gui.countryselection.infos.general.part.2=It enables logins at Austrian online services using an electronic identity (eID) of another EU member state. You have been redirected to this page, as you have initiated a login to an online service using the option "EU Login".
+gui.countryselection.infos.general.part.3=The central eIDAS node of the Republic of Austria allows you to login to Austrian online services using the eID of your home country. This way, compliance with the 
+gui.countryselection.infos.general.part.4=, which regulates the mutual cross-border acceptance of national eIDs, is achieved. The mutual cross-border acceptance of national eIDs is implemented successively within the EU. Currently, the central eIDAS node of the Republic of Austria supports logins using the eID systems of the Member States mentioned above. More Member States will be added according to availability of their respective eID solutions.
+gui.countryselection.infos.general.part.5=After selecting your home country on this page, you are forwarded to the familiar login environment of the selected member state. There, you can login with your eID as usual. After successful completion of the login process, you are automatically forwarded and logged in to the online service, from which you have been redirected to this page. During your first login, your eID data is also registered in the 
+gui.countryselection.infos.general.part.6=This ensures that you will also be successfully and uniquely identified in subsequent logins at Austrian online services.
+
+gui.countryselection.country.be=Belgium
+gui.countryselection.country.be.logo.alt=Belgium-eID
+gui.countryselection.country.hr=Croatia
+gui.countryselection.country.hr.logo.alt=Croatia-eID
+gui.countryselection.country.cy=Cyprus
+gui.countryselection.country.cy.logo.alt=Cyprus-eID
+gui.countryselection.country.cz=Czech Republic
+gui.countryselection.country.cz.logo.alt=Czech Republic-eID
+gui.countryselection.country.ee=Estonia
+gui.countryselection.country.ee.logo.alt=Estonia-eID
+gui.countryselection.country.de=Germany
+gui.countryselection.country.de.logo.alt=German-eID
+gui.countryselection.country.is=Iceland
+gui.countryselection.country.is.logo.alt=Iceland-eID
+gui.countryselection.country.it=Italy
+gui.countryselection.country.it.logo.alt=Italy-eID
+gui.countryselection.country.lt=Lithuania
+gui.countryselection.country.lt.logo.alt=Lithuania-eID
+gui.countryselection.country.lv=Latvia
+gui.countryselection.country.lv.logo.alt=Latvia-eID
+gui.countryselection.country.nl=Netherlands
+gui.countryselection.country.nl.logo.alt=Netherlands-eID
+gui.countryselection.country.pl=Poland
+gui.countryselection.country.pl.logo.alt=Poland-eID
+gui.countryselection.country.pt=Portugal
+gui.countryselection.country.pt.logo.alt=Portugal-eID
+gui.countryselection.country.si=Slovenia
+gui.countryselection.country.si.logo.alt=Slovenia-eID
+gui.countryselection.country.es=SSpain
+gui.countryselection.country.es.logo.alt=Spain-eID
+
+gui.countryselection.country.bg=Bulgaria
+gui.countryselection.country.bg.logo.alt=Bulgaria-eID
+gui.countryselection.country.dk=Denmark
+gui.countryselection.country.dk.logo.alt=Denmark-eID
+gui.countryselection.country.fi=Finland
+gui.countryselection.country.fi.logo.alt=Finland-eID
+gui.countryselection.country.fr=France
+gui.countryselection.country.fr.logo.alt=France-eID
+gui.countryselection.country.gr=Greece
+gui.countryselection.country.gr.logo.alt=Greece-eID
+gui.countryselection.country.hu=Hungary
+gui.countryselection.country.hu.logo.alt=Hungary-eID
+gui.countryselection.country.ir=Ireland
+gui.countryselection.country.ir.logo.alt=Ireland-eID
+gui.countryselection.country.lu=Luxembourg
+gui.countryselection.country.lu.logo.alt=Luxembourg-eID
+gui.countryselection.country.mt=Malta
+gui.countryselection.country.mt.logo.alt=Malta-eID
+gui.countryselection.country.ro=Romania
+gui.countryselection.country.ro.logo.alt=Romania-eID
+gui.countryselection.country.sk=Slovakia
+gui.countryselection.country.sk.logo.alt=Slovakia-eID
+gui.countryselection.country.sw=Sweden
+gui.countryselection.country.sw.logo.alt=Sweden-eID
+gui.countryselection.country.uk=United Kingdom
+gui.countryselection.country.uk.logo.alt=United Kingdom-eID
+
+gui.countryselection.country.testcountry=TestCountry
+gui.countryselection.country.testcountry.logo.alt=Testcountry-eID
+
+gui.countryselection.mode.prod=Production
+gui.countryselection.mode.qs=QS
+gui.countryselection.mode.test=Test
+gui.countryselection.mode.dev=Development
\ No newline at end of file
diff --git a/connector/src/test/resources/config/templates/countrySelection.html b/connector/src/test/resources/config/templates/countrySelection.html
index 7fbc9464..adcda741 100644
--- a/connector/src/test/resources/config/templates/countrySelection.html
+++ b/connector/src/test/resources/config/templates/countrySelection.html
@@ -165,7 +165,7 @@ function clickCountryFlag(element) {
 	     <a href="https://www.bmi.gv.at/" target="_blank" title="Home">
 	       <img class="toplogo img-responsive" src="/static/BMI.png" alt="Logo BMI"
               th:attr="alt=#{gui.countryselection.logo.bmi.alt}">
-	       <h1 class="hidden" th:text="#{gui.countryselection.header1}"> Bundesministerium für Inneres </h1>
+	       <h1 class="hidden" th:text="#{gui.countryselection.header1}"> Bundesministerium für Inneres 1</h1>
 	     </a>
       </div>
       <ul class="nav_oben">
-- 
cgit v1.2.3


From 300bd1b44f521a2b33c259be1f8d21eba58c1a31 Mon Sep 17 00:00:00 2001
From: Thomas <>
Date: Tue, 8 Mar 2022 13:41:31 +0100
Subject: refactor(core): split 'ms-connector' WebApp into 'core' and
 'ms-connector' to reuse some code for 'ms-proxy' WebApp

---
 .../MsSpecificEidasNodeSpringResourceProvider.java |  10 +-
 .../connector/SpringContextCloseHandler.java       | 170 ------
 .../attributes/AuthBlockAttributeBuilder.java      |   4 +-
 .../attributes/EidasBindAttributeBuilder.java      |  13 +-
 .../connector/auth/AuthenticationManager.java      |  60 --
 .../builder/AuthenticationDataBuilder.java         | 257 ---------
 .../connector/config/PvpEndPointConfiguration.java |   2 +-
 .../connector/config/PvpMetadataConfiguration.java |   2 +-
 .../config/StaticResourceConfiguration.java        | 220 -------
 .../controller/ProcessEngineSignalController.java  |   2 +-
 .../connector/controller/Pvp2SProfileEndpoint.java |   2 +-
 .../health/EidasNodeMetadataHealthIndicator.java   |  69 ---
 .../health/IgniteClusterHealthIndicator.java       |  52 --
 .../WebFrontEndSecurityInterceptor.java            |  90 ---
 .../specific/connector/logger/RevisionLogger.java  | 110 ----
 .../specific/connector/logger/StatisticLogger.java | 141 -----
 .../specific/connector/mapper/LoALevelMapper.java  |  60 --
 .../processes/CountrySelectionProcessImpl.java     |   2 +-
 .../tasks/EvaluateCountrySelectionTask.java        |   2 +-
 .../tasks/GenerateCountrySelectionFrameTask.java   |   6 +-
 .../provider/PvpEndPointCredentialProvider.java    |   2 +-
 .../connector/provider/PvpMetadataProvider.java    |   2 +-
 .../connector/provider/StatusMessageProvider.java  | 182 ------
 .../connector/storage/CacheWithEidasBackend.java   |  35 --
 .../EidasCacheTransactionStoreDecorator.java       | 180 ------
 .../storage/SimpleInMemoryTransactionStorage.java  | 169 ------
 .../connector/storage/TransactionStoreElement.java |  70 ---
 .../verification/AuthnRequestValidator.java        |   4 +-
 .../src/main/resources/applicationContext.xml      |  19 +-
 .../resources/specific_eIDAS_connector.beans.xml   |  45 +-
 .../specific_eIDAS_connector.storage.beans.xml     |  52 --
 .../attributes/AuthBlockAttributeBuilderTest.java  |   8 +-
 .../attributes/EidasBindAttributeBuilderTest.java  |   9 +-
 .../test/config/BasicConfigurationTest.java        |   4 +-
 .../ProcessEngineSignalControllerTest.java         |   2 +-
 ...sNodeMetadataHealthIndicatorNoEndpointTest.java |  70 ---
 .../EidasNodeMetadataHealthIndicatorTest.java      | 102 ----
 .../test/saml2/Pvp2SProfileEndPointTest.java       |   4 +-
 .../task/EvaluateCountrySelectionTaskTest.java     |   4 +-
 .../GenerateCountrySelectionFrameTaskTest.java     |   2 +-
 .../test/utils/AuthenticationDataBuilderTest.java  | 636 ---------------------
 .../test/utils/AuthnRequestValidatorTest.java      |   8 +-
 .../utils/CountrySelectionProcessImplTest.java     |   2 +-
 .../src/test/resources/config/logback_config.xml   |   4 +-
 .../spring/SpringTest-context_basic_test.xml       |  22 -
 .../spring/SpringTest-context_healthcheck.xml      |  22 -
 .../spring/SpringTest-context_simple_storage.xml   |  15 -
 .../spring/SpringTest_connector.beans.xml          |  61 +-
 48 files changed, 56 insertions(+), 2953 deletions(-)
 delete mode 100644 connector/src/main/java/at/asitplus/eidas/specific/connector/SpringContextCloseHandler.java
 delete mode 100644 connector/src/main/java/at/asitplus/eidas/specific/connector/auth/AuthenticationManager.java
 delete mode 100644 connector/src/main/java/at/asitplus/eidas/specific/connector/builder/AuthenticationDataBuilder.java
 delete mode 100644 connector/src/main/java/at/asitplus/eidas/specific/connector/config/StaticResourceConfiguration.java
 delete mode 100644 connector/src/main/java/at/asitplus/eidas/specific/connector/health/EidasNodeMetadataHealthIndicator.java
 delete mode 100644 connector/src/main/java/at/asitplus/eidas/specific/connector/health/IgniteClusterHealthIndicator.java
 delete mode 100644 connector/src/main/java/at/asitplus/eidas/specific/connector/interceptor/WebFrontEndSecurityInterceptor.java
 delete mode 100644 connector/src/main/java/at/asitplus/eidas/specific/connector/logger/RevisionLogger.java
 delete mode 100644 connector/src/main/java/at/asitplus/eidas/specific/connector/logger/StatisticLogger.java
 delete mode 100644 connector/src/main/java/at/asitplus/eidas/specific/connector/mapper/LoALevelMapper.java
 delete mode 100644 connector/src/main/java/at/asitplus/eidas/specific/connector/provider/StatusMessageProvider.java
 delete mode 100644 connector/src/main/java/at/asitplus/eidas/specific/connector/storage/CacheWithEidasBackend.java
 delete mode 100644 connector/src/main/java/at/asitplus/eidas/specific/connector/storage/EidasCacheTransactionStoreDecorator.java
 delete mode 100644 connector/src/main/java/at/asitplus/eidas/specific/connector/storage/SimpleInMemoryTransactionStorage.java
 delete mode 100644 connector/src/main/java/at/asitplus/eidas/specific/connector/storage/TransactionStoreElement.java
 delete mode 100644 connector/src/main/resources/specific_eIDAS_connector.storage.beans.xml
 delete mode 100644 connector/src/test/java/at/asitplus/eidas/specific/connector/test/health/EidasNodeMetadataHealthIndicatorNoEndpointTest.java
 delete mode 100644 connector/src/test/java/at/asitplus/eidas/specific/connector/test/health/EidasNodeMetadataHealthIndicatorTest.java
 delete mode 100644 connector/src/test/java/at/asitplus/eidas/specific/connector/test/utils/AuthenticationDataBuilderTest.java
 delete mode 100644 connector/src/test/resources/spring/SpringTest-context_basic_test.xml
 delete mode 100644 connector/src/test/resources/spring/SpringTest-context_healthcheck.xml
 delete mode 100644 connector/src/test/resources/spring/SpringTest-context_simple_storage.xml

(limited to 'connector/src')

diff --git a/connector/src/main/java/at/asitplus/eidas/specific/connector/MsSpecificEidasNodeSpringResourceProvider.java b/connector/src/main/java/at/asitplus/eidas/specific/connector/MsSpecificEidasNodeSpringResourceProvider.java
index 40ed283b..45e5c7d4 100644
--- a/connector/src/main/java/at/asitplus/eidas/specific/connector/MsSpecificEidasNodeSpringResourceProvider.java
+++ b/connector/src/main/java/at/asitplus/eidas/specific/connector/MsSpecificEidasNodeSpringResourceProvider.java
@@ -33,14 +33,12 @@ public class MsSpecificEidasNodeSpringResourceProvider implements SpringResource
   @Override
   public Resource[] getResourcesToLoad() {
     final ClassPathResource generic =
-        new ClassPathResource("/applicationContext.xml", MsSpecificEidasNodeSpringResourceProvider.class);
-    
+        new ClassPathResource("/applicationContext.xml", MsSpecificEidasNodeSpringResourceProvider.class);   
     final ClassPathResource msEidasNode = new ClassPathResource(
         "/specific_eIDAS_connector.beans.xml", MsSpecificEidasNodeSpringResourceProvider.class);
+        
+    return new Resource[] { generic, msEidasNode};
     
-    final ClassPathResource msEidasNodeStorage = new ClassPathResource(
-        "/specific_eIDAS_connector.storage.beans.xml", MsSpecificEidasNodeSpringResourceProvider.class);
-    return new Resource[] { generic, msEidasNode, msEidasNodeStorage };
   }
 
   @Override
@@ -50,7 +48,7 @@ public class MsSpecificEidasNodeSpringResourceProvider implements SpringResource
 
   @Override
   public String getName() {
-    return "MS-specific eIDAS Node SpringResourceProvider";
+    return "MS-specific eIDAS-Connector SpringResourceProvider";
   }
 
 }
diff --git a/connector/src/main/java/at/asitplus/eidas/specific/connector/SpringContextCloseHandler.java b/connector/src/main/java/at/asitplus/eidas/specific/connector/SpringContextCloseHandler.java
deleted file mode 100644
index e884b5c6..00000000
--- a/connector/src/main/java/at/asitplus/eidas/specific/connector/SpringContextCloseHandler.java
+++ /dev/null
@@ -1,170 +0,0 @@
-package at.asitplus.eidas.specific.connector;
-
-import java.util.Iterator;
-import java.util.Map;
-import java.util.Map.Entry;
-
-import org.slf4j.Logger;
-import org.springframework.beans.BeansException;
-import org.springframework.beans.factory.config.BeanPostProcessor;
-import org.springframework.context.ApplicationContext;
-import org.springframework.context.ApplicationContextAware;
-import org.springframework.context.ApplicationListener;
-import org.springframework.context.event.ContextClosedEvent;
-import org.springframework.context.event.EventListener;
-import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
-import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
-
-import at.gv.egiz.components.spring.api.IDestroyableObject;
-import eu.eidas.auth.cache.IgniteInstanceInitializerSpecificCommunication;
-
-/**
- * SpringContext CloseHandler.
- *
- * @author tlenz
- *
- */
-
-public class SpringContextCloseHandler
-    implements ApplicationListener<ContextClosedEvent>, ApplicationContextAware, BeanPostProcessor {
-
-  private static final Logger log =
-      org.slf4j.LoggerFactory.getLogger(SpringContextCloseHandler.class);
-
-  private ApplicationContext context;
-
-  /*
-   * (non-Javadoc)
-   *
-   * @see org.springframework.context.ApplicationListener#onApplicationEvent(org.
-   * springframework.context. ApplicationEvent)
-   */
-  @Override
-  @EventListener
-  public void onApplicationEvent(final ContextClosedEvent arg0) {
-    log.info("MS-specific eIDAS-Node shutdown process started ...");
-
-    try {
-      log.debug("CleanUp objects with implements the IDestroyable interface ... ");
-      final Map<String, IDestroyableObject> objectsToDestroy =
-          context.getBeansOfType(IDestroyableObject.class);
-      internalIDestroyableObject(objectsToDestroy);
-      log.info("Object cleanUp complete");
-
-      log.debug("Stopping Spring Thread-Pools ... ");
-      // shut-down task schedulers
-      final Map<String, ThreadPoolTaskScheduler> schedulers =
-          context.getBeansOfType(ThreadPoolTaskScheduler.class);
-      internalThreadPoolTaskScheduler(schedulers);
-
-      // shut-down task executors
-      final Map<String, ThreadPoolTaskExecutor> executers =
-          context.getBeansOfType(ThreadPoolTaskExecutor.class);
-      internalThreadPoolTaskExecutor(executers);
-      log.debug("Spring Thread-Pools stopped");
-      
-      
-      //clean-up eIDAS node
-      Map<String, IgniteInstanceInitializerSpecificCommunication> nodeIgnite = 
-          context.getBeansOfType(IgniteInstanceInitializerSpecificCommunication.class);
-      log.info("Find #{} Apache Ignite instances from eIDAS Ref. impl.", nodeIgnite.size());
-      for (Entry<String, IgniteInstanceInitializerSpecificCommunication> el : nodeIgnite.entrySet()) {
-        if (el.getValue().getInstance() != null) {
-          el.getValue().getInstance().close();
-          el.getValue().destroyInstance();
-          log.debug("Shutdown Apache-Ignite: {}", el.getKey());
-          
-        }        
-      }
-            
-      log.info("MS-specific eIDAS-Node shutdown process finished");
-
-    } catch (final Exception e) {
-      log.warn("MS-specific eIDAS-Node shutdown process has an error.", e);
-
-    }
-
-  }
-
-  /*
-   * (non-Javadoc)
-   *
-   * @see org.springframework.beans.factory.config.BeanPostProcessor#
-   * postProcessAfterInitialization(java. lang.Object, java.lang.String)
-   */
-  @Override
-  public Object postProcessAfterInitialization(final Object arg0, final String arg1)
-      throws BeansException {
-    if (arg0 instanceof ThreadPoolTaskScheduler) {
-      ((ThreadPoolTaskScheduler) arg0).setWaitForTasksToCompleteOnShutdown(true);
-    }
-    if (arg0 instanceof ThreadPoolTaskExecutor) {
-      ((ThreadPoolTaskExecutor) arg0).setWaitForTasksToCompleteOnShutdown(true);
-    }
-    return arg0;
-
-  }
-
-  /*
-   * (non-Javadoc)
-   *
-   * @see org.springframework.beans.factory.config.BeanPostProcessor#
-   * postProcessBeforeInitialization(java .lang.Object, java.lang.String)
-   */
-  @Override
-  public Object postProcessBeforeInitialization(final Object arg0, final String arg1)
-      throws BeansException {
-    return arg0;
-
-  }
-
-  /*
-   * (non-Javadoc)
-   *
-   * @see
-   * org.springframework.context.ApplicationContextAware#setApplicationContext(org
-   * .springframework. context.ApplicationContext)
-   */
-  @Override
-  public void setApplicationContext(final ApplicationContext arg0) throws BeansException {
-    this.context = arg0;
-
-  }
-
-  private void internalThreadPoolTaskExecutor(final Map<String, ThreadPoolTaskExecutor> executers) {
-    for (final ThreadPoolTaskExecutor executor : executers.values()) {
-      executor.shutdown();
-      log.debug("Executer {} with active {} work has killed", executor.getThreadNamePrefix(),
-          executor.getActiveCount());
-
-    }
-
-  }
-
-  // Not required at the moment
-  private void internalThreadPoolTaskScheduler(
-      final Map<String, ThreadPoolTaskScheduler> schedulers) {
-    log.trace("Stopping #{} task-schedulers", schedulers.size());
-    
-  }
-
-  private void internalIDestroyableObject(final Map<String, IDestroyableObject> objectsToDestroy) {
-    if (objectsToDestroy != null) {
-      final Iterator<Entry<String, IDestroyableObject>> interator =
-          objectsToDestroy.entrySet().iterator();
-      while (interator.hasNext()) {
-        final Entry<String, IDestroyableObject> object = interator.next();
-        try {
-          object.getValue().fullyDestroy();
-          log.debug("Object with ID: {} is destroyed", object.getKey());
-
-        } catch (final Exception e) {
-          log.warn("Destroing object with ID: {} FAILED!", object.getKey(), null, e);
-
-        }
-      }
-    }
-
-  }
-
-}
diff --git a/connector/src/main/java/at/asitplus/eidas/specific/connector/attributes/AuthBlockAttributeBuilder.java b/connector/src/main/java/at/asitplus/eidas/specific/connector/attributes/AuthBlockAttributeBuilder.java
index 1833f377..17eb0704 100644
--- a/connector/src/main/java/at/asitplus/eidas/specific/connector/attributes/AuthBlockAttributeBuilder.java
+++ b/connector/src/main/java/at/asitplus/eidas/specific/connector/attributes/AuthBlockAttributeBuilder.java
@@ -27,7 +27,7 @@ import java.util.Base64;
 
 import org.apache.commons.lang3.StringUtils;
 
-import at.asitplus.eidas.specific.modules.auth.eidas.v2.Constants;
+import at.asitplus.eidas.specific.core.MsEidasNodeConstants;
 import at.gv.egiz.eaaf.core.api.idp.IAttributeGenerator;
 import at.gv.egiz.eaaf.core.api.idp.IAuthData;
 import at.gv.egiz.eaaf.core.api.idp.IPvpAttributeBuilder;
@@ -49,7 +49,7 @@ public class AuthBlockAttributeBuilder implements IPvpAttributeBuilder {
   public <ATT> ATT build(final ISpConfiguration oaParam, final IAuthData authData,
                          final IAttributeGenerator<ATT> g) throws AttributeBuilderException {
 
-    String authBlock = authData.getGenericData(Constants.SZR_AUTHBLOCK, String.class);
+    String authBlock = authData.getGenericData(MsEidasNodeConstants.AUTH_DATA_SZR_AUTHBLOCK, String.class);
     if (StringUtils.isNotEmpty(authBlock)) {
       return g.buildStringAttribute(EID_AUTHBLOCK_SIGNED_FRIENDLY_NAME, EID_AUTHBLOCK_SIGNED_NAME, 
           Base64.getEncoder().encodeToString(authBlock.getBytes(StandardCharsets.UTF_8)));
diff --git a/connector/src/main/java/at/asitplus/eidas/specific/connector/attributes/EidasBindAttributeBuilder.java b/connector/src/main/java/at/asitplus/eidas/specific/connector/attributes/EidasBindAttributeBuilder.java
index a4fe8c6c..18eb74f8 100644
--- a/connector/src/main/java/at/asitplus/eidas/specific/connector/attributes/EidasBindAttributeBuilder.java
+++ b/connector/src/main/java/at/asitplus/eidas/specific/connector/attributes/EidasBindAttributeBuilder.java
@@ -19,7 +19,12 @@
 
 package at.asitplus.eidas.specific.connector.attributes;
 
-import at.asitplus.eidas.specific.modules.auth.eidas.v2.Constants;
+import static at.gv.egiz.eaaf.core.api.data.ExtendedPvpAttributeDefinitions.EID_EIDBIND_FRIENDLY_NAME;
+import static at.gv.egiz.eaaf.core.api.data.ExtendedPvpAttributeDefinitions.EID_EIDBIND_NAME;
+
+import org.apache.commons.lang3.StringUtils;
+
+import at.asitplus.eidas.specific.core.MsEidasNodeConstants;
 import at.gv.egiz.eaaf.core.api.idp.IAttributeGenerator;
 import at.gv.egiz.eaaf.core.api.idp.IAuthData;
 import at.gv.egiz.eaaf.core.api.idp.IPvpAttributeBuilder;
@@ -27,10 +32,6 @@ import at.gv.egiz.eaaf.core.api.idp.ISpConfiguration;
 import at.gv.egiz.eaaf.core.exceptions.AttributeBuilderException;
 import at.gv.egiz.eaaf.core.exceptions.UnavailableAttributeException;
 import at.gv.egiz.eaaf.core.impl.idp.builder.attributes.PvpMetadata;
-import org.apache.commons.lang3.StringUtils;
-
-import static at.gv.egiz.eaaf.core.api.data.ExtendedPvpAttributeDefinitions.EID_EIDBIND_FRIENDLY_NAME;
-import static at.gv.egiz.eaaf.core.api.data.ExtendedPvpAttributeDefinitions.EID_EIDBIND_NAME;
 
 @PvpMetadata
 public class EidasBindAttributeBuilder implements IPvpAttributeBuilder {
@@ -45,7 +46,7 @@ public class EidasBindAttributeBuilder implements IPvpAttributeBuilder {
   public <ATT> ATT build(final ISpConfiguration oaParam, final IAuthData authData,
                          final IAttributeGenerator<ATT> g) throws AttributeBuilderException {
 
-    String eidasBind = authData.getGenericData(Constants.EIDAS_BIND, String.class);
+    String eidasBind = authData.getGenericData(MsEidasNodeConstants.AUTH_DATA_EIDAS_BIND, String.class);
     if (StringUtils.isNotEmpty(eidasBind)) {
       return g.buildStringAttribute(EID_EIDBIND_FRIENDLY_NAME, EID_EIDBIND_NAME, eidasBind);
 
diff --git a/connector/src/main/java/at/asitplus/eidas/specific/connector/auth/AuthenticationManager.java b/connector/src/main/java/at/asitplus/eidas/specific/connector/auth/AuthenticationManager.java
deleted file mode 100644
index abda468d..00000000
--- a/connector/src/main/java/at/asitplus/eidas/specific/connector/auth/AuthenticationManager.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright 2018 A-SIT Plus GmbH
- * AT-specific eIDAS Connector has been developed in a cooperation between EGIZ,
- * A-SIT Plus GmbH, A-SIT, and Graz University of Technology.
- *
- * Licensed under the EUPL, Version 1.2 or - as soon they will be approved by
- * the European Commission - subsequent versions of the EUPL (the "License");
- * You may not use this work except in compliance with the License.
- * You may obtain a copy of the License at:
- * https://joinup.ec.europa.eu/news/understanding-eupl-v12
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" basis,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * This product combines work with different licenses. See the "NOTICE" text
- * file for details on the various modules and licenses.
- * The "NOTICE" text file is part of the distribution. Any derivative works
- * that you distribute must include a readable copy of the "NOTICE" text file.
-*/
-
-package at.asitplus.eidas.specific.connector.auth;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.stereotype.Service;
-
-import at.gv.egiz.eaaf.core.api.IRequest;
-import at.gv.egiz.eaaf.core.api.idp.process.ExecutionContext;
-import at.gv.egiz.eaaf.core.api.idp.slo.ISloInformationContainer;
-import at.gv.egiz.eaaf.core.exceptions.EaafException;
-import at.gv.egiz.eaaf.core.impl.idp.auth.AbstractAuthenticationManager;
-import at.gv.egiz.eaaf.core.impl.idp.controller.protocols.RequestImpl;
-
-@Service("AuthenticationManager")
-public class AuthenticationManager extends AbstractAuthenticationManager {
-  private static final Logger log = LoggerFactory.getLogger(AuthenticationManager.class);
-
-  @Override
-  public ISloInformationContainer performSingleLogOut(HttpServletRequest httpReq,
-      HttpServletResponse httpResp,
-      IRequest pendingReq, String internalSsoId) throws EaafException {
-    throw new RuntimeException("Single LogOut is NOT supported by this implementation");
-
-  }
-
-  @Override
-  protected void populateExecutionContext(ExecutionContext executionContext,
-      RequestImpl pendingReq, HttpServletRequest httpReq)
-      throws EaafException {
-    log.trace("No implementation-specific population of execution-context required ... ");
-
-  }
-
-}
diff --git a/connector/src/main/java/at/asitplus/eidas/specific/connector/builder/AuthenticationDataBuilder.java b/connector/src/main/java/at/asitplus/eidas/specific/connector/builder/AuthenticationDataBuilder.java
deleted file mode 100644
index 05704de9..00000000
--- a/connector/src/main/java/at/asitplus/eidas/specific/connector/builder/AuthenticationDataBuilder.java
+++ /dev/null
@@ -1,257 +0,0 @@
-/*
- * Copyright 2018 A-SIT Plus GmbH
- * AT-specific eIDAS Connector has been developed in a cooperation between EGIZ,
- * A-SIT Plus GmbH, A-SIT, and Graz University of Technology.
- *
- * Licensed under the EUPL, Version 1.2 or - as soon they will be approved by
- * the European Commission - subsequent versions of the EUPL (the "License");
- * You may not use this work except in compliance with the License.
- * You may obtain a copy of the License at:
- * https://joinup.ec.europa.eu/news/understanding-eupl-v12
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" basis,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * This product combines work with different licenses. See the "NOTICE" text
- * file for details on the various modules and licenses.
- * The "NOTICE" text file is part of the distribution. Any derivative works
- * that you distribute must include a readable copy of the "NOTICE" text file.
- */
-
-package at.asitplus.eidas.specific.connector.builder;
-
-import java.util.Date;
-import java.util.Optional;
-import java.util.Set;
-import java.util.stream.Collectors;
-
-import org.springframework.stereotype.Service;
-
-import com.google.common.collect.Streams;
-
-import at.asitplus.eidas.specific.connector.MsEidasNodeConstants;
-import at.asitplus.eidas.specific.modules.auth.idaustria.IdAustriaAuthConstants;
-import at.asitplus.eidas.specific.modules.msproxyservice.MsProxyServiceConstants;
-import at.gv.egiz.eaaf.core.api.IRequest;
-import at.gv.egiz.eaaf.core.api.data.ExtendedPvpAttributeDefinitions;
-import at.gv.egiz.eaaf.core.api.data.PvpAttributeDefinitions;
-import at.gv.egiz.eaaf.core.api.data.PvpAttributeDefinitions.EidIdentityStatusLevelValues;
-import at.gv.egiz.eaaf.core.api.idp.IAuthData;
-import at.gv.egiz.eaaf.core.api.idp.ISpConfiguration;
-import at.gv.egiz.eaaf.core.api.idp.auth.data.IAuthProcessDataContainer;
-import at.gv.egiz.eaaf.core.exceptions.EaafAuthenticationException;
-import at.gv.egiz.eaaf.core.exceptions.EaafBuilderException;
-import at.gv.egiz.eaaf.core.exceptions.EaafException;
-import at.gv.egiz.eaaf.core.exceptions.EaafStorageException;
-import at.gv.egiz.eaaf.core.impl.data.Pair;
-import at.gv.egiz.eaaf.core.impl.data.Triple;
-import at.gv.egiz.eaaf.core.impl.idp.AuthenticationData;
-import at.gv.egiz.eaaf.core.impl.idp.EidAuthenticationData;
-import at.gv.egiz.eaaf.core.impl.idp.auth.builder.AbstractAuthenticationDataBuilder;
-import at.gv.egiz.eaaf.core.impl.idp.auth.data.EidAuthProcessDataWrapper;
-import lombok.extern.slf4j.Slf4j;
-
-@Service("AuthenticationDataBuilder")
-@Slf4j
-public class AuthenticationDataBuilder extends AbstractAuthenticationDataBuilder {
-
-  private static final String ERROR_B11 = "builder.11";
-
-  @Override
-  protected IAuthData buildDeprecatedAuthData(IRequest pendingReq) throws EaafException {
-    final EidAuthProcessDataWrapper authProcessData =
-        pendingReq.getSessionData(EidAuthProcessDataWrapper.class);
-    final EidAuthenticationData authData = new EidAuthenticationData();
-
-    // set basis infos
-    super.generateDeprecatedBasicAuthData(authData, pendingReq, authProcessData);
-
-    // set specific informations
-    authData.setSsoSessionValidTo(
-        new Date(new Date().getTime() + MsEidasNodeConstants.DEFAULT_PVP_ASSERTION_VALIDITY * 60 * 1000));
-
-    authData.setEidStatus(authProcessData.isTestIdentity()
-        ? EidIdentityStatusLevelValues.TESTIDENTITY
-        : EidIdentityStatusLevelValues.IDENTITY);
-
-    return authData;
-
-  }
-
-  @Override
-  protected void buildServiceSpecificAuthenticationData(IAuthData authData, IRequest pendingReq)
-      throws EaafException {
-    if (authData instanceof EidAuthenticationData) {
-      ((EidAuthenticationData) authData).setGenericData(
-          ExtendedPvpAttributeDefinitions.EID_PII_TRANSACTION_ID_NAME,
-          pendingReq.getUniquePiiTransactionIdentifier());
-      log.trace("Inject piiTransactionId: {} into AuthData", pendingReq.getUniquePiiTransactionIdentifier());
-
-      // set specific informations
-      ((EidAuthenticationData) authData).setSsoSessionValidTo(
-          new Date(new Date().getTime() + MsEidasNodeConstants.DEFAULT_PVP_ASSERTION_VALIDITY * 60 * 1000));
-
-      // set E-ID status-level
-      final EidAuthProcessDataWrapper authProcessData =
-          pendingReq.getSessionData(EidAuthProcessDataWrapper.class);
-      ((EidAuthenticationData) authData).setEidStatus(authProcessData.isTestIdentity()
-          ? EidIdentityStatusLevelValues.TESTIDENTITY
-          : EidIdentityStatusLevelValues.IDENTITY);
-
-      // handle mandate informations
-      buildMandateInformation((EidAuthenticationData) authData, pendingReq, authProcessData);
-
-    } else {
-      throw new RuntimeException("Can not inject PiiTransactionId because AuthData is of unknown type: "
-          + authData.getClass().getName());
-
-    }
-
-  }
-
-  @Override
-  protected IAuthData getAuthDataInstance(IRequest arg0) throws EaafException {
-    return new EidAuthenticationData();
-
-  }
-
-  @Override
-  protected Pair<String, String> buildOAspecificbPK(IRequest pendingReq, AuthenticationData authData)
-      throws EaafBuilderException {
-    return super.buildOAspecificbPK(pendingReq, authData);
-
-  }
-
-  @Override
-  protected Pair<String, String> getEncryptedBpkFromPvpAttribute(IAuthProcessDataContainer arg0,
-      AuthenticationData arg1, ISpConfiguration arg2) throws EaafBuilderException {
-    return null;
-
-  }
-
-  @Override
-  protected Pair<String, String> getbaseIdFromSzr(AuthenticationData arg0, String arg1, String arg2) {
-    return null;
-
-  }
-
-  private void buildMandateInformation(EidAuthenticationData authData, IRequest pendingReq,
-      EidAuthProcessDataWrapper authProcessData) throws EaafAuthenticationException, EaafBuilderException,
-      EaafStorageException {
-    authData.setUseMandate(authProcessData.isMandateUsed());
-    if (authProcessData.isMandateUsed()) {
-      log.debug("Build mandate-releated authentication data ... ");
-      if (authProcessData.isForeigner()) {
-        buildMandateInformationForEidasIncoming();
-
-      } else {
-        buildMandateInformationForEidasOutgoing(authData, pendingReq, authProcessData);
-
-      }
-
-      // inject mandate information into authdata
-      final Set<String> mandateAttributes = Streams.concat(
-          IdAustriaAuthConstants.DEFAULT_REQUIRED_MANDATE_NAT_PVP_ATTRIBUTES.stream(),
-          IdAustriaAuthConstants.DEFAULT_REQUIRED_MANDATE_JUR_PVP_ATTRIBUTES.stream())
-          .map(el -> el.getFirst())
-          .collect(Collectors.toSet());
-
-      authProcessData.getGenericSessionDataStream()
-          .filter(el -> mandateAttributes.contains(el.getKey()))
-          .forEach(el -> {
-            try {
-              authData.setGenericData(el.getKey(), el.getValue());
-
-            } catch (final EaafStorageException e) {
-              log.error("Can not store attribute: {} into session.", el.getKey(), e);
-              throw new RuntimeException(e);
-
-            }
-          });
-    }
-  }
-
-  private void buildMandateInformationForEidasIncoming() {
-    log.debug("Find eIDAS incoming process. Generated mandate-information for ID-Austria system ... ");
-
-    // TODO: implement IDA specific processing of foreign mandate
-
-  }
-
-  private void buildMandateInformationForEidasOutgoing(EidAuthenticationData authData, IRequest pendingReq,
-      EidAuthProcessDataWrapper authProcessData) throws EaafAuthenticationException, EaafBuilderException,
-      EaafStorageException {
-    log.debug("Find eIDAS outgoing process. Generated mandate-information for other country ... ");
-    if (authProcessData.getGenericDataFromSession(
-        PvpAttributeDefinitions.MANDATE_NAT_PER_BPK_NAME) != null) {
-      final Optional<Triple<String, String, Boolean>> missingAttribute =
-          IdAustriaAuthConstants.DEFAULT_REQUIRED_MANDATE_NAT_PVP_ATTRIBUTES.stream()
-              .filter(el -> authProcessData.getGenericDataFromSession(el.getFirst()) == null)
-              .findFirst();
-      if (missingAttribute.isPresent()) {
-        log.error("ID-Austria response contains not all attributes for nat. person mandator. Missing: {}",
-            missingAttribute.get().getFirst());
-        throw new EaafAuthenticationException(ERROR_B11, new Object[] { "Nat. person mandate" });
-
-      } else {
-        log.trace("Find nat. person mandate. Mandate can be used as it is ");
-        authData.setGenericData(MsProxyServiceConstants.ATTR_EIDAS_NAT_MANDATOR_PERSONAL_IDENTIFIER,
-            extractBpkFromResponse(authProcessData.getGenericDataFromSession(
-                PvpAttributeDefinitions.MANDATE_NAT_PER_BPK_NAME, String.class)));
-
-      }
-
-    } else {
-      final Optional<Triple<String, String, Boolean>> missingAttribute =
-          IdAustriaAuthConstants.DEFAULT_REQUIRED_MANDATE_JUR_PVP_ATTRIBUTES.stream()
-              .filter(el -> authProcessData.getGenericDataFromSession(el.getFirst()) == null)
-              .findFirst();
-      if (missingAttribute.isPresent()) {
-        log.error("ID-Austria response contains not all attributes for legal. person mandator. Missing: {}",
-            missingAttribute.get().getFirst());
-        throw new EaafAuthenticationException(ERROR_B11, new Object[] { "Legal. person mandate" });
-
-      } else {
-        log.trace(
-            "Find jur. person mandate. Generate eIDAS identifier from legal-person sourcePin and type ... ");
-        final String sourcePin = authProcessData.getGenericDataFromSession(
-            PvpAttributeDefinitions.MANDATE_LEG_PER_SOURCE_PIN_NAME, String.class);
-        final String sourcePinType = authProcessData.getGenericDataFromSession(
-            PvpAttributeDefinitions.MANDATE_LEG_PER_SOURCE_PIN_TYPE_NAME, String.class);
-
-        // build leagl-person identifier for eIDAS out-going 
-        final String[] splittedTarget =  
-            pendingReq.getServiceProviderConfiguration().getAreaSpecificTargetIdentifier().split("\\+");       
-        StringBuilder sb = new StringBuilder();
-        sb.append(splittedTarget[1])
-          .append("/")
-          .append(splittedTarget[2])
-          .append("/")
-          .append(sourcePinType)
-          .append("+")
-          .append(sourcePin);
-                
-        log.debug("Use legal-person eIDAS identifer: {} from baseId: {} and baseIdType: {}",
-            sb.toString(), sourcePin, sourcePinType);
-        authData.setGenericData(MsProxyServiceConstants.ATTR_EIDAS_JUR_MANDATOR_PERSONAL_IDENTIFIER, sb.toString());
-
-      }
-    }
-  }
-
-  private String extractBpkFromResponse(String pvpBpkAttrValue) {
-    final String[] split = pvpBpkAttrValue.split(":", 2);
-    if (split.length == 2) {
-      return split[1];
-
-    } else {
-      log.warn("PVP bPK attribute: {} has wrong format. Use it as it is.", pvpBpkAttrValue);
-      return pvpBpkAttrValue;
-
-    }
-  }
-
-}
diff --git a/connector/src/main/java/at/asitplus/eidas/specific/connector/config/PvpEndPointConfiguration.java b/connector/src/main/java/at/asitplus/eidas/specific/connector/config/PvpEndPointConfiguration.java
index d7d88017..c62cbeef 100644
--- a/connector/src/main/java/at/asitplus/eidas/specific/connector/config/PvpEndPointConfiguration.java
+++ b/connector/src/main/java/at/asitplus/eidas/specific/connector/config/PvpEndPointConfiguration.java
@@ -41,7 +41,7 @@ import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import at.asitplus.eidas.specific.connector.MsEidasNodeConstants;
+import at.asitplus.eidas.specific.core.MsEidasNodeConstants;
 import at.gv.egiz.eaaf.core.api.idp.IConfiguration;
 import at.gv.egiz.eaaf.core.exceptions.EaafConfigurationException;
 import at.gv.egiz.eaaf.core.exceptions.EaafException;
diff --git a/connector/src/main/java/at/asitplus/eidas/specific/connector/config/PvpMetadataConfiguration.java b/connector/src/main/java/at/asitplus/eidas/specific/connector/config/PvpMetadataConfiguration.java
index 0fc061ff..e83fd4cf 100644
--- a/connector/src/main/java/at/asitplus/eidas/specific/connector/config/PvpMetadataConfiguration.java
+++ b/connector/src/main/java/at/asitplus/eidas/specific/connector/config/PvpMetadataConfiguration.java
@@ -34,7 +34,7 @@ import org.opensaml.saml.saml2.metadata.RequestedAttribute;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import at.asitplus.eidas.specific.connector.MsEidasNodeConstants;
+import at.asitplus.eidas.specific.core.MsEidasNodeConstants;
 import at.gv.egiz.eaaf.core.api.idp.IConfiguration;
 import at.gv.egiz.eaaf.core.exceptions.EaafException;
 import at.gv.egiz.eaaf.modules.pvp2.api.IPvp2BasicConfiguration;
diff --git a/connector/src/main/java/at/asitplus/eidas/specific/connector/config/StaticResourceConfiguration.java b/connector/src/main/java/at/asitplus/eidas/specific/connector/config/StaticResourceConfiguration.java
deleted file mode 100644
index b4d58cdd..00000000
--- a/connector/src/main/java/at/asitplus/eidas/specific/connector/config/StaticResourceConfiguration.java
+++ /dev/null
@@ -1,220 +0,0 @@
-/*
- * Copyright 2019 A-SIT Plus GmbH
- * AT-specific eIDAS Connector has been developed in a cooperation between EGIZ,
- * A-SIT Plus GmbH, A-SIT, and Graz University of Technology.
- *
- * Licensed under the EUPL, Version 1.2 or - as soon they will be approved by
- * the European Commission - subsequent versions of the EUPL (the "License");
- * You may not use this work except in compliance with the License.
- * You may obtain a copy of the License at:
- * https://joinup.ec.europa.eu/news/understanding-eupl-v12
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" basis,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * This product combines work with different licenses. See the "NOTICE" text
- * file for details on the various modules and licenses.
- * The "NOTICE" text file is part of the distribution. Any derivative works
- * that you distribute must include a readable copy of the "NOTICE" text file.
- */
-
-package at.asitplus.eidas.specific.connector.config;
-
-import java.net.MalformedURLException;
-import java.util.List;
-
-import org.apache.commons.lang3.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.context.support.ReloadableResourceBundleMessageSource;
-import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
-import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
-import org.springframework.web.servlet.i18n.CookieLocaleResolver;
-import org.thymeleaf.templateresolver.FileTemplateResolver;
-
-import at.asitplus.eidas.specific.connector.MsEidasNodeConstants;
-import at.gv.egiz.eaaf.core.api.idp.IConfiguration;
-import at.gv.egiz.eaaf.core.api.logging.IMessageSourceLocation;
-import at.gv.egiz.eaaf.core.impl.utils.FileUtils;
-
-/**
- * Spring configurator for Web resources.
- * 
- * @author tlenz
- *
- */
-@Configuration
-public class StaticResourceConfiguration implements WebMvcConfigurer {
-  private static final Logger log = LoggerFactory.getLogger(StaticResourceConfiguration.class);
-  private static final String[] CLASSPATH_RESOURCE_LOCATIONS = {
-      "/"
-  };
-
-  private static final String DEFAULT_MESSAGE_SOURCE = "classpath:properties/status_messages";
-
-  @Autowired
-  private IConfiguration basicConfig;
-
-  @Override
-  public void addResourceHandlers(ResourceHandlerRegistry registry) {
-    final String staticResources = basicConfig.getBasicConfiguration(
-        MsEidasNodeConstants.PROP_CONFIG_WEBCONTENT_STATIC_PATH);
-    try {
-      if (StringUtils.isNotEmpty(staticResources)) {
-        String absPath = FileUtils.makeAbsoluteUrl(staticResources, basicConfig
-            .getConfigurationRootDirectory());
-        if (!absPath.endsWith("/")) {
-          absPath += "/";
-        }
-
-        registry.addResourceHandler("/static/**").addResourceLocations(absPath);
-        log.info("Add Ressourcefolder: " + absPath + " for static Web content");
-
-      } else {
-        log.debug("No Ressourcefolder for static Web content");
-      }
-
-    } catch (final MalformedURLException e) {
-      log.warn("Can NOT initialize ressourcefolder for static Web content", e);
-
-    }
-
-    registry.addResourceHandler("/**").addResourceLocations(CLASSPATH_RESOURCE_LOCATIONS);
-
-  }
-
-  /**
-   * Get a message source with only internal message properties.
-   *
-   * @param ressourceLocations List of source-locations
-   * @return
-   */
-  @Bean
-  public ReloadableResourceBundleMessageSource internalMessageSource(
-      @Autowired(required = false) final List<IMessageSourceLocation> ressourceLocations) {
-    final ReloadableResourceBundleMessageSource messageSource =
-        new ReloadableResourceBundleMessageSource();
-
-    // add default message source
-    messageSource.setBasename(DEFAULT_MESSAGE_SOURCE);
-
-    if (ressourceLocations != null) {
-      // load more message sources
-      for (final IMessageSourceLocation el : ressourceLocations) {
-        if (el.getMessageSourceLocation() != null) {
-          for (final String source : el.getMessageSourceLocation()) {
-            messageSource.addBasenames(source);
-            log.debug("Add additional messageSources: {}", el.getMessageSourceLocation().toArray());
-
-          }
-        }
-      }
-    }
-
-    messageSource.setDefaultEncoding("UTF-8");
-    return messageSource;
-
-  }
-
-  /**
-   * Get full message source with internal and external message-properties files.
-   *
-   * @param ressourceLocations List of source-locations
-   * @return
-   */
-  @Bean
-  public ReloadableResourceBundleMessageSource messageSource(
-      @Autowired(required = false) final List<IMessageSourceLocation> ressourceLocations) {
-    final ReloadableResourceBundleMessageSource messageSource =
-        new ReloadableResourceBundleMessageSource();
-    messageSource.setDefaultEncoding("UTF-8");
-    messageSource.setParentMessageSource(internalMessageSource(ressourceLocations));
-
-    final String staticResources = basicConfig
-        .getBasicConfiguration(MsEidasNodeConstants.PROP_CONFIG_WEBCONTENT_PROPERTIES_PATH);
-    try {
-      if (StringUtils.isNotEmpty(staticResources)) {
-        final String absPath =
-            FileUtils.makeAbsoluteUrl(staticResources, basicConfig.getConfigurationRootDirectory());
-        messageSource.setBasename(absPath);
-
-      } else {
-        log.debug("No Ressourcefolder for dynamic Web content templates");
-
-      }
-
-    } catch (final MalformedURLException e) {
-      log.warn("Can NOT initialize ressourcefolder for dynamic Web content templates", e);
-
-    }
-
-    return messageSource;
-
-  }
-    
-  /**
-   * Get a i18n resolver based on cookies.
-   *
-   * @return
-   */
-  @Bean
-  public CookieLocaleResolver localeResolver() {
-    final CookieLocaleResolver localeResolver = new CookieLocaleResolver();
-    localeResolver.setCookieName("currentLanguage");
-    localeResolver.setCookieMaxAge(3600);
-    return localeResolver;
-    
-  }
-  
-  /**
-   * Get a Tyhmeleaf Template-Resolver with external configuration path.
-   *
-   * @return
-   */
-  @Bean(name = "templateResolver")
-  public FileTemplateResolver templateResolver() {
-    final String staticResources = basicConfig
-        .getBasicConfiguration(MsEidasNodeConstants.PROP_CONFIG_WEBCONTENT_TEMPLATES_PATH);
-    try {
-      if (StringUtils.isNotEmpty(staticResources)) {
-        String absPath =
-            FileUtils.makeAbsoluteUrl(staticResources, basicConfig.getConfigurationRootDirectory());
-        if (!absPath.endsWith("/")) {
-          absPath += "/";
-
-        }
-
-        if (absPath.startsWith("file:")) {
-          absPath = absPath.substring("file:".length());
-
-        }
-
-        final FileTemplateResolver viewResolver = new FileTemplateResolver();
-        viewResolver.setPrefix(absPath);
-        viewResolver.setSuffix(".html");
-        viewResolver.setTemplateMode("HTML");
-        viewResolver.setCacheable(false);
-
-        log.info("Add Ressourcefolder: {} for dynamic Web content templates", absPath);
-        return viewResolver;
-
-      } else {
-        log.debug("No Ressourcefolder for dynamic Web content templates");
-
-      }
-
-    } catch (final MalformedURLException e) {
-      log.warn("Can NOT initialize ressourcefolder for dynamic Web content templates", e);
-
-    }
-
-    throw new RuntimeException("Can NOT initialize HTML template resolver");
-
-  }
-}
diff --git a/connector/src/main/java/at/asitplus/eidas/specific/connector/controller/ProcessEngineSignalController.java b/connector/src/main/java/at/asitplus/eidas/specific/connector/controller/ProcessEngineSignalController.java
index 1bf1ad67..e649fd3a 100644
--- a/connector/src/main/java/at/asitplus/eidas/specific/connector/controller/ProcessEngineSignalController.java
+++ b/connector/src/main/java/at/asitplus/eidas/specific/connector/controller/ProcessEngineSignalController.java
@@ -32,7 +32,7 @@ import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
 
-import at.asitplus.eidas.specific.connector.MsEidasNodeConstants;
+import at.asitplus.eidas.specific.core.MsEidasNodeConstants;
 import at.gv.egiz.eaaf.core.exceptions.EaafException;
 import at.gv.egiz.eaaf.core.impl.idp.controller.AbstractProcessEngineSignalController;
 
diff --git a/connector/src/main/java/at/asitplus/eidas/specific/connector/controller/Pvp2SProfileEndpoint.java b/connector/src/main/java/at/asitplus/eidas/specific/connector/controller/Pvp2SProfileEndpoint.java
index d2ec5a7c..923864cc 100644
--- a/connector/src/main/java/at/asitplus/eidas/specific/connector/controller/Pvp2SProfileEndpoint.java
+++ b/connector/src/main/java/at/asitplus/eidas/specific/connector/controller/Pvp2SProfileEndpoint.java
@@ -30,7 +30,7 @@ import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
 
-import at.asitplus.eidas.specific.connector.MsEidasNodeConstants;
+import at.asitplus.eidas.specific.core.MsEidasNodeConstants;
 import at.gv.egiz.eaaf.core.exceptions.EaafException;
 import at.gv.egiz.eaaf.modules.pvp2.idp.impl.AbstractPvp2XProtocol;
 import at.gv.egiz.eaaf.modules.pvp2.idp.impl.PvpSProfilePendingRequest;
diff --git a/connector/src/main/java/at/asitplus/eidas/specific/connector/health/EidasNodeMetadataHealthIndicator.java b/connector/src/main/java/at/asitplus/eidas/specific/connector/health/EidasNodeMetadataHealthIndicator.java
deleted file mode 100644
index f160916c..00000000
--- a/connector/src/main/java/at/asitplus/eidas/specific/connector/health/EidasNodeMetadataHealthIndicator.java
+++ /dev/null
@@ -1,69 +0,0 @@
-package at.asitplus.eidas.specific.connector.health;
-
-import java.io.ByteArrayInputStream;
-
-import javax.xml.transform.TransformerFactoryConfigurationError;
-
-import org.apache.commons.lang3.StringUtils;
-import org.apache.http.StatusLine;
-import org.apache.http.client.methods.HttpGet;
-import org.apache.http.client.methods.HttpUriRequest;
-import org.apache.http.client.utils.URIBuilder;
-import org.apache.http.entity.ContentType;
-import org.apache.http.impl.client.CloseableHttpClient;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.actuate.health.Health;
-import org.springframework.boot.actuate.health.HealthIndicator;
-
-import at.asitplus.eidas.specific.connector.MsEidasNodeConstants;
-import at.gv.egiz.eaaf.core.api.idp.IConfiguration;
-import at.gv.egiz.eaaf.core.impl.data.Triple;
-import at.gv.egiz.eaaf.core.impl.http.HttpUtils;
-import at.gv.egiz.eaaf.core.impl.http.IHttpClientFactory;
-import at.gv.egiz.eaaf.core.impl.utils.DomUtils;
-import lombok.extern.slf4j.Slf4j;
-
-@Slf4j
-public class EidasNodeMetadataHealthIndicator implements HealthIndicator {
-
-  @Autowired IConfiguration config;
-  @Autowired IHttpClientFactory httpClientFactory;
-  
-  @Override
-  public Health health() {
-    try {
-      final String urlString = config.getBasicConfiguration(
-          MsEidasNodeConstants.PROP_CONFIG_MONITORING_EIDASNODE_METADATAURL);
-      if (StringUtils.isEmpty(urlString)) {
-        log.trace("No eIDASNode metadata URL. Skipping test ... ");
-        return Health.unknown().build();
-
-      }
-
-      // create HTTP client
-      CloseableHttpClient httpClient = httpClientFactory.getHttpClient();      
-      URIBuilder uriBuilder = new URIBuilder(urlString);      
-      HttpUriRequest request = new HttpGet(uriBuilder.build());
-
-      final Triple<StatusLine, ByteArrayInputStream, ContentType> respCode = httpClient.execute(request,
-          HttpUtils.bodyStatusCodeResponseHandler());
-      if (respCode.getFirst().getStatusCode() != 200) {
-        log.warn("Monitoring: Get http StatusCode: {} from eIDAS-Node Metadata endpoint", 
-            respCode.getFirst().getStatusCode());
-        return Health.down().withDetail("http StatusCode", respCode.getFirst().getStatusCode()).build();
-
-      }
-
-      // parse metadata
-      DomUtils.parseXmlNonValidating(respCode.getSecond());
-
-      return Health.up().build();
-
-    } catch (Exception | TransformerFactoryConfigurationError e) {
-      log.warn("Monitoring: Can not read SAML2 metadata from eIDAS-Node", e);
-      return Health.down().down(e).build();
-
-    }
-  }
-
-}
diff --git a/connector/src/main/java/at/asitplus/eidas/specific/connector/health/IgniteClusterHealthIndicator.java b/connector/src/main/java/at/asitplus/eidas/specific/connector/health/IgniteClusterHealthIndicator.java
deleted file mode 100644
index 10517565..00000000
--- a/connector/src/main/java/at/asitplus/eidas/specific/connector/health/IgniteClusterHealthIndicator.java
+++ /dev/null
@@ -1,52 +0,0 @@
-package at.asitplus.eidas.specific.connector.health;
-
-import org.apache.ignite.Ignite;
-import org.springframework.boot.actuate.health.Health;
-import org.springframework.boot.actuate.health.HealthIndicator;
-
-import eu.eidas.auth.cache.IgniteInstanceInitializerSpecificCommunication;
-import lombok.Setter;
-import lombok.extern.slf4j.Slf4j;
-
-/**
- * HealthCheck that validate Nodes in Apache-Ignite Cluster.
- * 
- * @author tlenz
- *
- */
-@Slf4j
-public class IgniteClusterHealthIndicator implements HealthIndicator {
-
-  @Setter
-  protected IgniteInstanceInitializerSpecificCommunication igniteInstanceInitializerSpecificCommunication;
-
-  @Override
-  public Health health() {
-    final Ignite instance = igniteInstanceInitializerSpecificCommunication.getInstance();
-
-    // check if Apache Ignite cluster is active
-    if (!instance.cluster().active()) {
-      return Health.outOfService().build();
-
-    }
-
-    final Health.Builder healthBuilder;
-    // Status UP requires more than 1 node because MS-Connector and eIDAS-Node operations as
-    // micro-services
-    if (instance.cluster().nodes().size() > 1) {
-      healthBuilder = Health.up();
-
-    } else {
-      // Something looks wrong if only a single node was found because MS-Connector and eIDAS-Node
-      // operations as micro-services
-      healthBuilder = Health.outOfService();
-
-    }
-
-    healthBuilder.withDetail("#Nodes", instance.cluster().nodes().size());
-    log.trace("Ignite state. #Nodes: {}", instance.cluster().nodes().size());
-    return healthBuilder.build();
-
-  }
-
-}
diff --git a/connector/src/main/java/at/asitplus/eidas/specific/connector/interceptor/WebFrontEndSecurityInterceptor.java b/connector/src/main/java/at/asitplus/eidas/specific/connector/interceptor/WebFrontEndSecurityInterceptor.java
deleted file mode 100644
index d90cd22b..00000000
--- a/connector/src/main/java/at/asitplus/eidas/specific/connector/interceptor/WebFrontEndSecurityInterceptor.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * Copyright 2018 A-SIT Plus GmbH
- * AT-specific eIDAS Connector has been developed in a cooperation between EGIZ,
- * A-SIT Plus GmbH, A-SIT, and Graz University of Technology.
- *
- * Licensed under the EUPL, Version 1.2 or - as soon they will be approved by
- * the European Commission - subsequent versions of the EUPL (the "License");
- * You may not use this work except in compliance with the License.
- * You may obtain a copy of the License at:
- * https://joinup.ec.europa.eu/news/understanding-eupl-v12
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" basis,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * This product combines work with different licenses. See the "NOTICE" text
- * file for details on the various modules and licenses.
- * The "NOTICE" text file is part of the distribution. Any derivative works
- * that you distribute must include a readable copy of the "NOTICE" text file.
-*/
-
-package at.asitplus.eidas.specific.connector.interceptor;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.springframework.web.servlet.HandlerInterceptor;
-import org.springframework.web.servlet.ModelAndView;
-
-/**
- * Spring interceptor to inject securtiy headers into http response.
- * 
- * @author tlenz
- *
- */
-public class WebFrontEndSecurityInterceptor implements HandlerInterceptor {
-
-  /*
-   * (non-Javadoc)
-   * 
-   * @see
-   * org.springframework.web.servlet.HandlerInterceptor#preHandle(javax.servlet.
-   * http.HttpServletRequest, javax.servlet.http.HttpServletResponse,
-   * java.lang.Object)
-   */
-  @Override
-  public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
-      throws Exception {
-
-    // set security headers
-    response.setHeader("Expires", "Sat, 6 May 1995 12:00:00 GMT");
-    response.setHeader("Pragma", "no-cache");
-    response.setHeader("Cache-control", "no-store, no-cache, must-revalidate");
-
-    return true;
-
-  }
-
-  /*
-   * (non-Javadoc)
-   * 
-   * @see
-   * org.springframework.web.servlet.HandlerInterceptor#postHandle(javax.servlet.
-   * http.HttpServletRequest, javax.servlet.http.HttpServletResponse,
-   * java.lang.Object, org.springframework.web.servlet.ModelAndView)
-   */
-  @Override
-  public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
-      ModelAndView modelAndView) throws Exception {
-
-  }
-
-  /*
-   * (non-Javadoc)
-   * 
-   * @see
-   * org.springframework.web.servlet.HandlerInterceptor#afterCompletion(javax.
-   * servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse,
-   * java.lang.Object, java.lang.Exception)
-   */
-  @Override
-  public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler,
-      Exception ex)
-      throws Exception {
-
-  }
-
-}
diff --git a/connector/src/main/java/at/asitplus/eidas/specific/connector/logger/RevisionLogger.java b/connector/src/main/java/at/asitplus/eidas/specific/connector/logger/RevisionLogger.java
deleted file mode 100644
index 16385e10..00000000
--- a/connector/src/main/java/at/asitplus/eidas/specific/connector/logger/RevisionLogger.java
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
- * Copyright 2018 A-SIT Plus GmbH
- * AT-specific eIDAS Connector has been developed in a cooperation between EGIZ,
- * A-SIT Plus GmbH, A-SIT, and Graz University of Technology.
- *
- * Licensed under the EUPL, Version 1.2 or - as soon they will be approved by
- * the European Commission - subsequent versions of the EUPL (the "License");
- * You may not use this work except in compliance with the License.
- * You may obtain a copy of the License at:
- * https://joinup.ec.europa.eu/news/understanding-eupl-v12
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" basis,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * This product combines work with different licenses. See the "NOTICE" text
- * file for details on the various modules and licenses.
- * The "NOTICE" text file is part of the distribution. Any derivative works
- * that you distribute must include a readable copy of the "NOTICE" text file.
-*/
-
-package at.asitplus.eidas.specific.connector.logger;
-
-import java.util.Date;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-
-import at.asitplus.eidas.specific.connector.MsEidasNodeConstants;
-import at.gv.egiz.components.eventlog.api.Event;
-import at.gv.egiz.components.eventlog.api.EventConstants;
-import at.gv.egiz.components.eventlog.api.EventLogFactory;
-import at.gv.egiz.components.eventlog.api.EventLoggingException;
-import at.gv.egiz.eaaf.core.api.IRequest;
-import at.gv.egiz.eaaf.core.api.idp.IConfiguration;
-import at.gv.egiz.eaaf.core.api.idp.ISpConfiguration;
-import at.gv.egiz.eaaf.core.api.logging.IRevisionLogger;
-
-public class RevisionLogger extends EventLogFactory implements IRevisionLogger {
-  private static final Logger log = LoggerFactory.getLogger(RevisionLogger.class);
-
-  @Autowired
-  private IConfiguration basicConfig;
-
-  @Override
-  public void logEvent(ISpConfiguration oaConfig, int eventCode, String message) {
-    logEvent(createNewEvent(new Date().getTime(), eventCode, message));
-
-  }
-
-  @Override
-  public void logEvent(IRequest pendingRequest, int eventCode) {
-    logEvent(createNewEvent(new Date().getTime(), eventCode,
-        pendingRequest.getUniqueSessionIdentifier(), pendingRequest.getUniqueTransactionIdentifier()));
-
-  }
-
-  @Override
-  public void logEvent(IRequest pendingRequest, int eventCode, String message) {
-    logEvent(createNewEvent(new Date().getTime(), eventCode, message,
-        pendingRequest.getUniqueSessionIdentifier(), pendingRequest.getUniqueTransactionIdentifier()));
-
-  }
-
-  @Override
-  public void logEvent(int eventCode, String message) {
-    logEvent(createNewEvent(new Date().getTime(), eventCode, message));
-
-  }
-
-  @Override
-  public void logEvent(String sessionID, String transactionID, int eventCode, String message) {
-    logEvent(createNewEvent(new Date().getTime(), eventCode, message, sessionID, transactionID));
-
-  }
-
-  @Override
-  public void logEvent(String sessionID, String transactionID, int eventCode) {
-    logEvent(createNewEvent(new Date().getTime(), eventCode, sessionID, transactionID));
-
-  }
-
-  private void logEvent(Event event) {
-    try {
-      if (event.getEventCode() >= 1100) {
-        if (event.getEventCode() == EventConstants.TRANSACTION_IP
-            && !basicConfig.getBasicConfigurationBoolean(
-                MsEidasNodeConstants.PROP_CONFIG_REVISIONLOG_LOG_IP_ADDRESS_OF_USER, true)) {
-          log.trace("Ignore Event: " + event.getEventCode() + " because IP adresse logging prohibited");
-          return;
-
-        }
-
-        getEventLog().logEvent(event);
-
-      } else {
-        log.trace("Ignore Event: " + event.getEventCode()
-            + " because session functionallity is not implemented");
-      }
-
-    } catch (final EventLoggingException e) {
-      log.warn("Event logging FAILED! Reason: " + e.getMessage());
-
-    }
-
-  }
-}
diff --git a/connector/src/main/java/at/asitplus/eidas/specific/connector/logger/StatisticLogger.java b/connector/src/main/java/at/asitplus/eidas/specific/connector/logger/StatisticLogger.java
deleted file mode 100644
index 3483f367..00000000
--- a/connector/src/main/java/at/asitplus/eidas/specific/connector/logger/StatisticLogger.java
+++ /dev/null
@@ -1,141 +0,0 @@
-/*
- * Copyright 2018 A-SIT Plus GmbH
- * AT-specific eIDAS Connector has been developed in a cooperation between EGIZ,
- * A-SIT Plus GmbH, A-SIT, and Graz University of Technology.
- *
- * Licensed under the EUPL, Version 1.2 or - as soon they will be approved by
- * the European Commission - subsequent versions of the EUPL (the "License");
- * You may not use this work except in compliance with the License.
- * You may obtain a copy of the License at:
- * https://joinup.ec.europa.eu/news/understanding-eupl-v12
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" basis,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * This product combines work with different licenses. See the "NOTICE" text
- * file for details on the various modules and licenses.
- * The "NOTICE" text file is part of the distribution. Any derivative works
- * that you distribute must include a readable copy of the "NOTICE" text file.
-*/
-
-package at.asitplus.eidas.specific.connector.logger;
-
-import org.apache.commons.lang3.StringUtils;
-import org.joda.time.DateTime;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import at.asitplus.eidas.specific.connector.MsEidasNodeConstants;
-import at.gv.egiz.eaaf.core.api.IRequest;
-import at.gv.egiz.eaaf.core.api.idp.IAuthData;
-import at.gv.egiz.eaaf.core.api.logging.IStatisticLogger;
-import at.gv.egiz.eaaf.core.exceptions.EaafException;
-
-public class StatisticLogger implements IStatisticLogger {
-
-  private static final Logger log = LoggerFactory.getLogger(StatisticLogger.class);
-
-  private static final String DATEFORMATER = "yyyy.MM.dd-HH:mm:ss+z";
-  private static final String STATUS_SUCCESS = "success";
-  private static final String STATUS_ERROR = "error";
-
-  @Override
-  public void logSuccessOperation(IRequest protocolRequest, IAuthData authData, boolean isSsoSession) {
-    log.info(buildLogMessage(
-        protocolRequest.getUniqueTransactionIdentifier(),
-        protocolRequest.getSpEntityId(),
-        protocolRequest.getRawData(MsEidasNodeConstants.DATA_REQUESTERID),
-        protocolRequest.getServiceProviderConfiguration().getAreaSpecificTargetIdentifier(),
-        authData.getCiticenCountryCode(),
-        STATUS_SUCCESS,
-        StringUtils.EMPTY,
-        StringUtils.EMPTY));
-
-  }
-
-  @Override
-  public void logErrorOperation(Throwable throwable) {
-    String errorId = "TODO";
-    if (throwable instanceof EaafException) {
-      errorId = ((EaafException) throwable).getErrorId();
-    }
-
-    log.info(buildLogMessage(
-        StringUtils.EMPTY,
-        StringUtils.EMPTY,
-        StringUtils.EMPTY,
-        StringUtils.EMPTY,
-        StringUtils.EMPTY,
-        STATUS_ERROR,
-        errorId,
-        throwable.getMessage()));
-
-  }
-
-  @Override
-  public void logErrorOperation(Throwable throwable, IRequest errorRequest) {
-    String errorId = "TODO";
-    if (throwable instanceof EaafException) {
-      errorId = ((EaafException) throwable).getErrorId();
-    }
-
-    if (errorRequest != null) {
-      log.info(buildLogMessage(
-          errorRequest.getUniqueTransactionIdentifier(),
-          errorRequest.getSpEntityId(),
-          errorRequest.getRawData(MsEidasNodeConstants.DATA_REQUESTERID),
-          errorRequest.getServiceProviderConfiguration().getAreaSpecificTargetIdentifier(),
-          StringUtils.EMPTY,
-          STATUS_ERROR,
-          errorId,
-          throwable.getMessage()));
-    } else {
-      log.info(buildLogMessage(
-          StringUtils.EMPTY,
-          StringUtils.EMPTY,
-          StringUtils.EMPTY,
-          StringUtils.EMPTY,
-          StringUtils.EMPTY,
-          STATUS_ERROR,
-          errorId,
-          throwable.getMessage()));
-    }
-
-  }
-
-  @Override
-  public void internalTesting() throws Exception {
-    log.trace("Not implemented for a File-based logger");
-
-  }
-
-  private String buildLogMessage(String transId, String entityId, Object requesterId, String target,
-      String cc,
-      String status, String errorCode, String errorMsg) {
-    String logMsg = StringUtils.EMPTY;
-
-    // data,tId,MOAID-Id,SP-Id,bPKTarget,CC,status,error-code,error-msg
-
-    logMsg += DateTime.now().toString(DATEFORMATER) + ",";
-    logMsg += transId + ",";
-    logMsg += entityId + ",";
-
-    if (requesterId instanceof String && StringUtils.isNotEmpty((String) requesterId)) {
-      logMsg += (String) requesterId + ",";
-    } else {
-      logMsg += StringUtils.EMPTY + ",";
-    }
-
-    logMsg += target + ",";
-    logMsg += cc + ",";
-
-    logMsg += status + ",";
-    logMsg += errorCode + ",";
-    logMsg += errorMsg;
-
-    return logMsg;
-  }
-}
diff --git a/connector/src/main/java/at/asitplus/eidas/specific/connector/mapper/LoALevelMapper.java b/connector/src/main/java/at/asitplus/eidas/specific/connector/mapper/LoALevelMapper.java
deleted file mode 100644
index 564160be..00000000
--- a/connector/src/main/java/at/asitplus/eidas/specific/connector/mapper/LoALevelMapper.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright 2018 A-SIT Plus GmbH
- * AT-specific eIDAS Connector has been developed in a cooperation between EGIZ,
- * A-SIT Plus GmbH, A-SIT, and Graz University of Technology.
- *
- * Licensed under the EUPL, Version 1.2 or - as soon they will be approved by
- * the European Commission - subsequent versions of the EUPL (the "License");
- * You may not use this work except in compliance with the License.
- * You may obtain a copy of the License at:
- * https://joinup.ec.europa.eu/news/understanding-eupl-v12
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" basis,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * This product combines work with different licenses. See the "NOTICE" text
- * file for details on the various modules and licenses.
- * The "NOTICE" text file is part of the distribution. Any derivative works
- * that you distribute must include a readable copy of the "NOTICE" text file.
-*/
-
-package at.asitplus.eidas.specific.connector.mapper;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.stereotype.Service;
-
-import at.gv.egiz.eaaf.core.api.data.EaafConstants;
-import at.gv.egiz.eaaf.core.api.data.ILoALevelMapper;
-
-@Service("LoALevelMapper")
-public class LoALevelMapper implements ILoALevelMapper {
-  private static final Logger log = LoggerFactory.getLogger(LoALevelMapper.class);
-
-  @Override
-  public String mapToSecClass(String loa) {
-    log.info("Mapping to PVP SecClass is NOT supported");
-    return null;
-  }
-
-  @Override
-  public String mapToEidasLoa(String loa) {
-    if (loa.startsWith(EaafConstants.EIDAS_LOA_PREFIX)) {
-      return loa;
-    } else {
-      log.info("Can NOT map '" + loa + "' to eIDAS LoA");
-    }
-
-    return null;
-
-  }
-
-  @Override
-  public String mapEidasQaaToStorkQaa(String eidasqaaLevel) {
-    return null;
-  }
-
-}
diff --git a/connector/src/main/java/at/asitplus/eidas/specific/connector/processes/CountrySelectionProcessImpl.java b/connector/src/main/java/at/asitplus/eidas/specific/connector/processes/CountrySelectionProcessImpl.java
index 805148f7..2ec86f53 100644
--- a/connector/src/main/java/at/asitplus/eidas/specific/connector/processes/CountrySelectionProcessImpl.java
+++ b/connector/src/main/java/at/asitplus/eidas/specific/connector/processes/CountrySelectionProcessImpl.java
@@ -25,7 +25,7 @@ package at.asitplus.eidas.specific.connector.processes;
 
 import org.apache.commons.lang3.StringUtils;
 
-import at.asitplus.eidas.specific.connector.MsEidasNodeConstants;
+import at.asitplus.eidas.specific.core.MsEidasNodeConstants;
 import at.gv.egiz.eaaf.core.api.IRequest;
 import at.gv.egiz.eaaf.core.api.idp.auth.modules.AuthModule;
 import at.gv.egiz.eaaf.core.api.idp.process.ExecutionContext;
diff --git a/connector/src/main/java/at/asitplus/eidas/specific/connector/processes/tasks/EvaluateCountrySelectionTask.java b/connector/src/main/java/at/asitplus/eidas/specific/connector/processes/tasks/EvaluateCountrySelectionTask.java
index 727653b3..b2c5c51d 100644
--- a/connector/src/main/java/at/asitplus/eidas/specific/connector/processes/tasks/EvaluateCountrySelectionTask.java
+++ b/connector/src/main/java/at/asitplus/eidas/specific/connector/processes/tasks/EvaluateCountrySelectionTask.java
@@ -34,7 +34,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Component;
 
-import at.asitplus.eidas.specific.connector.MsEidasNodeConstants;
+import at.asitplus.eidas.specific.core.MsEidasNodeConstants;
 import at.gv.egiz.eaaf.core.api.data.EaafConstants;
 import at.gv.egiz.eaaf.core.api.idp.process.ExecutionContext;
 import at.gv.egiz.eaaf.core.exceptions.TaskExecutionException;
diff --git a/connector/src/main/java/at/asitplus/eidas/specific/connector/processes/tasks/GenerateCountrySelectionFrameTask.java b/connector/src/main/java/at/asitplus/eidas/specific/connector/processes/tasks/GenerateCountrySelectionFrameTask.java
index d3b8116a..e87979fb 100644
--- a/connector/src/main/java/at/asitplus/eidas/specific/connector/processes/tasks/GenerateCountrySelectionFrameTask.java
+++ b/connector/src/main/java/at/asitplus/eidas/specific/connector/processes/tasks/GenerateCountrySelectionFrameTask.java
@@ -29,9 +29,9 @@ import javax.servlet.http.HttpServletResponse;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
-import at.asitplus.eidas.specific.connector.MsConnectorEventCodes;
-import at.asitplus.eidas.specific.connector.MsEidasNodeConstants;
-import at.asitplus.eidas.specific.connector.gui.StaticGuiBuilderConfiguration;
+import at.asitplus.eidas.specific.core.MsConnectorEventCodes;
+import at.asitplus.eidas.specific.core.MsEidasNodeConstants;
+import at.asitplus.eidas.specific.core.gui.StaticGuiBuilderConfiguration;
 import at.gv.egiz.eaaf.core.api.gui.IGuiBuilderConfiguration;
 import at.gv.egiz.eaaf.core.api.gui.ISpringMvcGuiFormBuilder;
 import at.gv.egiz.eaaf.core.api.idp.IConfiguration;
diff --git a/connector/src/main/java/at/asitplus/eidas/specific/connector/provider/PvpEndPointCredentialProvider.java b/connector/src/main/java/at/asitplus/eidas/specific/connector/provider/PvpEndPointCredentialProvider.java
index 3a3e9664..98e88eff 100644
--- a/connector/src/main/java/at/asitplus/eidas/specific/connector/provider/PvpEndPointCredentialProvider.java
+++ b/connector/src/main/java/at/asitplus/eidas/specific/connector/provider/PvpEndPointCredentialProvider.java
@@ -25,7 +25,7 @@ package at.asitplus.eidas.specific.connector.provider;
 
 import org.springframework.beans.factory.annotation.Autowired;
 
-import at.asitplus.eidas.specific.connector.MsEidasNodeConstants;
+import at.asitplus.eidas.specific.core.MsEidasNodeConstants;
 import at.gv.egiz.eaaf.core.api.idp.IConfiguration;
 import at.gv.egiz.eaaf.core.exceptions.EaafConfigurationException;
 import at.gv.egiz.eaaf.core.impl.credential.KeyStoreConfiguration;
diff --git a/connector/src/main/java/at/asitplus/eidas/specific/connector/provider/PvpMetadataProvider.java b/connector/src/main/java/at/asitplus/eidas/specific/connector/provider/PvpMetadataProvider.java
index 8dbb74c7..6161c271 100644
--- a/connector/src/main/java/at/asitplus/eidas/specific/connector/provider/PvpMetadataProvider.java
+++ b/connector/src/main/java/at/asitplus/eidas/specific/connector/provider/PvpMetadataProvider.java
@@ -41,7 +41,7 @@ import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import at.asitplus.eidas.specific.connector.MsEidasNodeConstants;
+import at.asitplus.eidas.specific.core.MsEidasNodeConstants;
 import at.gv.egiz.eaaf.core.api.idp.IConfigurationWithSP;
 import at.gv.egiz.eaaf.core.api.idp.ISpConfiguration;
 import at.gv.egiz.eaaf.core.exceptions.EaafConfigurationException;
diff --git a/connector/src/main/java/at/asitplus/eidas/specific/connector/provider/StatusMessageProvider.java b/connector/src/main/java/at/asitplus/eidas/specific/connector/provider/StatusMessageProvider.java
deleted file mode 100644
index 5565bc63..00000000
--- a/connector/src/main/java/at/asitplus/eidas/specific/connector/provider/StatusMessageProvider.java
+++ /dev/null
@@ -1,182 +0,0 @@
-/*
- * Copyright 2018 A-SIT Plus GmbH
- * AT-specific eIDAS Connector has been developed in a cooperation between EGIZ,
- * A-SIT Plus GmbH, A-SIT, and Graz University of Technology.
- *
- * Licensed under the EUPL, Version 1.2 or - as soon they will be approved by
- * the European Commission - subsequent versions of the EUPL (the "License");
- * You may not use this work except in compliance with the License.
- * You may obtain a copy of the License at:
- * https://joinup.ec.europa.eu/news/understanding-eupl-v12
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" basis,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * This product combines work with different licenses. See the "NOTICE" text
- * file for details on the various modules and licenses.
- * The "NOTICE" text file is part of the distribution. Any derivative works
- * that you distribute must include a readable copy of the "NOTICE" text file.
-*/
-
-package at.asitplus.eidas.specific.connector.provider;
-
-import java.text.MessageFormat;
-import java.util.Locale;
-import java.util.MissingResourceException;
-import java.util.ResourceBundle;
-
-import org.apache.commons.lang3.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.context.MessageSource;
-import org.springframework.context.MessageSourceAware;
-import org.springframework.context.NoSuchMessageException;
-import org.springframework.context.i18n.LocaleContextHolder;
-import org.springframework.stereotype.Service;
-
-import at.gv.egiz.eaaf.core.api.IStatusMessenger;
-import at.gv.egiz.eaaf.core.exceptions.EaafException;
-import at.gv.egiz.eaaf.core.impl.logging.LogMessageProviderFactory;
-
-@Service("StatusMessageProvider")
-public class StatusMessageProvider implements IStatusMessenger, MessageSourceAware {
-  private static final Logger log = LoggerFactory.getLogger(StatusMessageProvider.class);
-
-  private static final String ERROR_MESSAGES_UNAVAILABLE =
-      "Error messages can NOT be load from application. Only errorCode: {0} is availabe";
-  private static final String ERROR_NO_MESSAGE = "No errormesseage for error with number.={0}";
-
-  private static final String ERROR_EXTERNALERROR_CODES_UNAVAILABLE =
-      "External error-codes can NOT be load from application. Only internal errorCode: {0} is availabe";
-  private static final String ERROR_NO_EXTERNALERROR_CODE =
-      "No external error for internal error with number.={0}";
-  private static final String MSG_WARN_NO_SOURCE = "MessageCode: {} is NOT SET for locale: {}";
-  private static final String MSG_INFO = "Use locale: {} as default";
-  
-  // external error codes
-  private static final String DEFAULT_EXTERNALERROR_RESOURCES = "properties/external_statuscodes_map";
-  private static final Locale DEFAULT_EXTERNALERROR_LOCALES = new Locale("en", "GB");
-  private ResourceBundle externalError = null;
-
-  //internal messanges
-  private MessageSource messageSource;
-
-  @Override
-  public String getMessageWithoutDefault(final String messageId, final Object[] parameters) {
-    if (messageSource == null) {
-      return null;
-
-    } else {
-      try {
-        final Locale locale = LocaleContextHolder.getLocale();
-        return messageSource.getMessage(messageId, parameters, locale);
-
-      } catch (final NoSuchMessageException e) {
-        log.info(MSG_WARN_NO_SOURCE, messageId, LocaleContextHolder.getLocale());
-        log.debug(MSG_INFO, Locale.ENGLISH);
-
-        try {
-          return messageSource.getMessage(messageId, parameters, Locale.ENGLISH);
-
-        } catch (final NoSuchMessageException e2) {
-          log.info(MSG_WARN_NO_SOURCE, messageId, Locale.ENGLISH);
-
-        }
-
-      } catch (final MissingResourceException e2) {
-        log.warn("No message source", e2);
-
-      }
-    }
-
-    return null;
-
-  }
-
-  @Override
-  public String getMessage(final String messageId, final Object[] parameters) {
-    if (messageSource == null) {
-      return MessageFormat.format(ERROR_MESSAGES_UNAVAILABLE, new Object[]{messageId});
-
-    } else {
-      try {
-        final Locale locale = LocaleContextHolder.getLocale();
-        return messageSource.getMessage(messageId, parameters, locale);
-
-      } catch (final NoSuchMessageException e) {
-        log.info(MSG_WARN_NO_SOURCE, messageId, LocaleContextHolder.getLocale());
-        log.debug(MSG_INFO, Locale.ENGLISH);
-
-        try {
-          return messageSource.getMessage(messageId, parameters, Locale.ENGLISH);
-
-        } catch (final NoSuchMessageException e2) {
-          return MessageFormat.format(ERROR_NO_MESSAGE, new Object[]{messageId});
-
-        }
-
-      } catch (final MissingResourceException e2) {
-        return MessageFormat.format(ERROR_NO_MESSAGE, new Object[]{messageId});
-
-      }
-    }
-  }
-  
-  @Override
-  public String getResponseErrorCode(Throwable throwable) {
-    String errorCode = IStatusMessenger.CODES_EXTERNAL_ERROR_GENERIC;
-    if (throwable instanceof EaafException) {
-      errorCode = ((EaafException) throwable).getErrorId();
-      
-    }
-        
-    return errorCode;
-
-  }
-
-  @Override
-  public String mapInternalErrorToExternalError(String intErrorCode) {
-    // initialize messages
-    if (externalError == null) {
-      this.externalError = ResourceBundle.getBundle(
-          DEFAULT_EXTERNALERROR_RESOURCES,
-          DEFAULT_EXTERNALERROR_LOCALES);
-
-    }
-
-    // create the message
-    if (externalError == null) {
-      log.warn(MessageFormat.format(ERROR_EXTERNALERROR_CODES_UNAVAILABLE, new Object[] { intErrorCode }));
-      return IStatusMessenger.CODES_EXTERNAL_ERROR_GENERIC;
-
-    } else {
-      try {
-        if (StringUtils.isNotEmpty(intErrorCode)) {
-          return externalError.getString(intErrorCode);
-
-        } else {
-          return IStatusMessenger.CODES_EXTERNAL_ERROR_GENERIC;
-
-        }
-
-      } catch (final MissingResourceException e2) {
-        log.info(MessageFormat.format(ERROR_NO_EXTERNALERROR_CODE, new Object[] { intErrorCode }));
-        return IStatusMessenger.CODES_EXTERNAL_ERROR_GENERIC;
-
-      }
-    }
-  }
-
-  @Override
-  public void setMessageSource(MessageSource messageSource) {
-    this.messageSource = messageSource;
-
-    log.info("Injecting 'StatusMessanger' into 'LogMessageProviderFactory'");
-    LogMessageProviderFactory.setStatusMessager(this);
-    
-  }
-
-}
diff --git a/connector/src/main/java/at/asitplus/eidas/specific/connector/storage/CacheWithEidasBackend.java b/connector/src/main/java/at/asitplus/eidas/specific/connector/storage/CacheWithEidasBackend.java
deleted file mode 100644
index 87ebda92..00000000
--- a/connector/src/main/java/at/asitplus/eidas/specific/connector/storage/CacheWithEidasBackend.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright 2018 A-SIT Plus GmbH
- * AT-specific eIDAS Connector has been developed in a cooperation between EGIZ,
- * A-SIT Plus GmbH, A-SIT, and Graz University of Technology.
- *
- * Licensed under the EUPL, Version 1.2 or - as soon they will be approved by
- * the European Commission - subsequent versions of the EUPL (the "License");
- * You may not use this work except in compliance with the License.
- * You may obtain a copy of the License at:
- * https://joinup.ec.europa.eu/news/understanding-eupl-v12
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" basis,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * This product combines work with different licenses. See the "NOTICE" text
- * file for details on the various modules and licenses.
- * The "NOTICE" text file is part of the distribution. Any derivative works
- * that you distribute must include a readable copy of the "NOTICE" text file.
-*/
-
-package at.asitplus.eidas.specific.connector.storage;
-
-import eu.eidas.auth.commons.cache.ConcurrentCacheService;
-import eu.eidas.auth.commons.tx.AbstractCache;
-
-public class CacheWithEidasBackend extends AbstractCache<String, TransactionStoreElement> {
-
-  protected CacheWithEidasBackend(ConcurrentCacheService concurrentMapService) {
-    super(concurrentMapService);
-  }
-  
-}
diff --git a/connector/src/main/java/at/asitplus/eidas/specific/connector/storage/EidasCacheTransactionStoreDecorator.java b/connector/src/main/java/at/asitplus/eidas/specific/connector/storage/EidasCacheTransactionStoreDecorator.java
deleted file mode 100644
index 634b3797..00000000
--- a/connector/src/main/java/at/asitplus/eidas/specific/connector/storage/EidasCacheTransactionStoreDecorator.java
+++ /dev/null
@@ -1,180 +0,0 @@
-/*
- * Copyright 2018 A-SIT Plus GmbH
- * AT-specific eIDAS Connector has been developed in a cooperation between EGIZ,
- * A-SIT Plus GmbH, A-SIT, and Graz University of Technology.
- *
- * Licensed under the EUPL, Version 1.2 or - as soon they will be approved by
- * the European Commission - subsequent versions of the EUPL (the "License");
- * You may not use this work except in compliance with the License.
- * You may obtain a copy of the License at:
- * https://joinup.ec.europa.eu/news/understanding-eupl-v12
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" basis,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * This product combines work with different licenses. See the "NOTICE" text
- * file for details on the various modules and licenses.
- * The "NOTICE" text file is part of the distribution. Any derivative works
- * that you distribute must include a readable copy of the "NOTICE" text file.
-*/
-
-package at.asitplus.eidas.specific.connector.storage;
-
-import java.util.Arrays;
-import java.util.Date;
-import java.util.List;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.actuate.health.Health;
-import org.springframework.boot.actuate.health.HealthIndicator;
-
-import at.gv.egiz.eaaf.core.api.storage.ITransactionStorage;
-import at.gv.egiz.eaaf.core.exceptions.EaafException;
-import at.gv.egiz.eaaf.core.exceptions.EaafStorageException;
-import at.gv.egiz.eaaf.core.impl.utils.Random;
-
-public class EidasCacheTransactionStoreDecorator implements ITransactionStorage, HealthIndicator {
-  private static final Logger log = LoggerFactory.getLogger(EidasCacheTransactionStoreDecorator.class);
-
-  @Autowired(required = true)
-  private CacheWithEidasBackend storage;
-
-  @Override
-  public Health health() {
-    try {
-      final String key = Random.nextHexRandom16();
-      final String value = Random.nextHexRandom16();
-
-      this.put(key, value, -1);
-      final String result = this.get(key, String.class);
-      this.remove(key);
-
-      if (result != null && result.equals(value)) {
-        return Health.up().build();
-      
-      } else {
-        log.warn("Montioring: TestValue: " + value + " does NOT match in Storage test");
-        return Health.down().build();
-        
-      }
-
-    } catch (final EaafException e) {
-      log.warn("Montioring: Can not read/write to storage.", e);
-      return Health.down().down(e).build();
-      
-    }
-  }
-  
-  @Override
-  public void changeKey(String oldKey, String newKey, Object value) throws EaafException {
-    if (containsKey(oldKey)) {
-      final TransactionStoreElement el = storage.get(oldKey);
-      el.setKey(newKey);
-      el.setData(value);
-      storage.put(newKey, el);
-      boolean delResult = storage.remove(oldKey);
-      log.trace("Object: {} removed from cache: {}", oldKey, delResult);
-
-    } else {
-      throw new EaafStorageException("No element in TransactionStorage with key: " + oldKey);
-    }
-
-  }
-
-  @Override
-  public List<String> clean(Date now, long dataTimeOut) {
-    log.info("Clean is NOT implemented, because its not needed");
-    return Arrays.asList();
-
-  }
-
-  @Override
-  public boolean containsKey(String key) {
-    return storage.containsKey(key);
-
-  }
-
-  @Override
-  public Object get(String key) throws EaafException {
-    if (key != null && containsKey(key)) {
-      final TransactionStoreElement element = storage.get(key);
-      return element.getData();
-
-    } else {
-      return null;
-    }
-  }
-
-  @Override
-  public <T> T get(String key, Class<T> type) throws EaafException {
-    return get(key, type, -1);
-
-  }
-
-  @Override
-  public <T> T get(String key, Class<T> type, long dataTimeOut) throws EaafException {
-    if (key != null && containsKey(key)) {
-      final TransactionStoreElement value = storage.get(key);
-
-      if (dataTimeOut > -1) {
-        final long now = new Date().getTime();
-        if (now - value.getCreated().getTime() > dataTimeOut) {
-          log.info("Transaction-Data with key: " + key + " is out of time.");
-          throw new EaafStorageException("Transaction-Data with key: " + key + " is out of time.");
-
-        }
-      }
-
-      if (type.isAssignableFrom(value.getData().getClass())) {
-        return (T) value.getData();
-
-      } else {
-        log.warn("Can NOT cast '" + value.getClass() + "' to '" + type + "'");
-      }
-
-    }
-
-    return null;
-  }
-
-  @Override
-  public Object getRaw(String key) throws EaafException {
-    return storage.get(key);
-
-  }
-
-  @Override
-  public void put(String key, Object value, int dataTimeOut) throws EaafException {
-    final TransactionStoreElement element = new TransactionStoreElement();
-    element.setKey(key);
-    element.setData(value);
-    storage.put(key, element);
-
-  }
-
-  @Override
-  public void putRaw(String key, Object value) throws EaafException {
-    if (value instanceof TransactionStoreElement) {
-      storage.put(((TransactionStoreElement) value).getKey(), (TransactionStoreElement) value);
-    } else {
-      log.info(value.getClass().getName() + " is NOT a RAW element of " + ITransactionStorage.class
-          .getName());
-    }
-
-  }
-
-  @Override
-  public void remove(String key) {
-    if (containsKey(key)) {
-      log.trace("Remove element with key: " + key + " from " + ITransactionStorage.class.getName());
-      boolean delResult = storage.remove(key);
-      log.trace("Object: {} removed from cache: {}", key, delResult);
-
-    }
-  }
-}
diff --git a/connector/src/main/java/at/asitplus/eidas/specific/connector/storage/SimpleInMemoryTransactionStorage.java b/connector/src/main/java/at/asitplus/eidas/specific/connector/storage/SimpleInMemoryTransactionStorage.java
deleted file mode 100644
index 3bda2932..00000000
--- a/connector/src/main/java/at/asitplus/eidas/specific/connector/storage/SimpleInMemoryTransactionStorage.java
+++ /dev/null
@@ -1,169 +0,0 @@
-/*
- * Copyright 2018 A-SIT Plus GmbH
- * AT-specific eIDAS Connector has been developed in a cooperation between EGIZ,
- * A-SIT Plus GmbH, A-SIT, and Graz University of Technology.
- *
- * Licensed under the EUPL, Version 1.2 or - as soon they will be approved by
- * the European Commission - subsequent versions of the EUPL (the "License");
- * You may not use this work except in compliance with the License.
- * You may obtain a copy of the License at:
- * https://joinup.ec.europa.eu/news/understanding-eupl-v12
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" basis,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * This product combines work with different licenses. See the "NOTICE" text
- * file for details on the various modules and licenses.
- * The "NOTICE" text file is part of the distribution. Any derivative works
- * that you distribute must include a readable copy of the "NOTICE" text file.
-*/
-
-package at.asitplus.eidas.specific.connector.storage;
-
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.concurrent.ConcurrentHashMap;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import at.gv.egiz.eaaf.core.api.storage.ITransactionStorage;
-import at.gv.egiz.eaaf.core.exceptions.EaafException;
-import at.gv.egiz.eaaf.core.exceptions.EaafStorageException;
-
-public class SimpleInMemoryTransactionStorage implements ITransactionStorage {
-  private static final Logger log = LoggerFactory.getLogger(SimpleInMemoryTransactionStorage.class);
-
-  private final Map<String, TransactionStoreElement> storage =
-      new ConcurrentHashMap<>();
-
-  @Override
-  public void changeKey(String oldKey, String newKey, Object value) throws EaafException {
-    if (containsKey(oldKey)) {
-      final TransactionStoreElement el = storage.get(oldKey);
-      el.setKey(newKey);
-      storage.put(newKey, el);
-      storage.remove(oldKey);
-
-    } else {
-      throw new EaafStorageException("No element in TransactionStorage with key: " + oldKey);
-    }
-
-  }
-
-  @Override
-  public List<String> clean(Date now, long dataTimeOut) {
-    final List<String> result = new ArrayList<>();
-    final Iterator<Entry<String, TransactionStoreElement>> iterator = storage.entrySet().iterator();
-    while (iterator.hasNext()) {
-      final Entry<String, TransactionStoreElement> key = iterator.next();
-      synchronized (storage) {
-        if (storage.containsKey(key.getKey())) {
-          final TransactionStoreElement element = key.getValue();
-          if (now.getTime() - element.getCreated().getTime() > dataTimeOut) {
-            result.add(key.getKey());
-          }
-        }
-      }
-    }
-
-    return result;
-
-  }
-
-  @Override
-  public boolean containsKey(String key) {
-    if (key != null) {
-      return storage.containsKey(key);
-    } else {
-      return false;
-    }
-
-  }
-
-  @Override
-  public Object get(String key) throws EaafException {
-    if (key != null && containsKey(key)) {
-      final TransactionStoreElement element = storage.get(key);
-      return element.getData();
-
-    } else {
-      return null;
-    }
-  }
-
-  @Override
-  public <T> T get(String key, Class<T> type) throws EaafException {
-    return get(key, type, -1);
-
-  }
-
-  @Override
-  public <T> T get(String key, Class<T> type, long dataTimeOut) throws EaafException {
-    if (key != null && containsKey(key)) {
-      final TransactionStoreElement value = storage.get(key);
-
-      if (dataTimeOut > -1) {
-        final long now = new Date().getTime();
-        if (now - value.getCreated().getTime() > dataTimeOut) {
-          log.info("Transaction-Data with key: " + key + " is out of time.");
-          throw new EaafStorageException("Transaction-Data with key: " + key + " is out of time.");
-
-        }
-      }
-
-      if (type.isAssignableFrom(value.getData().getClass())) {
-        return (T) value.getData();
-
-      } else {
-        log.warn("Can NOT cast '" + value.getClass() + "' to '" + type + "'");
-      }
-
-    }
-
-    return null;
-  }
-
-  @Override
-  public Object getRaw(String key) throws EaafException {
-    return storage.get(key);
-
-  }
-
-  @Override
-  public void put(String key, Object value, int dataTimeOut) throws EaafException {
-    final TransactionStoreElement element = new TransactionStoreElement();
-    element.setKey(key);
-    element.setData(value);
-    storage.put(key, element);
-
-  }
-
-  @Override
-  public void putRaw(String key, Object value) throws EaafException {
-    if (value instanceof TransactionStoreElement) {
-      storage.put(((TransactionStoreElement) value).getKey(), (TransactionStoreElement) value);
-    } else {
-      log.info(value.getClass().getName() + " is NOT a RAW element of " + ITransactionStorage.class
-          .getName());
-    }
-
-  }
-
-  @Override
-  public void remove(String key) {
-    if (containsKey(key)) {
-      log.debug("Remove element with key: " + key + " from " + ITransactionStorage.class.getName());
-      storage.remove(key);
-
-    }
-  }
-
-}
diff --git a/connector/src/main/java/at/asitplus/eidas/specific/connector/storage/TransactionStoreElement.java b/connector/src/main/java/at/asitplus/eidas/specific/connector/storage/TransactionStoreElement.java
deleted file mode 100644
index 4e9e737f..00000000
--- a/connector/src/main/java/at/asitplus/eidas/specific/connector/storage/TransactionStoreElement.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Copyright 2018 A-SIT Plus GmbH
- * AT-specific eIDAS Connector has been developed in a cooperation between EGIZ,
- * A-SIT Plus GmbH, A-SIT, and Graz University of Technology.
- *
- * Licensed under the EUPL, Version 1.2 or - as soon they will be approved by
- * the European Commission - subsequent versions of the EUPL (the "License");
- * You may not use this work except in compliance with the License.
- * You may obtain a copy of the License at:
- * https://joinup.ec.europa.eu/news/understanding-eupl-v12
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" basis,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * This product combines work with different licenses. See the "NOTICE" text
- * file for details on the various modules and licenses.
- * The "NOTICE" text file is part of the distribution. Any derivative works
- * that you distribute must include a readable copy of the "NOTICE" text file.
-*/
-
-package at.asitplus.eidas.specific.connector.storage;
-
-import java.io.Serializable;
-import java.util.Date;
-
-public class TransactionStoreElement implements Serializable {
-
-  private static final long serialVersionUID = 1L;
-  private String key = null;
-  private Object data = null;
-  private Date created;
-
-  public String getKey() {
-    return key;
-  }
-
-  public void setKey(String key) {
-    this.key = key;
-  }
-
-  public Object getData() {
-    return data;
-  }
-
-  public void setData(Object data) {
-    this.data = data;
-  }
-
-  public Date getCreated() {
-    return copyOrNull(created);
-  }
-
-  public void setCreated(Date created) {
-    this.created = copyOrNull(created);
-  }
-
-  private Date copyOrNull(Date in) {
-    if (in != null) {
-      return new Date(in.getTime());
-      
-    } 
-    
-    return null;
-      
-  }
-  
-}
diff --git a/connector/src/main/java/at/asitplus/eidas/specific/connector/verification/AuthnRequestValidator.java b/connector/src/main/java/at/asitplus/eidas/specific/connector/verification/AuthnRequestValidator.java
index e4c68004..23702264 100644
--- a/connector/src/main/java/at/asitplus/eidas/specific/connector/verification/AuthnRequestValidator.java
+++ b/connector/src/main/java/at/asitplus/eidas/specific/connector/verification/AuthnRequestValidator.java
@@ -42,8 +42,8 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 
-import at.asitplus.eidas.specific.connector.MsEidasNodeConstants;
-import at.asitplus.eidas.specific.connector.config.ServiceProviderConfiguration;
+import at.asitplus.eidas.specific.core.MsEidasNodeConstants;
+import at.asitplus.eidas.specific.core.config.ServiceProviderConfiguration;
 import at.gv.egiz.eaaf.core.api.IRequest;
 import at.gv.egiz.eaaf.core.api.data.EaafConstants;
 import at.gv.egiz.eaaf.core.api.data.ExtendedPvpAttributeDefinitions;
diff --git a/connector/src/main/resources/applicationContext.xml b/connector/src/main/resources/applicationContext.xml
index 15ce0a55..ec8e79f4 100644
--- a/connector/src/main/resources/applicationContext.xml
+++ b/connector/src/main/resources/applicationContext.xml
@@ -15,16 +15,10 @@
 
   <context:annotation-config />
   <context:component-scan base-package="at.gv.egiz.eaaf.utils.springboot.ajp"/>
-
-<!--
-  <context:annotation-config />
-  <mvc:annotation-driven />
-  <mvc:default-servlet-handler />
--->
     
   <mvc:interceptors>
     <bean
-      class="at.asitplus.eidas.specific.connector.interceptor.WebFrontEndSecurityInterceptor" />
+      class="at.asitplus.eidas.specific.core.interceptor.WebFrontEndSecurityInterceptor" />
     <bean
       class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
       <property name="paramName" value="lang" />
@@ -32,22 +26,17 @@
   </mvc:interceptors>
 
   <bean id="springContextClosingHandler"
-        class="at.asitplus.eidas.specific.connector.SpringContextCloseHandler" />
-
-<!-- 
-  <context:property-placeholder
-    location="${eidas.ms.configuration}" />
-  -->
+        class="at.asitplus.eidas.specific.core.SpringContextCloseHandler" />
 
   <beans profile="deprecatedConfig">
   <bean id="BasicMSSpecificNodeConfig"
-    class="at.asitplus.eidas.specific.connector.config.BasicConfigurationProvider">
+    class="at.asitplus.eidas.specific.core.config.BasicConfigurationProvider">
     <constructor-arg value="#{systemProperties['eidas.ms.configuration']}" />
   </bean>
   </beans>
   <beans profile="!deprecatedConfig">
     <bean id="springBootMsSpecificNodeConfig"
-          class="at.asitplus.eidas.specific.connector.config.SpringBootBasicConfigurationProvider" />
+          class="at.asitplus.eidas.specific.core.config.SpringBootBasicConfigurationProvider" />
           
   </beans>
 
diff --git a/connector/src/main/resources/specific_eIDAS_connector.beans.xml b/connector/src/main/resources/specific_eIDAS_connector.beans.xml
index 34fd088b..7ac6236c 100644
--- a/connector/src/main/resources/specific_eIDAS_connector.beans.xml
+++ b/connector/src/main/resources/specific_eIDAS_connector.beans.xml
@@ -11,10 +11,8 @@
     http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
     http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">
 
-  <import resource="common_gui.beans.xml"/>
+  <import resource="specific_eIDAS_core.beans.xml"/>
 
-  <bean id="WebResourceConfiguration"
-        class="at.asitplus.eidas.specific.connector.config.StaticResourceConfiguration" />
 
   <bean id="processEngineSignalController"
         class="at.asitplus.eidas.specific.connector.controller.ProcessEngineSignalController" />
@@ -24,15 +22,6 @@
     <property name="pvpIdpCredentials" ref="PVPEndPointCredentialProvider" />
   </bean>
 
-  <bean id="eidasNodeMetadata"
-        class="at.asitplus.eidas.specific.connector.health.EidasNodeMetadataHealthIndicator" />
-
-  <bean id="AuthenticationManager"
-        class="at.asitplus.eidas.specific.connector.auth.AuthenticationManager" />
-
-  <bean id="AuthenticationDataBuilder"
-        class="at.asitplus.eidas.specific.connector.builder.AuthenticationDataBuilder" />
-
   <bean id="PVPEndPointConfiguration"
         class="at.asitplus.eidas.specific.connector.config.PvpEndPointConfiguration" />
 
@@ -66,44 +55,12 @@
     <property name="metadataProvider" ref="PVPMetadataProvider" />
   </bean>
 
-  <bean id="eaafProtocolAuthenticationService"
-        class="at.gv.egiz.eaaf.core.impl.idp.auth.services.ProtocolAuthenticationService">
-    <property name="guiBuilder" ref="mvcGUIBuilderImpl" />
-  </bean>
-
-  <bean id="securePendingRequestIdGeneration"
-        class="at.gv.egiz.eaaf.core.impl.utils.SecurePendingRequestIdGenerationStrategy" />
-
   <bean id="PVPMetadataProvider"
         class="at.asitplus.eidas.specific.connector.provider.PvpMetadataProvider" />
 
   <bean id="PVPSubjectNameGenerator"
         class="at.asitplus.eidas.specific.connector.builder.PvpSubjectNameGenerator" />
 
-  <bean id="LoALevelMapper"
-        class="at.asitplus.eidas.specific.connector.mapper.LoALevelMapper" />
-
-  <bean id="GUIBuilderConfigurationFactory"
-        class="at.asitplus.eidas.specific.connector.gui.GuiBuilderConfigurationFactory" />
-
-  <bean id="velocityGUIBuilderImpl"
-        class="at.asitplus.eidas.specific.connector.gui.DefaultVelocityGuiBuilderImpl" />
-
-  <bean id="mvcGUIBuilderImpl"
-        class="at.gv.egiz.eaaf.core.impl.gui.builder.SpringMvcGuiFormBuilderImpl" />
-
-  <bean id="StatusMessageProvider"
-        class="at.asitplus.eidas.specific.connector.provider.StatusMessageProvider" />
-
-  <bean id="eidasRevisionLogger"
-        class="at.asitplus.eidas.specific.connector.logger.RevisionLogger" />
-
-  <bean id="eidasStatisticLogger"
-        class="at.asitplus.eidas.specific.connector.logger.StatisticLogger" />
-
-  <bean id="defaultErrorHandler"
-        class="at.gv.egiz.eaaf.core.impl.idp.auth.services.DefaultErrorService"/>
-  
 
   <!-- Tasks -->
   <bean id="GenerateCountrySelectionFrameTask"
diff --git a/connector/src/main/resources/specific_eIDAS_connector.storage.beans.xml b/connector/src/main/resources/specific_eIDAS_connector.storage.beans.xml
deleted file mode 100644
index 2e4d1742..00000000
--- a/connector/src/main/resources/specific_eIDAS_connector.storage.beans.xml
+++ /dev/null
@@ -1,52 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<beans xmlns="http://www.springframework.org/schema/beans"
-  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xmlns:context="http://www.springframework.org/schema/context"
-  xmlns:tx="http://www.springframework.org/schema/tx"
-  xmlns:aop="http://www.springframework.org/schema/aop"
-  xmlns:mvc="http://www.springframework.org/schema/mvc"
-  xsi:schemaLocation="http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd
-    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
-    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd
-    http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
-    http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">
-
-  <import
-    resource="classpath:specificCommunicationDefinitionApplicationContext.xml" />
-
-  <!-- <bean id="SimpleInMemoryTransactionStorage" class="at.asitplus.eidas.specific.connector.storage.SimpleInMemoryTransactionStorage" 
-    /> -->
-
-  <bean id="eIDASCacheTransactionStoreDecorator"
-    class="at.asitplus.eidas.specific.connector.storage.EidasCacheTransactionStoreDecorator" />
-
-  <bean id="CacheWitheIDASBackend"
-    class="at.asitplus.eidas.specific.connector.storage.CacheWithEidasBackend">
-    <constructor-arg ref="msNodeCacheImpl" />
-  </bean>
-
-  <bean id="msNodeCacheImpl"
-    class="eu.eidas.auth.cache.ConcurrentCacheServiceIgniteSpecificCommunicationImpl">
-    <property name="igniteInstanceInitializerSpecificCommunication" ref="eidasIgniteInstanceInitializerSpecificCommunication" />
-    <property name="cacheName" value="msConnectorCache" />
-  </bean>
-
-  <bean id="IgniteClusterState"
-        class="at.asitplus.eidas.specific.connector.health.IgniteClusterHealthIndicator">
-    <property name="igniteInstanceInitializerSpecificCommunication" ref="eidasIgniteInstanceInitializerSpecificCommunication" />        
-  </bean>
-
-
-  <!-- bean id="defaultHazelcastInstance" class="java.lang.String"> <constructor-arg 
-    value="eidasHazelcastInstance"/> </bean> <bean id="eidasHazelcastInstanceInitializer" 
-    class=" eu.eidas.auth.commons.cache.HazelcastInstanceInitializer" init-method="initializeInstance" 
-    lazy-init="true"> <property name="hazelcastConfigfileName" value="#{eidasConfigRepository}hazelcast.xml"/> 
-    <property name="hazelcastInstanceName" ref="defaultHazelcastInstance"/> </bean> 
-    <bean id="springServiceCMapspecificMSSpCorProviderProd" class="eu.eidas.auth.commons.cache.ConcurrentMapServiceDistributedImpl" 
-    lazy-init="true"> <property name="hazelcastInstanceInitializer" ref="eidasHazelcastInstanceInitializer"/> 
-    <property name="cacheName" value="specificSpRequestCorrelationCacheService"/> 
-    </bean> <bean id="springServiceCMapspecificMSSpCorProviderDev" class="eu.eidas.auth.commons.cache.ConcurrentMapServiceDefaultImpl"> 
-    <property name="expireAfterAccess" value="1800"/> <property name="maximumSize" 
-    value="1000"/> </bean -->
-
-</beans>
\ No newline at end of file
diff --git a/connector/src/test/java/at/asitplus/eidas/specific/connector/test/attributes/AuthBlockAttributeBuilderTest.java b/connector/src/test/java/at/asitplus/eidas/specific/connector/test/attributes/AuthBlockAttributeBuilderTest.java
index 5c0a1420..6c6276c3 100644
--- a/connector/src/test/java/at/asitplus/eidas/specific/connector/test/attributes/AuthBlockAttributeBuilderTest.java
+++ b/connector/src/test/java/at/asitplus/eidas/specific/connector/test/attributes/AuthBlockAttributeBuilderTest.java
@@ -14,7 +14,7 @@ import org.springframework.test.context.ContextConfiguration;
 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
 
 import at.asitplus.eidas.specific.connector.attributes.AuthBlockAttributeBuilder;
-import at.asitplus.eidas.specific.modules.auth.eidas.v2.Constants;
+import at.asitplus.eidas.specific.core.MsEidasNodeConstants;
 import at.gv.egiz.eaaf.core.api.data.ExtendedPvpAttributeDefinitions;
 import at.gv.egiz.eaaf.core.api.idp.IAttributeBuilder;
 import at.gv.egiz.eaaf.core.api.idp.IAuthData;
@@ -62,7 +62,7 @@ public class AuthBlockAttributeBuilderTest extends AbstractAttributeBuilderTest
     log.info("starting: " + mTestName);
     try {
       final IAuthData authData = buildAuthData();
-      ((AuthenticationData) authData).setGenericData(Constants.SZR_AUTHBLOCK, JSW);
+      ((AuthenticationData) authData).setGenericData(MsEidasNodeConstants.AUTH_DATA_SZR_AUTHBLOCK, JSW);
 
       final String value = attrBuilde.build(spConfig, authData, gen);
 
@@ -80,7 +80,7 @@ public class AuthBlockAttributeBuilderTest extends AbstractAttributeBuilderTest
     log.info("starting: " + mTestName);
     try {
       final IAuthData authData = buildAuthData();
-      ((AuthenticationData) authData).setGenericData(Constants.SZR_AUTHBLOCK, null);
+      ((AuthenticationData) authData).setGenericData(MsEidasNodeConstants.AUTH_DATA_SZR_AUTHBLOCK, null);
 
       final String value = attrBuilde.build(spConfig, authData, gen);
       Assert.fail("Attr. Builder provide no 'UnavailableAttributeException'");
@@ -99,7 +99,7 @@ public class AuthBlockAttributeBuilderTest extends AbstractAttributeBuilderTest
     log.info("starting: " + mTestName);
     try {
       final IAuthData authData = buildAuthData();
-      ((AuthenticationData) authData).setGenericData(Constants.SZR_AUTHBLOCK, "");
+      ((AuthenticationData) authData).setGenericData(MsEidasNodeConstants.AUTH_DATA_SZR_AUTHBLOCK, "");
 
       final String value = attrBuilde.build(spConfig, authData, gen);
       Assert.fail("Attr. Builder provide no 'UnavailableAttributeException'");
diff --git a/connector/src/test/java/at/asitplus/eidas/specific/connector/test/attributes/EidasBindAttributeBuilderTest.java b/connector/src/test/java/at/asitplus/eidas/specific/connector/test/attributes/EidasBindAttributeBuilderTest.java
index 9a2c6cdc..969a22fb 100644
--- a/connector/src/test/java/at/asitplus/eidas/specific/connector/test/attributes/EidasBindAttributeBuilderTest.java
+++ b/connector/src/test/java/at/asitplus/eidas/specific/connector/test/attributes/EidasBindAttributeBuilderTest.java
@@ -1,7 +1,5 @@
 package at.asitplus.eidas.specific.connector.test.attributes;
 
-import static at.asitplus.eidas.specific.modules.auth.eidas.v2.Constants.EIDAS_BIND;
-
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Rule;
@@ -12,6 +10,7 @@ import org.springframework.test.context.ContextConfiguration;
 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
 
 import at.asitplus.eidas.specific.connector.attributes.EidasBindAttributeBuilder;
+import at.asitplus.eidas.specific.core.MsEidasNodeConstants;
 import at.gv.egiz.eaaf.core.api.data.ExtendedPvpAttributeDefinitions;
 import at.gv.egiz.eaaf.core.api.idp.IAttributeBuilder;
 import at.gv.egiz.eaaf.core.api.idp.IAuthData;
@@ -54,7 +53,7 @@ public class EidasBindAttributeBuilderTest extends AbstractAttributeBuilderTest
     log.info("starting: " + mTestName);
     try {
       final IAuthData authData = buildAuthData();
-      ((AuthenticationData) authData).setGenericData(EIDAS_BIND, "vuG8w29GT0");
+      ((AuthenticationData) authData).setGenericData(MsEidasNodeConstants.AUTH_DATA_EIDAS_BIND, "vuG8w29GT0");
 
       final String value = attrBuilde.build(spConfig, authData, gen);
 
@@ -70,7 +69,7 @@ public class EidasBindAttributeBuilderTest extends AbstractAttributeBuilderTest
     log.info("starting: " + mTestName);
     try {
       final IAuthData authData = buildAuthData();
-      ((AuthenticationData) authData).setGenericData(EIDAS_BIND, null);
+      ((AuthenticationData) authData).setGenericData(MsEidasNodeConstants.AUTH_DATA_EIDAS_BIND, null);
 
       final String value = attrBuilde.build(spConfig, authData, gen);
       Assert.fail("Attr. Builder provide no 'UnavailableAttributeException'");
@@ -89,7 +88,7 @@ public class EidasBindAttributeBuilderTest extends AbstractAttributeBuilderTest
     log.info("starting: " + mTestName);
     try {
       final IAuthData authData = buildAuthData();
-      ((AuthenticationData) authData).setGenericData(EIDAS_BIND, "");
+      ((AuthenticationData) authData).setGenericData(MsEidasNodeConstants.AUTH_DATA_EIDAS_BIND, "");
 
       final String value = attrBuilde.build(spConfig, authData, gen);
       Assert.fail("Attr. Builder provide no 'UnavailableAttributeException'");
diff --git a/connector/src/test/java/at/asitplus/eidas/specific/connector/test/config/BasicConfigurationTest.java b/connector/src/test/java/at/asitplus/eidas/specific/connector/test/config/BasicConfigurationTest.java
index 80307ea2..f9a43b52 100644
--- a/connector/src/test/java/at/asitplus/eidas/specific/connector/test/config/BasicConfigurationTest.java
+++ b/connector/src/test/java/at/asitplus/eidas/specific/connector/test/config/BasicConfigurationTest.java
@@ -17,7 +17,7 @@ import org.springframework.test.context.ContextConfiguration;
 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
 import org.springframework.test.context.web.WebAppConfiguration;
 
-import at.asitplus.eidas.specific.connector.config.ServiceProviderConfiguration;
+import at.asitplus.eidas.specific.core.config.ServiceProviderConfiguration;
 import at.gv.egiz.eaaf.core.api.data.EaafConstants;
 import at.gv.egiz.eaaf.core.api.idp.IConfigurationWithSP;
 import at.gv.egiz.eaaf.core.api.idp.ISpConfiguration;
@@ -28,7 +28,7 @@ import net.shibboleth.utilities.java.support.component.ComponentInitializationEx
 @RunWith(SpringJUnit4ClassRunner.class)
 @ContextConfiguration({
     "/applicationContext.xml",
-    "/specific_eIDAS_connector.beans.xml",
+    "/spring/SpringTest_connector.beans.xml",
     "/eaaf_core.beans.xml",
     "/eaaf_pvp.beans.xml",
     "/eaaf_pvp_idp.beans.xml",
diff --git a/connector/src/test/java/at/asitplus/eidas/specific/connector/test/controller/ProcessEngineSignalControllerTest.java b/connector/src/test/java/at/asitplus/eidas/specific/connector/test/controller/ProcessEngineSignalControllerTest.java
index 5b612036..499c5937 100644
--- a/connector/src/test/java/at/asitplus/eidas/specific/connector/test/controller/ProcessEngineSignalControllerTest.java
+++ b/connector/src/test/java/at/asitplus/eidas/specific/connector/test/controller/ProcessEngineSignalControllerTest.java
@@ -25,7 +25,7 @@ import at.gv.egiz.eaaf.core.exceptions.EaafStorageException;
 @RunWith(SpringJUnit4ClassRunner.class)
 @ContextConfiguration({
     "/applicationContext.xml",
-    "/specific_eIDAS_connector.beans.xml",
+    "/spring/SpringTest_connector.beans.xml",
     "/eaaf_core.beans.xml",
     "/eaaf_pvp.beans.xml",
     "/eaaf_pvp_idp.beans.xml",
diff --git a/connector/src/test/java/at/asitplus/eidas/specific/connector/test/health/EidasNodeMetadataHealthIndicatorNoEndpointTest.java b/connector/src/test/java/at/asitplus/eidas/specific/connector/test/health/EidasNodeMetadataHealthIndicatorNoEndpointTest.java
deleted file mode 100644
index b04a5bdb..00000000
--- a/connector/src/test/java/at/asitplus/eidas/specific/connector/test/health/EidasNodeMetadataHealthIndicatorNoEndpointTest.java
+++ /dev/null
@@ -1,70 +0,0 @@
-package at.asitplus.eidas.specific.connector.test.health;
-
-import java.io.IOException;
-
-import org.apache.commons.io.IOUtils;
-import org.junit.AfterClass;
-import org.junit.Assert;
-import org.junit.BeforeClass;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.actuate.health.Health;
-import org.springframework.http.MediaType;
-import org.springframework.test.context.ContextConfiguration;
-import org.springframework.test.context.TestPropertySource;
-import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
-import org.springframework.test.context.web.WebAppConfiguration;
-
-import at.asitplus.eidas.specific.connector.health.EidasNodeMetadataHealthIndicator;
-import okhttp3.mockwebserver.MockResponse;
-import okhttp3.mockwebserver.MockWebServer;
-
-@RunWith(SpringJUnit4ClassRunner.class)
-@ContextConfiguration({
-    "/spring/SpringTest-context_healthcheck.xml" })
-@TestPropertySource(locations = {"classpath:/config/junit_config_2_springboot.properties"})
-@WebAppConfiguration
-public class EidasNodeMetadataHealthIndicatorNoEndpointTest {
- 
-  @Autowired EidasNodeMetadataHealthIndicator health;
-  
-  private static MockWebServer mockWebServer = null;
- 
-  /**
-   * Testclass initializer.
-   *
-   * @throws IOException In case of an error
-   */
-  @BeforeClass
-  public static void classInitializer() throws IOException {
-    mockWebServer = new MockWebServer();
-    mockWebServer.start(40900);
-    mockWebServer.url("/mockup");
-
-  }
-
-  @AfterClass
-  public static void resetTestEnviroment() throws NoSuchFieldException, SecurityException,
-      IllegalArgumentException, IllegalAccessException, IOException {
-    mockWebServer.shutdown();
-
-  }
-    
-  @Test
-  public void noEndpointInConfiguration() throws IOException {
-    //set-up status
-    mockWebServer.enqueue(new MockResponse().setResponseCode(200)
-        .setBody(IOUtils.toString(EidasNodeMetadataHealthIndicatorNoEndpointTest.class
-            .getResourceAsStream("/config/log4j.properties"), "UTF-8"))
-        .setHeader("Content-Type", MediaType.APPLICATION_XML));
-
-    //perform test
-    Health status = health.health();
-    
-    //validate state
-    Assert.assertEquals("wrong healthState", Health.unknown().build().getStatus(), status.getStatus());
-    
-  }
-  
-}
diff --git a/connector/src/test/java/at/asitplus/eidas/specific/connector/test/health/EidasNodeMetadataHealthIndicatorTest.java b/connector/src/test/java/at/asitplus/eidas/specific/connector/test/health/EidasNodeMetadataHealthIndicatorTest.java
deleted file mode 100644
index b044d4d2..00000000
--- a/connector/src/test/java/at/asitplus/eidas/specific/connector/test/health/EidasNodeMetadataHealthIndicatorTest.java
+++ /dev/null
@@ -1,102 +0,0 @@
-package at.asitplus.eidas.specific.connector.test.health;
-
-import java.io.IOException;
-
-import org.apache.commons.io.IOUtils;
-import org.junit.AfterClass;
-import org.junit.Assert;
-import org.junit.BeforeClass;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.actuate.health.Health;
-import org.springframework.http.MediaType;
-import org.springframework.test.context.ContextConfiguration;
-import org.springframework.test.context.TestPropertySource;
-import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
-import org.springframework.test.context.web.WebAppConfiguration;
-
-import at.asitplus.eidas.specific.connector.health.EidasNodeMetadataHealthIndicator;
-import okhttp3.mockwebserver.MockResponse;
-import okhttp3.mockwebserver.MockWebServer;
-
-@RunWith(SpringJUnit4ClassRunner.class)
-@ContextConfiguration({
-    "/spring/SpringTest-context_healthcheck.xml" })
-@TestPropertySource(locations = {"classpath:/config/junit_config_1_springboot.properties"})
-@WebAppConfiguration
-public class EidasNodeMetadataHealthIndicatorTest {
- 
-  @Autowired EidasNodeMetadataHealthIndicator health;
-  
-  private static MockWebServer mockWebServer = null;
- 
-  /**
-   * Testclass initializer.
-   *
-   * @throws IOException In case of an error
-   */
-  @BeforeClass
-  public static void classInitializer() throws IOException {
-    mockWebServer = new MockWebServer();
-    mockWebServer.start(40900);
-    mockWebServer.url("/mockup");
-
-  }
-
-  @AfterClass
-  public static void resetTestEnviroment() throws NoSuchFieldException, SecurityException,
-      IllegalArgumentException, IllegalAccessException, IOException {
-    mockWebServer.shutdown();
-
-  }
-  
-  @Test
-  public void httpStatusCode500() throws IOException {
-    //set-up status
-    mockWebServer.enqueue(new MockResponse().setResponseCode(500)
-        .setBody(IOUtils.toString(EidasNodeMetadataHealthIndicatorTest.class
-            .getResourceAsStream("/data/metadata_valid.xml"), "UTF-8"))
-        .setHeader("Content-Type", MediaType.APPLICATION_XML));
-
-    //perform test
-    Health status = health.health();
-    
-    //validate state
-    Assert.assertEquals("wrong healthState", Health.down().build().getStatus(), status.getStatus());
-    
-  } 
-
-  @Test
-  public void httpStatusCode200() throws IOException {
-    //set-up status
-    mockWebServer.enqueue(new MockResponse().setResponseCode(200)
-        .setBody(IOUtils.toString(EidasNodeMetadataHealthIndicatorTest.class
-            .getResourceAsStream("/data/metadata_valid.xml"), "UTF-8"))
-        .setHeader("Content-Type", MediaType.APPLICATION_XML));
-
-    //perform test
-    Health status = health.health();
-    
-    //validate state
-    Assert.assertEquals("wrong healthState", Health.up().build().getStatus(), status.getStatus());
-    
-  }
-  
-  @Test
-  public void noXmlResponse() throws IOException {
-    //set-up status
-    mockWebServer.enqueue(new MockResponse().setResponseCode(200)
-        .setBody(IOUtils.toString(EidasNodeMetadataHealthIndicatorTest.class
-            .getResourceAsStream("/config/log4j.properties"), "UTF-8"))
-        .setHeader("Content-Type", MediaType.APPLICATION_XML));
-
-    //perform test
-    Health status = health.health();
-    
-    //validate state
-    Assert.assertEquals("wrong healthState", Health.down().build().getStatus(), status.getStatus());
-    
-  }
-  
-}
diff --git a/connector/src/test/java/at/asitplus/eidas/specific/connector/test/saml2/Pvp2SProfileEndPointTest.java b/connector/src/test/java/at/asitplus/eidas/specific/connector/test/saml2/Pvp2SProfileEndPointTest.java
index 6b39bd76..ebc07680 100644
--- a/connector/src/test/java/at/asitplus/eidas/specific/connector/test/saml2/Pvp2SProfileEndPointTest.java
+++ b/connector/src/test/java/at/asitplus/eidas/specific/connector/test/saml2/Pvp2SProfileEndPointTest.java
@@ -47,10 +47,10 @@ import org.springframework.util.Base64Utils;
 import org.springframework.web.context.request.RequestContextHolder;
 import org.springframework.web.context.request.ServletRequestAttributes;
 
-import at.asitplus.eidas.specific.connector.MsEidasNodeConstants;
 import at.asitplus.eidas.specific.connector.controller.Pvp2SProfileEndpoint;
 import at.asitplus.eidas.specific.connector.provider.PvpEndPointCredentialProvider;
 import at.asitplus.eidas.specific.connector.provider.PvpMetadataProvider;
+import at.asitplus.eidas.specific.core.MsEidasNodeConstants;
 import at.gv.egiz.eaaf.core.api.IRequest;
 import at.gv.egiz.eaaf.core.api.IRequestStorage;
 import at.gv.egiz.eaaf.core.exceptions.EaafException;
@@ -64,7 +64,7 @@ import net.shibboleth.utilities.java.support.xml.XMLParserException;
 @RunWith(SpringJUnit4ClassRunner.class)
 @ContextConfiguration({
     "/applicationContext.xml",
-    "/specific_eIDAS_connector.beans.xml",
+    "/spring/SpringTest_connector.beans.xml",
     "/eaaf_core.beans.xml",
     "/eaaf_pvp.beans.xml",
     "/eaaf_pvp_idp.beans.xml",
diff --git a/connector/src/test/java/at/asitplus/eidas/specific/connector/test/task/EvaluateCountrySelectionTaskTest.java b/connector/src/test/java/at/asitplus/eidas/specific/connector/test/task/EvaluateCountrySelectionTaskTest.java
index 4bff9416..abfc60ff 100644
--- a/connector/src/test/java/at/asitplus/eidas/specific/connector/test/task/EvaluateCountrySelectionTaskTest.java
+++ b/connector/src/test/java/at/asitplus/eidas/specific/connector/test/task/EvaluateCountrySelectionTaskTest.java
@@ -19,8 +19,8 @@ import org.springframework.test.context.web.WebAppConfiguration;
 import org.springframework.web.context.request.RequestContextHolder;
 import org.springframework.web.context.request.ServletRequestAttributes;
 
-import at.asitplus.eidas.specific.connector.MsEidasNodeConstants;
 import at.asitplus.eidas.specific.connector.processes.tasks.EvaluateCountrySelectionTask;
+import at.asitplus.eidas.specific.core.MsEidasNodeConstants;
 import at.gv.egiz.eaaf.core.api.data.EaafConstants;
 import at.gv.egiz.eaaf.core.exceptions.TaskExecutionException;
 import at.gv.egiz.eaaf.core.impl.idp.controller.tasks.AbstractLocaleAuthServletTask;
@@ -30,7 +30,7 @@ import at.gv.egiz.eaaf.core.impl.idp.process.ExecutionContextImpl;
 @RunWith(SpringJUnit4ClassRunner.class)
 @ContextConfiguration({
     "/applicationContext.xml",
-    "/specific_eIDAS_connector.beans.xml",
+    "/spring/SpringTest_connector.beans.xml",
     "/eaaf_core.beans.xml",
     "/eaaf_pvp.beans.xml",
     "/eaaf_pvp_idp.beans.xml",
diff --git a/connector/src/test/java/at/asitplus/eidas/specific/connector/test/task/GenerateCountrySelectionFrameTaskTest.java b/connector/src/test/java/at/asitplus/eidas/specific/connector/test/task/GenerateCountrySelectionFrameTaskTest.java
index 2aab286f..746c8375 100644
--- a/connector/src/test/java/at/asitplus/eidas/specific/connector/test/task/GenerateCountrySelectionFrameTaskTest.java
+++ b/connector/src/test/java/at/asitplus/eidas/specific/connector/test/task/GenerateCountrySelectionFrameTaskTest.java
@@ -29,7 +29,7 @@ import at.gv.egiz.eaaf.core.impl.idp.process.ExecutionContextImpl;
 @RunWith(SpringJUnit4ClassRunner.class)
 @ContextConfiguration({
     "/applicationContext.xml",
-    "/specific_eIDAS_connector.beans.xml",
+    "/spring/SpringTest_connector.beans.xml",
     "/eaaf_core.beans.xml",
     "/eaaf_pvp.beans.xml",
     "/eaaf_pvp_idp.beans.xml",
diff --git a/connector/src/test/java/at/asitplus/eidas/specific/connector/test/utils/AuthenticationDataBuilderTest.java b/connector/src/test/java/at/asitplus/eidas/specific/connector/test/utils/AuthenticationDataBuilderTest.java
deleted file mode 100644
index cd183088..00000000
--- a/connector/src/test/java/at/asitplus/eidas/specific/connector/test/utils/AuthenticationDataBuilderTest.java
+++ /dev/null
@@ -1,636 +0,0 @@
-package at.asitplus.eidas.specific.connector.test.utils;
-
-import static at.asitplus.eidas.specific.connector.MsEidasNodeConstants.PROP_CONFIG_SP_NEW_EID_MODE;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertThrows;
-import static org.junit.Assert.assertTrue;
-
-import java.io.IOException;
-import java.security.PublicKey;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.Map;
-
-import javax.xml.transform.TransformerException;
-
-import org.apache.commons.lang3.RandomStringUtils;
-import org.apache.commons.lang3.RandomUtils;
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.BeforeClass;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.opensaml.core.config.InitializationException;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.i18n.LocaleContextHolder;
-import org.springframework.mock.web.MockHttpServletRequest;
-import org.springframework.mock.web.MockHttpServletResponse;
-import org.springframework.test.context.ActiveProfiles;
-import org.springframework.test.context.ContextConfiguration;
-import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
-import org.springframework.test.context.web.WebAppConfiguration;
-import org.springframework.web.context.request.RequestContextHolder;
-import org.springframework.web.context.request.ServletRequestAttributes;
-import org.w3c.dom.Element;
-
-import at.asitplus.eidas.specific.connector.builder.AuthenticationDataBuilder;
-import at.asitplus.eidas.specific.modules.auth.eidas.v2.Constants;
-import at.asitplus.eidas.specific.modules.msproxyservice.MsProxyServiceConstants;
-import at.gv.egiz.eaaf.core.api.data.EaafConfigConstants;
-import at.gv.egiz.eaaf.core.api.data.EaafConstants;
-import at.gv.egiz.eaaf.core.api.data.ExtendedPvpAttributeDefinitions;
-import at.gv.egiz.eaaf.core.api.data.PvpAttributeDefinitions;
-import at.gv.egiz.eaaf.core.api.data.PvpAttributeDefinitions.EidIdentityStatusLevelValues;
-import at.gv.egiz.eaaf.core.api.idp.IAuthData;
-import at.gv.egiz.eaaf.core.api.idp.IConfiguration;
-import at.gv.egiz.eaaf.core.api.idp.auth.data.IIdentityLink;
-import at.gv.egiz.eaaf.core.exceptions.EaafAuthenticationException;
-import at.gv.egiz.eaaf.core.exceptions.EaafBuilderException;
-import at.gv.egiz.eaaf.core.exceptions.EaafParserException;
-import at.gv.egiz.eaaf.core.exceptions.EaafStorageException;
-import at.gv.egiz.eaaf.core.impl.builder.BpkBuilder;
-import at.gv.egiz.eaaf.core.impl.idp.EidAuthenticationData;
-import at.gv.egiz.eaaf.core.impl.idp.auth.data.AuthProcessDataWrapper;
-import at.gv.egiz.eaaf.core.impl.idp.auth.data.EidAuthProcessDataWrapper;
-import at.gv.egiz.eaaf.core.impl.idp.auth.data.SimpleIdentityLinkAssertionParser;
-import at.gv.egiz.eaaf.core.impl.idp.module.test.DummySpConfiguration;
-import at.gv.egiz.eaaf.core.impl.idp.module.test.TestRequestImpl;
-import at.gv.egiz.eaaf.modules.pvp2.impl.opensaml.initialize.EaafOpenSaml3xInitializer;
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
-
-@RunWith(SpringJUnit4ClassRunner.class)
-@ContextConfiguration({ "/applicationContext.xml", "/spring/SpringTest_connector.beans.xml", "/eaaf_core.beans.xml",
-    "/eaaf_pvp.beans.xml", "/eaaf_pvp_idp.beans.xml", "/spring/SpringTest-context_simple_storage.xml" })
-@ActiveProfiles(profiles = {"deprecatedConfig"})
-@WebAppConfiguration
-public class AuthenticationDataBuilderTest {
-
-  @Autowired
-  private AuthenticationDataBuilder authenticationDataBuilder;
-
-  @Autowired(required = true)
-  private IConfiguration basicConfig;
-
-  private MockHttpServletRequest httpReq;
-  private MockHttpServletResponse httpResp;
-  private TestRequestImpl pendingReq;
-
-  private DummySpConfiguration oaParam;
-  private Map<String, String> spConfig;
-
-  private String eidasBind;
-  private String authBlock;
-
-  @BeforeClass
-  public static void classInitializer() throws InitializationException, ComponentInitializationException {
-    final String current = new java.io.File(".").toURI().toString();
-    System.setProperty("eidas.ms.configuration", current
-        + "src/test/resources/config/junit_config_3.properties");
-
-    EaafOpenSaml3xInitializer.eaafInitialize();
-  }
-
-  @Before
-  public void initialize() throws EaafStorageException {
-    httpReq = new MockHttpServletRequest("POST", "https://localhost/ms_connector");
-    httpResp = new MockHttpServletResponse();
-    RequestContextHolder.resetRequestAttributes();
-    RequestContextHolder.setRequestAttributes(new ServletRequestAttributes(httpReq, httpResp));
-
-    spConfig = new HashMap<>();
-    spConfig.put(EaafConfigConstants.SERVICE_UNIQUEIDENTIFIER, "testSp");
-    spConfig.put("target", "urn:publicid:gv.at:cdid+XX");
-    spConfig.put(PROP_CONFIG_SP_NEW_EID_MODE, "true");
-    oaParam = new DummySpConfiguration(spConfig, basicConfig);
-
-    pendingReq = new TestRequestImpl();
-    pendingReq.setAuthUrl("https://localhost/ms_connector");
-    pendingReq.setPendingReqId(RandomStringUtils.randomAlphanumeric(10));
-    pendingReq.setPiiTransactionId(RandomStringUtils.randomAlphanumeric(10));
-    pendingReq.setSpConfig(oaParam);
-    authBlock = RandomStringUtils.randomAlphanumeric(20);
-    eidasBind = RandomStringUtils.randomAlphanumeric(20);
-    pendingReq.getSessionData(AuthProcessDataWrapper.class)
-        .setQaaLevel(EaafConstants.EIDAS_LOA_PREFIX + RandomStringUtils.randomAlphabetic(5));
-    pendingReq.getSessionData(AuthProcessDataWrapper.class).setGenericDataToSession(
-        PvpAttributeDefinitions.EID_ISSUING_NATION_NAME,
-        RandomStringUtils.randomAlphabetic(2).toUpperCase());
-
-    LocaleContextHolder.resetLocaleContext();
-
-  }
-
-  @Test
-  public void eidasProxyMode() throws EaafAuthenticationException, EaafStorageException {
-    // initialize state
-    boolean isTestIdentity = RandomUtils.nextBoolean();
-    pendingReq.getSessionData(EidAuthProcessDataWrapper.class).setTestIdentity(isTestIdentity);
-    pendingReq.getSessionData(AuthProcessDataWrapper.class).setEidProcess(true);
-    
-    String givenName = RandomStringUtils.randomAlphabetic(10);
-    String familyName = RandomStringUtils.randomAlphabetic(10);
-    String dateOfBirth = "1956-12-08";
-    String bpk = RandomStringUtils.randomAlphanumeric(10);
-    String cc = pendingReq.getSessionData(AuthProcessDataWrapper.class)
-        .getGenericDataFromSession(PvpAttributeDefinitions.EID_ISSUING_NATION_NAME, String.class);
-    String spC = RandomStringUtils.randomAlphabetic(2).toUpperCase();
-    
-    spConfig.put("target", EaafConstants.URN_PREFIX_EIDAS + cc + "+" + spC);
-    
-    pendingReq.getSessionData(AuthProcessDataWrapper.class).setEidProcess(true);
-    pendingReq.getSessionData(AuthProcessDataWrapper.class).setForeigner(false);
-    pendingReq.getSessionData(AuthProcessDataWrapper.class)
-        .setGenericDataToSession(PvpAttributeDefinitions.GIVEN_NAME_NAME, givenName);
-    pendingReq.getSessionData(AuthProcessDataWrapper.class)
-        .setGenericDataToSession(PvpAttributeDefinitions.PRINCIPAL_NAME_NAME, familyName);
-    pendingReq.getSessionData(AuthProcessDataWrapper.class)
-        .setGenericDataToSession(PvpAttributeDefinitions.BIRTHDATE_NAME, dateOfBirth);
-    pendingReq.getSessionData(AuthProcessDataWrapper.class)
-        .setGenericDataToSession(MsProxyServiceConstants.ATTR_EIDAS_PERSONAL_IDENTIFIER, bpk);
-        
-    //set LoA level attribute instead of explicit session-data
-    pendingReq.getSessionData(AuthProcessDataWrapper.class)
-    .setGenericDataToSession(PvpAttributeDefinitions.EID_CITIZEN_EIDAS_QAA_LEVEL_NAME, 
-        pendingReq.getSessionData(AuthProcessDataWrapper.class).getQaaLevel());
-    pendingReq.getSessionData(AuthProcessDataWrapper.class).setQaaLevel(null);
-    
-    
-    
-    // execute test
-    IAuthData authData = authenticationDataBuilder.buildAuthenticationData(pendingReq);
-
-    
-    // validate state
-    Assert.assertNotNull("AuthData null", authData);
-    Assert.assertNull("authBlock null", authData.getGenericData(Constants.SZR_AUTHBLOCK, String.class));
-    Assert.assertNull("eidasBind null", authData.getGenericData(Constants.EIDAS_BIND, String.class));
-        
-    Assert.assertEquals("LoA",  pendingReq.getSessionData(AuthProcessDataWrapper.class)
-        .getGenericDataFromSession(PvpAttributeDefinitions.EID_CITIZEN_EIDAS_QAA_LEVEL_NAME, String.class), 
-        authData.getEidasQaaLevel());
-    Assert.assertEquals("CitizenCountry", cc, authData.getCiticenCountryCode());
-    Assert.assertEquals("familyName", familyName, authData.getFamilyName());
-    Assert.assertEquals("givenName", givenName, authData.getGivenName());
-    Assert.assertEquals("DateOfBirth", dateOfBirth, authData.getDateOfBirth());
-    
-    Assert.assertEquals("bPK", pendingReq.getSessionData(AuthProcessDataWrapper.class)
-        .getGenericDataFromSession(MsProxyServiceConstants.ATTR_EIDAS_PERSONAL_IDENTIFIER, String.class), 
-        authData.getGenericData(MsProxyServiceConstants.ATTR_EIDAS_PERSONAL_IDENTIFIER, String.class));
-    
-    Assert.assertEquals("testIdentity flag", 
-        isTestIdentity ? EidIdentityStatusLevelValues.TESTIDENTITY : EidIdentityStatusLevelValues.IDENTITY, 
-        ((EidAuthenticationData)authData).getEidStatus());        
-    assertFalse("mandate flag", ((EidAuthenticationData)authData).isUseMandate());
-    
-  }
-  
-  @Test
-  public void eidasProxyModeWithJurMandate() throws EaafAuthenticationException, EaafStorageException {
-    // initialize state    
-    injectRepresentativeInfosIntoSession();
-    
-    String commonMandate = RandomStringUtils.randomAlphabetic(10);
-    
-    // set constant country-code and sourcePin to check hashed eIDAS identifier
-    String sourcePinMandate = "asfdsadfsadfsafsdafsadfasr";       
-    spConfig.put("target", EaafConstants.URN_PREFIX_EIDAS + "AT+EE");
-    
-    // set nat. person mandate information
-    pendingReq.getSessionData(AuthProcessDataWrapper.class).setUseMandates(true);
-    pendingReq.getSessionData(AuthProcessDataWrapper.class)
-        .setGenericDataToSession(PvpAttributeDefinitions.MANDATE_LEG_PER_FULL_NAME_NAME, commonMandate);
-    pendingReq.getSessionData(AuthProcessDataWrapper.class)
-        .setGenericDataToSession(PvpAttributeDefinitions.MANDATE_LEG_PER_SOURCE_PIN_NAME, sourcePinMandate);
-    pendingReq.getSessionData(AuthProcessDataWrapper.class)
-        .setGenericDataToSession(PvpAttributeDefinitions.MANDATE_LEG_PER_SOURCE_PIN_TYPE_NAME, 
-            EaafConstants.URN_PREFIX_BASEID + "+XFN");            
-    
-    // execute test
-    IAuthData authData = authenticationDataBuilder.buildAuthenticationData(pendingReq);
-
-    
-    // validate state
-    Assert.assertNotNull("AuthData null", authData);    
-    assertTrue("mandate flag", ((EidAuthenticationData)authData).isUseMandate());
-    
-    //check mandate informations
-    checkGenericAttribute(authData, PvpAttributeDefinitions.MANDATE_LEG_PER_FULL_NAME_NAME, commonMandate);
-    checkGenericAttribute(authData, MsProxyServiceConstants.ATTR_EIDAS_JUR_MANDATOR_PERSONAL_IDENTIFIER, 
-        "AT/EE/urn:publicid:gv.at:baseid+XFN+asfdsadfsadfsafsdafsadfasr");
-        
-  }
-  
-  @Test
-  public void eidasProxyModeWithJurMandateMissingAttribute() throws EaafAuthenticationException, EaafStorageException {
-    // initialize state    
-    injectRepresentativeInfosIntoSession();
-    
-    // set constant country-code and sourcePin to check hashed eIDAS identifier
-    String sourcePinMandate = "asfdsadfsadfsafsdafsadfasr";       
-    spConfig.put("target", EaafConstants.URN_PREFIX_EIDAS + "AT+EE");
-    
-    // set nat. person mandate information
-    pendingReq.getSessionData(AuthProcessDataWrapper.class).setUseMandates(true);
-    pendingReq.getSessionData(AuthProcessDataWrapper.class)
-        .setGenericDataToSession(PvpAttributeDefinitions.MANDATE_LEG_PER_SOURCE_PIN_NAME, sourcePinMandate);
-    pendingReq.getSessionData(AuthProcessDataWrapper.class)
-        .setGenericDataToSession(PvpAttributeDefinitions.MANDATE_LEG_PER_SOURCE_PIN_TYPE_NAME, 
-            EaafConstants.URN_PREFIX_BASEID + "+XFN");            
-    
-    // execute test
-    // execute test
-    EaafAuthenticationException error = assertThrows(EaafAuthenticationException.class, 
-        () -> authenticationDataBuilder.buildAuthenticationData(pendingReq));
-    Assert.assertEquals("wrong errorId", "builder.11", error.getErrorId());
-        
-  }
-  
-  @Test
-  public void eidasProxyModeWithNatMandate() throws EaafAuthenticationException, EaafStorageException {
-    // initialize state    
-    injectRepresentativeInfosIntoSession();
-    
-    String givenNameMandate = RandomStringUtils.randomAlphabetic(10);
-    String familyNameMandate = RandomStringUtils.randomAlphabetic(10);
-    String dateOfBirthMandate = "1957-09-15";
-    String bpkMandate = RandomStringUtils.randomAlphanumeric(10);
-        
-    // set nat. person mandate information
-    pendingReq.getSessionData(AuthProcessDataWrapper.class).setUseMandates(true);
-    pendingReq.getSessionData(AuthProcessDataWrapper.class)
-        .setGenericDataToSession(PvpAttributeDefinitions.MANDATE_NAT_PER_GIVEN_NAME_NAME, givenNameMandate);
-    pendingReq.getSessionData(AuthProcessDataWrapper.class)
-        .setGenericDataToSession(PvpAttributeDefinitions.MANDATE_NAT_PER_FAMILY_NAME_NAME, familyNameMandate);
-    pendingReq.getSessionData(AuthProcessDataWrapper.class)
-        .setGenericDataToSession(PvpAttributeDefinitions.MANDATE_NAT_PER_BIRTHDATE_NAME, dateOfBirthMandate);
-    pendingReq.getSessionData(AuthProcessDataWrapper.class)
-        .setGenericDataToSession(PvpAttributeDefinitions.MANDATE_NAT_PER_BPK_NAME, "AT+XX:" + bpkMandate);
-            
-    // execute test
-    IAuthData authData = authenticationDataBuilder.buildAuthenticationData(pendingReq);
-
-    
-    // validate state
-    Assert.assertNotNull("AuthData null", authData);    
-    assertTrue("mandate flag", ((EidAuthenticationData)authData).isUseMandate());
-    
-    //check mandate informations
-    checkGenericAttribute(authData, PvpAttributeDefinitions.MANDATE_NAT_PER_GIVEN_NAME_NAME, givenNameMandate);
-    checkGenericAttribute(authData, PvpAttributeDefinitions.MANDATE_NAT_PER_FAMILY_NAME_NAME, familyNameMandate);
-    checkGenericAttribute(authData, PvpAttributeDefinitions.MANDATE_NAT_PER_BIRTHDATE_NAME, "1957-09-15");
-    checkGenericAttribute(authData, MsProxyServiceConstants.ATTR_EIDAS_NAT_MANDATOR_PERSONAL_IDENTIFIER, bpkMandate);
-        
-  }
-  
-  @Test
-  public void eidasProxyModeWithNatMandateWrongBpkFormat() throws EaafAuthenticationException, EaafStorageException {
-    // initialize state
-    injectRepresentativeInfosIntoSession();
-    
-    String givenNameMandate = RandomStringUtils.randomAlphabetic(10);
-    String familyNameMandate = RandomStringUtils.randomAlphabetic(10);
-    String dateOfBirthMandate = "1957-09-15";
-    String bpkMandate = RandomStringUtils.randomAlphanumeric(10);
-        
-    // set nat. person mandate information
-    pendingReq.getSessionData(AuthProcessDataWrapper.class).setUseMandates(true);
-    pendingReq.getSessionData(AuthProcessDataWrapper.class)
-        .setGenericDataToSession(PvpAttributeDefinitions.MANDATE_NAT_PER_GIVEN_NAME_NAME, givenNameMandate);
-    pendingReq.getSessionData(AuthProcessDataWrapper.class)
-        .setGenericDataToSession(PvpAttributeDefinitions.MANDATE_NAT_PER_FAMILY_NAME_NAME, familyNameMandate);
-    pendingReq.getSessionData(AuthProcessDataWrapper.class)
-        .setGenericDataToSession(PvpAttributeDefinitions.MANDATE_NAT_PER_BIRTHDATE_NAME, dateOfBirthMandate);
-    pendingReq.getSessionData(AuthProcessDataWrapper.class)
-        .setGenericDataToSession(PvpAttributeDefinitions.MANDATE_NAT_PER_BPK_NAME, bpkMandate);
-     
-    // execute test
-    IAuthData authData = authenticationDataBuilder.buildAuthenticationData(pendingReq);
-
-    
-    // validate state
-    Assert.assertNotNull("AuthData null", authData);    
-    assertTrue("mandate flag", ((EidAuthenticationData)authData).isUseMandate());
-    
-    //check mandate informations
-    checkGenericAttribute(authData, PvpAttributeDefinitions.MANDATE_NAT_PER_GIVEN_NAME_NAME, givenNameMandate);
-    checkGenericAttribute(authData, PvpAttributeDefinitions.MANDATE_NAT_PER_FAMILY_NAME_NAME, familyNameMandate);
-    checkGenericAttribute(authData, PvpAttributeDefinitions.MANDATE_NAT_PER_BIRTHDATE_NAME, "1957-09-15");
-    checkGenericAttribute(authData, MsProxyServiceConstants.ATTR_EIDAS_NAT_MANDATOR_PERSONAL_IDENTIFIER, bpkMandate);
-        
-  }
-  
-  @Test
-  public void eidasProxyModeWithNatMandateMissingAttribute() throws EaafAuthenticationException, EaafStorageException {
-    // initialize state
-    injectRepresentativeInfosIntoSession();
-    
-    String familyNameMandate = RandomStringUtils.randomAlphabetic(10);
-    String dateOfBirthMandate = "1957-09-15";
-    String bpkMandate = RandomStringUtils.randomAlphanumeric(10);
-        
-    // set nat. person mandate information
-    pendingReq.getSessionData(AuthProcessDataWrapper.class).setUseMandates(true);
-    pendingReq.getSessionData(AuthProcessDataWrapper.class)
-        .setGenericDataToSession(PvpAttributeDefinitions.MANDATE_NAT_PER_FAMILY_NAME_NAME, familyNameMandate);
-    pendingReq.getSessionData(AuthProcessDataWrapper.class)
-        .setGenericDataToSession(PvpAttributeDefinitions.MANDATE_NAT_PER_BIRTHDATE_NAME, dateOfBirthMandate);
-    pendingReq.getSessionData(AuthProcessDataWrapper.class)
-        .setGenericDataToSession(PvpAttributeDefinitions.MANDATE_NAT_PER_BPK_NAME, bpkMandate);
-    
-    // execute test
-    EaafAuthenticationException error = assertThrows(EaafAuthenticationException.class, 
-        () -> authenticationDataBuilder.buildAuthenticationData(pendingReq));
-    Assert.assertEquals("wrong errorId", "builder.11", error.getErrorId());
-        
-  }
-  
-  @Test
-  public void eidMode() throws EaafAuthenticationException, EaafStorageException {
-    // initialize state
-    boolean isTestIdentity = RandomUtils.nextBoolean();
-    pendingReq.getSessionData(EidAuthProcessDataWrapper.class).setTestIdentity(isTestIdentity);
-    pendingReq.getSessionData(AuthProcessDataWrapper.class).setEidProcess(true);
-    pendingReq.getSessionData(AuthProcessDataWrapper.class)
-        .setGenericDataToSession(Constants.SZR_AUTHBLOCK, authBlock);
-    pendingReq.getSessionData(AuthProcessDataWrapper.class)
-        .setGenericDataToSession(Constants.EIDAS_BIND, eidasBind);
-    
-    // execute
-    IAuthData authData = authenticationDataBuilder.buildAuthenticationData(pendingReq);
-
-    // validate state
-    Assert.assertNotNull("AuthData null", authData);
-    Assert.assertNotNull("authBlock null", authData.getGenericData(Constants.SZR_AUTHBLOCK, String.class));
-    Assert.assertNotNull("eidasBind null", authData.getGenericData(Constants.EIDAS_BIND, String.class));
-    Assert.assertNotNull("LoA null", authData.getEidasQaaLevel());
-    Assert.assertEquals("testIdentity flag", 
-        isTestIdentity ? EidIdentityStatusLevelValues.TESTIDENTITY : EidIdentityStatusLevelValues.IDENTITY, 
-        ((EidAuthenticationData)authData).getEidStatus());
-    
-    String authBlock = authData.getGenericData(Constants.SZR_AUTHBLOCK, String.class);
-    String eidasBind = authData.getGenericData(Constants.EIDAS_BIND, String.class);
-
-    Assert.assertEquals("authBlock not equal", this.authBlock, authBlock);
-    Assert.assertEquals("eidasBind not equal", this.eidasBind, eidasBind);
-    Assert.assertEquals("piiTransactionId",
-        authData.getGenericData(ExtendedPvpAttributeDefinitions.EID_PII_TRANSACTION_ID_NAME, String.class),
-        this.pendingReq.getUniquePiiTransactionIdentifier());
-    Assert.assertNotNull("assertion validTo", authData.getSsoSessionValidTo());
-    Assert.assertEquals("LoA", pendingReq.getSessionData(AuthProcessDataWrapper.class).getQaaLevel(),
-        authData.getEidasQaaLevel());
-    Assert.assertEquals("EID-ISSUING-NATION",
-        pendingReq.getSessionData(AuthProcessDataWrapper.class).getGenericDataFromSession(
-            PvpAttributeDefinitions.EID_ISSUING_NATION_NAME),
-        authData.getCiticenCountryCode());
-
-    Assert.assertNull("bPK", authData.getBpk());
-    Assert.assertNull("bPKType", authData.getBpkType());
-    Assert.assertNull("FamilyName", authData.getFamilyName());
-    Assert.assertNull("GivenName", authData.getGivenName());
-    Assert.assertNull("DateOfBirth", authData.getDateOfBirth());
-    Assert.assertNull("baseId", authData.getIdentificationValue());
-    Assert.assertNull("baseIdType", authData.getIdentificationType());
-    Assert.assertNull("IDL", authData.getIdentityLink());
-
-  }
-
-  @Test
-  public void moaIdMode() throws EaafAuthenticationException, EaafBuilderException {
-    //initialize state
-    boolean isTestIdentity = RandomUtils.nextBoolean();
-    pendingReq.getSessionData(EidAuthProcessDataWrapper.class).setTestIdentity(isTestIdentity);    
-    pendingReq.getSessionData(AuthProcessDataWrapper.class).setEidProcess(false);
-    IIdentityLink idl = buildDummyIdl();
-    pendingReq.getSessionData(AuthProcessDataWrapper.class).setIdentityLink(idl);
-    
-    //execute
-    IAuthData authData = authenticationDataBuilder.buildAuthenticationData(pendingReq);
-
-    //validate state
-    Assert.assertNotNull("AuthData null", authData);
-    Assert.assertNull("authBlock null", authData.getGenericData(Constants.SZR_AUTHBLOCK, String.class));
-    Assert.assertNull("eidasBind null", authData.getGenericData(Constants.EIDAS_BIND, String.class));
-    Assert.assertNull("piiTransactionId", 
-        authData.getGenericData(ExtendedPvpAttributeDefinitions.EID_PII_TRANSACTION_ID_NAME, String.class));
-    
-    Assert.assertEquals("testIdentity flag", 
-        isTestIdentity ? EidIdentityStatusLevelValues.TESTIDENTITY : EidIdentityStatusLevelValues.IDENTITY, 
-        ((EidAuthenticationData)authData).getEidStatus());
-    
-    Assert.assertNotNull("assertion validTo", authData.getSsoSessionValidTo());
-    Assert.assertNotNull("LoA null", authData.getEidasQaaLevel());
-    Assert.assertEquals("LoA", pendingReq.getSessionData(AuthProcessDataWrapper.class).getQaaLevel(), 
-        authData.getEidasQaaLevel());
-    Assert.assertEquals("EID-ISSUING-NATION", 
-        pendingReq.getSessionData(AuthProcessDataWrapper.class).getGenericDataFromSession(
-            PvpAttributeDefinitions.EID_ISSUING_NATION_NAME), 
-        authData.getCiticenCountryCode());
-    
-    Assert.assertEquals("FamilyName", idl.getFamilyName(), authData.getFamilyName());
-    Assert.assertEquals("GivenName", idl.getGivenName(), authData.getGivenName());
-    Assert.assertEquals("DateOfBirth", idl.getDateOfBirth(), authData.getDateOfBirth());
-    Assert.assertEquals("bPK", 
-        BpkBuilder.generateAreaSpecificPersonIdentifier(
-            idl.getIdentificationValue(), EaafConstants.URN_PREFIX_CDID + "XX").getFirst(), 
-        authData.getBpk());
-    Assert.assertEquals("bPKType", EaafConstants.URN_PREFIX_CDID + "XX", authData.getBpkType());
-    Assert.assertNotNull("IDL", authData.getIdentityLink());
-    
-    
-  }
-
-  private void injectRepresentativeInfosIntoSession() throws EaafStorageException {
-    boolean isTestIdentity = RandomUtils.nextBoolean();
-    pendingReq.getSessionData(EidAuthProcessDataWrapper.class).setTestIdentity(isTestIdentity);
-    pendingReq.getSessionData(AuthProcessDataWrapper.class).setEidProcess(true);
-    
-    String givenName = RandomStringUtils.randomAlphabetic(10);
-    String familyName = RandomStringUtils.randomAlphabetic(10);
-    String dateOfBirth = "1956-12-08";
-    String bpk = RandomStringUtils.randomAlphanumeric(10);
-    String cc = pendingReq.getSessionData(AuthProcessDataWrapper.class)
-        .getGenericDataFromSession(PvpAttributeDefinitions.EID_ISSUING_NATION_NAME, String.class);
-    String spC = RandomStringUtils.randomAlphabetic(2).toUpperCase();
-    spConfig.put("target", EaafConstants.URN_PREFIX_EIDAS + cc + "+" + spC);
-    
-    pendingReq.getSessionData(AuthProcessDataWrapper.class).setEidProcess(true);
-    pendingReq.getSessionData(AuthProcessDataWrapper.class).setForeigner(false);
-    pendingReq.getSessionData(AuthProcessDataWrapper.class)
-        .setGenericDataToSession(PvpAttributeDefinitions.GIVEN_NAME_NAME, givenName);
-    pendingReq.getSessionData(AuthProcessDataWrapper.class)
-        .setGenericDataToSession(PvpAttributeDefinitions.PRINCIPAL_NAME_NAME, familyName);
-    pendingReq.getSessionData(AuthProcessDataWrapper.class)
-        .setGenericDataToSession(PvpAttributeDefinitions.BIRTHDATE_NAME, dateOfBirth);
-    pendingReq.getSessionData(AuthProcessDataWrapper.class)
-        .setGenericDataToSession(MsProxyServiceConstants.ATTR_EIDAS_PERSONAL_IDENTIFIER, bpk);
-    
-    //set LoA level attribute instead of explicit session-data
-    pendingReq.getSessionData(AuthProcessDataWrapper.class)
-    .setGenericDataToSession(PvpAttributeDefinitions.EID_CITIZEN_EIDAS_QAA_LEVEL_NAME, 
-        pendingReq.getSessionData(AuthProcessDataWrapper.class).getQaaLevel());
-    pendingReq.getSessionData(AuthProcessDataWrapper.class).setQaaLevel(null);
-    
-  }
-  
-  private void checkGenericAttribute(IAuthData authData, String attrName, String expected) {
-    assertEquals("Wrong: " + attrName, expected, authData.getGenericData(attrName, String.class));
-    
-   }
-  
-  private IIdentityLink buildDummyIdl() {
-    return new IIdentityLink() {
-      
-      String familyName = RandomStringUtils.randomAlphabetic(10);
-      String givenName = RandomStringUtils.randomAlphabetic(10);
-      String dateOfBirth = "1955-02-03";
-      String baseId = RandomStringUtils.randomAlphanumeric(20);
-      String saml2Serialized = RandomStringUtils.randomAlphanumeric(150);
-
-     
-      
-      @Override
-      public void setSamlAssertion(Element arg0) throws TransformerException, IOException {
-     
-      }
-
-      @Override
-      public void setPublicKey(PublicKey[] arg0) {
-        // TODO Auto-generated method stub
-
-      }
-
-      @Override
-      public void setPrPerson(Element arg0) {
-        // TODO Auto-generated method stub
-
-      }
-
-      @Override
-      public void setIssueInstant(String arg0) {
-        // TODO Auto-generated method stub
-
-      }
-
-      @Override
-      public void setIdentificationValue(String arg0) {
-        // TODO Auto-generated method stub
-
-      }
-
-      @Override
-      public void setIdentificationType(String arg0) {
-        // TODO Auto-generated method stub
-
-      }
-
-      @Override
-      public void setGivenName(String arg0) {
-        // TODO Auto-generated method stub
-
-      }
-
-      @Override
-      public void setFamilyName(String arg0) {
-        // TODO Auto-generated method stub
-
-      }
-
-      @Override
-      public void setDsigReferenceTransforms(Element[] arg0) {
-        // TODO Auto-generated method stub
-
-      }
-
-      @Override
-      public void setDateOfBirth(String arg0) {
-        // TODO Auto-generated method stub
-
-      }
-
-      @Override
-      public String getSerializedSamlAssertion() {
-        return this.saml2Serialized;
-      }
-
-      @Override
-      public Element getSamlAssertion() {        
-        IIdentityLink fullIdl;
-        try {
-          fullIdl = new SimpleIdentityLinkAssertionParser(
-              AuthenticationDataBuilderTest.class.getResourceAsStream("/data/test_idl_1.xml")).parseIdentityLink();
-          return fullIdl.getSamlAssertion();
-        
-        } catch (EaafParserException e) {         
-          e.printStackTrace();
-        }
-        
-        return null;
-        
-      }
-
-      @Override
-      public PublicKey[] getPublicKey() {
-        // TODO Auto-generated method stub
-        return null;
-      }
-
-      @Override
-      public Element getPrPerson() {
-        // TODO Auto-generated method stub
-        return null;
-      }
-
-      @Override
-      public String getName() {
-        // TODO Auto-generated method stub
-        return null;
-      }
-
-      @Override
-      public Date getIssueInstantDate() {
-        // TODO Auto-generated method stub
-        return null;
-      }
-
-      @Override
-      public String getIssueInstant() {
-        // TODO Auto-generated method stub
-        return null;
-      }
-
-      @Override
-      public String getIdentificationValue() {
-        return this.baseId;
-      }
-
-      @Override
-      public String getIdentificationType() {
-        return EaafConstants.URN_PREFIX_BASEID;
-      }
-
-      @Override
-      public String getGivenName() {
-        return this.givenName;
-      }
-
-      @Override
-      public String getFamilyName() {
-        return this.familyName;
-      }
-
-      @Override
-      public Element[] getDsigReferenceTransforms() {
-        // TODO Auto-generated method stub
-        return null;
-      }
-
-      @Override
-      public String getDateOfBirth() {
-        return this.dateOfBirth;
-
-      }
-    };
-  }
-
-}
diff --git a/connector/src/test/java/at/asitplus/eidas/specific/connector/test/utils/AuthnRequestValidatorTest.java b/connector/src/test/java/at/asitplus/eidas/specific/connector/test/utils/AuthnRequestValidatorTest.java
index c57515a0..ea163e61 100644
--- a/connector/src/test/java/at/asitplus/eidas/specific/connector/test/utils/AuthnRequestValidatorTest.java
+++ b/connector/src/test/java/at/asitplus/eidas/specific/connector/test/utils/AuthnRequestValidatorTest.java
@@ -31,8 +31,8 @@ import org.springframework.web.context.request.ServletRequestAttributes;
 import org.w3c.dom.Element;
 import org.xml.sax.SAXException;
 
-import at.asitplus.eidas.specific.connector.MsEidasNodeConstants;
-import at.asitplus.eidas.specific.connector.config.ServiceProviderConfiguration;
+import at.asitplus.eidas.specific.core.MsEidasNodeConstants;
+import at.asitplus.eidas.specific.core.config.ServiceProviderConfiguration;
 import at.gv.egiz.eaaf.core.api.data.EaafConfigConstants;
 import at.gv.egiz.eaaf.core.api.idp.IConfigurationWithSP;
 import at.gv.egiz.eaaf.core.exceptions.AuthnRequestValidatorException;
@@ -48,11 +48,11 @@ import net.shibboleth.utilities.java.support.component.ComponentInitializationEx
 @RunWith(SpringJUnit4ClassRunner.class)
 @ContextConfiguration({
     "/applicationContext.xml",
-    "/specific_eIDAS_connector.beans.xml",
+    "/spring/SpringTest_connector.beans.xml",
     "/eaaf_core.beans.xml",
     "/eaaf_pvp.beans.xml",
     "/eaaf_pvp_idp.beans.xml",
-    "/spring/SpringTest-context_simple_storage.xml" })
+    "/spring/SpringTest-context_simple_storage.xml"})
 @ActiveProfiles(profiles = {"deprecatedConfig"})
 @WebAppConfiguration
 @DirtiesContext(classMode = ClassMode.BEFORE_CLASS)
diff --git a/connector/src/test/java/at/asitplus/eidas/specific/connector/test/utils/CountrySelectionProcessImplTest.java b/connector/src/test/java/at/asitplus/eidas/specific/connector/test/utils/CountrySelectionProcessImplTest.java
index d0343eba..368a8e4e 100644
--- a/connector/src/test/java/at/asitplus/eidas/specific/connector/test/utils/CountrySelectionProcessImplTest.java
+++ b/connector/src/test/java/at/asitplus/eidas/specific/connector/test/utils/CountrySelectionProcessImplTest.java
@@ -17,8 +17,8 @@ import org.springframework.test.annotation.DirtiesContext.ClassMode;
 import org.springframework.test.context.ContextConfiguration;
 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
 
-import at.asitplus.eidas.specific.connector.MsEidasNodeConstants;
 import at.asitplus.eidas.specific.connector.processes.CountrySelectionProcessImpl;
+import at.asitplus.eidas.specific.core.MsEidasNodeConstants;
 import at.gv.egiz.eaaf.core.api.data.EaafConfigConstants;
 import at.gv.egiz.eaaf.core.api.idp.IConfiguration;
 import at.gv.egiz.eaaf.core.api.idp.process.ExecutionContext;
diff --git a/connector/src/test/resources/config/logback_config.xml b/connector/src/test/resources/config/logback_config.xml
index fa27a46a..bb3de3e8 100644
--- a/connector/src/test/resources/config/logback_config.xml
+++ b/connector/src/test/resources/config/logback_config.xml
@@ -89,10 +89,10 @@
   <logger name="at.gv.egiz.eidas.specific" additivity="false" level="info">
     <appender-ref ref="msnode"/>
   </logger>
-  <logger name="at.gv.egiz.eidas.specific.connector.logger.RevisionLogger" additivity="false" level="info">
+  <logger name="at.gv.egiz.eidas.specific.core.logger.RevisionLogger" additivity="false" level="info">
     <appender-ref ref="reversion"/>
   </logger>
-  <logger name="at.gv.egiz.eidas.specific.connector.logger.StatisticLogger" additivity="false" level="info">
+  <logger name="at.gv.egiz.eidas.specific.core.logger.StatisticLogger" additivity="false" level="info">
     <appender-ref ref="statistic"/>
   </logger>
   <root level="warn">
diff --git a/connector/src/test/resources/spring/SpringTest-context_basic_test.xml b/connector/src/test/resources/spring/SpringTest-context_basic_test.xml
deleted file mode 100644
index 5d052be9..00000000
--- a/connector/src/test/resources/spring/SpringTest-context_basic_test.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<beans xmlns="http://www.springframework.org/schema/beans"
-  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xmlns:context="http://www.springframework.org/schema/context"
-  xmlns:tx="http://www.springframework.org/schema/tx"
-  xmlns:aop="http://www.springframework.org/schema/aop"
-  xsi:schemaLocation="http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd
-    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
-    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd
-    http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">
-
-  <context:annotation-config />
-
-  <import resource="classpath:/SpringTest-context_authManager.xml" />
-
-  <bean id="BasicMSSpecificNodeConfig"
-    class="at.asitplus.eidas.specific.connector.config.BasicConfigurationProvider">
-    <constructor-arg
-      value="#{systemProperties['eidas.ms.configuration']}" />
-  </bean>
-
-</beans>
\ No newline at end of file
diff --git a/connector/src/test/resources/spring/SpringTest-context_healthcheck.xml b/connector/src/test/resources/spring/SpringTest-context_healthcheck.xml
deleted file mode 100644
index 3bac88e3..00000000
--- a/connector/src/test/resources/spring/SpringTest-context_healthcheck.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<beans xmlns="http://www.springframework.org/schema/beans"
-  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xmlns:context="http://www.springframework.org/schema/context"
-  xmlns:tx="http://www.springframework.org/schema/tx"
-  xmlns:aop="http://www.springframework.org/schema/aop"
-  xsi:schemaLocation="http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd
-    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
-    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd
-    http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">
-
-  <context:annotation-config />
-
-  <import resource="classpath:/SpringTest-context_authManager.xml" />
-
-  <bean id="basicConfig"
-        class="at.asitplus.eidas.specific.connector.config.SpringBootBasicConfigurationProvider" />
-
-  <bean id="eidasNodeMetadata"
-        class="at.asitplus.eidas.specific.connector.health.EidasNodeMetadataHealthIndicator" />
-
-</beans>
\ No newline at end of file
diff --git a/connector/src/test/resources/spring/SpringTest-context_simple_storage.xml b/connector/src/test/resources/spring/SpringTest-context_simple_storage.xml
deleted file mode 100644
index 5ee3e0b8..00000000
--- a/connector/src/test/resources/spring/SpringTest-context_simple_storage.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<beans xmlns="http://www.springframework.org/schema/beans"
-  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xmlns:context="http://www.springframework.org/schema/context"
-  xmlns:tx="http://www.springframework.org/schema/tx"
-  xmlns:aop="http://www.springframework.org/schema/aop"
-  xsi:schemaLocation="http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd
-    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
-    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd
-    http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">
-
-  <bean id="SimpleInMemoryTransactionStorage" 
-    class="at.asitplus.eidas.specific.connector.storage.SimpleInMemoryTransactionStorage" />
-
-</beans>
\ No newline at end of file
diff --git a/connector/src/test/resources/spring/SpringTest_connector.beans.xml b/connector/src/test/resources/spring/SpringTest_connector.beans.xml
index 5a1e3f36..9c66ca0f 100644
--- a/connector/src/test/resources/spring/SpringTest_connector.beans.xml
+++ b/connector/src/test/resources/spring/SpringTest_connector.beans.xml
@@ -10,23 +10,12 @@
     http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd
     http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
     http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">
-
-  <context:annotation-config />
-  <mvc:annotation-driven />
-  <mvc:default-servlet-handler />
-
-  <bean id="WebResourceConfiguration"
-    class="at.asitplus.eidas.specific.connector.config.StaticResourceConfiguration" />
+  
+  <import resource="classpath:/spring/SpringTest_core.beans.xml"/>
 
   <bean id="ProcessEngineSignalController"
     class="at.asitplus.eidas.specific.connector.controller.ProcessEngineSignalController" />
 
-  <bean id="AuthenticationManager"
-    class="at.asitplus.eidas.specific.connector.auth.AuthenticationManager" />
-
-  <bean id="AuthenticationDataBuilder"
-    class="at.asitplus.eidas.specific.connector.builder.AuthenticationDataBuilder" />
-
   <bean id="PVPEndPointConfiguration"
     class="at.asitplus.eidas.specific.connector.config.PvpEndPointConfiguration" />
 
@@ -45,10 +34,6 @@
   <bean id="AuthnRequestValidator"
     class="at.asitplus.eidas.specific.connector.verification.AuthnRequestValidator" />
 
-  <!-- bean id="SAMLVerificationEngine"
-        class="at.gv.egiz.eaaf.modules.pvp2.impl.verification.SamlVerificationEngine" /-->
-
-
   <bean id="pvpMetadataService"
     class="at.gv.egiz.eaaf.modules.pvp2.idp.impl.MetadataAction">
     <property name="pvpIdpCredentials">
@@ -62,54 +47,12 @@
     <property name="metadataProvider" ref="PVPMetadataProvider" />
   </bean>
 
-  <bean id="eaafProtocolAuthenticationService"
-    class="at.gv.egiz.eaaf.core.impl.idp.auth.services.ProtocolAuthenticationService">
-    <property name="guiBuilder" ref="mvcGUIBuilderImpl" />
-  </bean>
-
-  <bean id="securePendingRequestIdGeneration"
-    class="at.gv.egiz.eaaf.core.impl.utils.SecurePendingRequestIdGenerationStrategy" />
-
   <bean id="PVPMetadataProvider"
     class="at.asitplus.eidas.specific.connector.provider.PvpMetadataProvider" />
 
   <bean id="PVPSubjectNameGenerator"
     class="at.asitplus.eidas.specific.connector.builder.PvpSubjectNameGenerator" />
 
-  <bean id="LoALevelMapper"
-    class="at.asitplus.eidas.specific.connector.mapper.LoALevelMapper" />
-
-  <bean id="GUIBuilderConfigurationFactory"
-    class="at.asitplus.eidas.specific.connector.gui.GuiBuilderConfigurationFactory" />
-
-  <bean id="velocityGUIBuilderImpl"
-    class="at.asitplus.eidas.specific.connector.gui.DefaultVelocityGuiBuilderImpl" />
-
-  <bean id="mvcGUIBuilderImpl"
-    class="at.gv.egiz.eaaf.core.impl.gui.builder.SpringMvcGuiFormBuilderImpl" />
-
-  <bean id="templateEngine"
-    class="org.thymeleaf.spring5.SpringTemplateEngine">
-    <property name="templateResolver" ref="templateResolver" />
-  </bean>
-
-  <bean class="org.thymeleaf.spring5.view.ThymeleafViewResolver">
-    <property name="order" value="2" />
-    <property name="templateEngine" ref="templateEngine" />
-    <property name="characterEncoding" value="UTF-8" />
-  </bean>
-
-  <bean id="StatusMessageProvider"
-    class="at.asitplus.eidas.specific.connector.provider.StatusMessageProvider" />
-
-  <bean id="eidasRevisionLogger"
-    class="at.asitplus.eidas.specific.connector.logger.RevisionLogger" />
-
-  <bean id="eidasStatisticLogger"
-    class="at.asitplus.eidas.specific.connector.logger.StatisticLogger" />
-
-  <bean id="defaultErrorHandler"
-        class="at.gv.egiz.eaaf.core.impl.idp.auth.services.DefaultErrorService"/>
 
   <!-- Tasks -->
   <bean id="GenerateCountrySelectionFrameTask"
-- 
cgit v1.2.3