aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas <>2022-08-16 10:56:54 +0200
committerThomas <>2022-08-16 10:56:54 +0200
commitca50cb8dda0a24b5a4589db126bfab8d0d885b00 (patch)
tree0947baf07a77f6f0b2fa2368fc92f87510340770
parent0ae0c83da2f970bb8987f116286857e07b0c02b1 (diff)
downloadNational_eIDAS_Gateway-ca50cb8dda0a24b5a4589db126bfab8d0d885b00.tar.gz
National_eIDAS_Gateway-ca50cb8dda0a24b5a4589db126bfab8d0d885b00.tar.bz2
National_eIDAS_Gateway-ca50cb8dda0a24b5a4589db126bfab8d0d885b00.zip
feat(proxy): add support for custom eIDAS attribute-handler into ProxyEidasAttributeRegistry
This allow more sopisticated attribute-processing than simple mapping to IDA attributes
-rw-r--r--basicConfig/ms-proxyservice/misc/idaAttributeMapping.json16
-rw-r--r--modules/eidas_proxy-sevice/src/main/java/at/asitplus/eidas/specific/modules/msproxyservice/dto/attributes/AttrMappingElement.java6
-rw-r--r--modules/eidas_proxy-sevice/src/main/java/at/asitplus/eidas/specific/modules/msproxyservice/service/ProxyEidasAttributeRegistry.java18
-rw-r--r--modules/eidas_proxy-sevice/src/test/java/at/asitplus/eidas/specific/modules/msproxyservice/test/services/ProxyEidasAttributeRegistryTest.java20
-rw-r--r--modules/eidas_proxy-sevice/src/test/resources/config/additional-attributes.xml19
-rw-r--r--modules/eidas_proxy-sevice/src/test/resources/config/idaAttributeMapping.json24
6 files changed, 102 insertions, 1 deletions
diff --git a/basicConfig/ms-proxyservice/misc/idaAttributeMapping.json b/basicConfig/ms-proxyservice/misc/idaAttributeMapping.json
index e5495547..3de4b8a9 100644
--- a/basicConfig/ms-proxyservice/misc/idaAttributeMapping.json
+++ b/basicConfig/ms-proxyservice/misc/idaAttributeMapping.json
@@ -127,6 +127,22 @@
}
},
{
+ "eidasAttribute": "http://e-justice.europa.eu/attributes/naturalperson/eJusticeNaturalPersonRole",
+ "specificAttributeHandlerClass": "at.asitplus.eidas.specific.modules.msproxyservice.handler.EJusticePersonRoleHandler",
+ "type": {
+ "mds": false,
+ "autoIncludeWithMandates": false
+ }
+ },
+ {
+ "eidasAttribute": "http://e-justice.europa.eu/attributes/legalperson/eJusticeLegalPersonRole",
+ "specificAttributeHandlerClass": "at.asitplus.eidas.specific.modules.msproxyservice.handler.EJusticePersonRoleHandler",
+ "type": {
+ "mds": false,
+ "autoIncludeWithMandates": false
+ }
+ },
+ {
"eidasAttribute": "*",
"idaAttribute": {
"basic": "urn:oid:1.2.40.0.10.2.1.1.261.32",
diff --git a/modules/eidas_proxy-sevice/src/main/java/at/asitplus/eidas/specific/modules/msproxyservice/dto/attributes/AttrMappingElement.java b/modules/eidas_proxy-sevice/src/main/java/at/asitplus/eidas/specific/modules/msproxyservice/dto/attributes/AttrMappingElement.java
index cf106bad..2dffbc2d 100644
--- a/modules/eidas_proxy-sevice/src/main/java/at/asitplus/eidas/specific/modules/msproxyservice/dto/attributes/AttrMappingElement.java
+++ b/modules/eidas_proxy-sevice/src/main/java/at/asitplus/eidas/specific/modules/msproxyservice/dto/attributes/AttrMappingElement.java
@@ -13,6 +13,8 @@ import lombok.Data;
@JsonPropertyOrder({
"eidasAttribute",
"idaAttribute",
+ "addionalRequiredAttributes",
+ "specificAttributeHandlerClass",
"type"
})
@Data
@@ -34,6 +36,10 @@ public class AttrMappingElement {
@JsonProperty("addionalRequiredAttributes")
private List<String> addionalRequiredAttributes;
+
+ @JsonProperty("specificAttributeHandlerClass")
+ private String specificAttributeHandlerClass;
+
/**
* attribute characteristics.
*/
diff --git a/modules/eidas_proxy-sevice/src/main/java/at/asitplus/eidas/specific/modules/msproxyservice/service/ProxyEidasAttributeRegistry.java b/modules/eidas_proxy-sevice/src/main/java/at/asitplus/eidas/specific/modules/msproxyservice/service/ProxyEidasAttributeRegistry.java
index a6a50100..a0c99019 100644
--- a/modules/eidas_proxy-sevice/src/main/java/at/asitplus/eidas/specific/modules/msproxyservice/service/ProxyEidasAttributeRegistry.java
+++ b/modules/eidas_proxy-sevice/src/main/java/at/asitplus/eidas/specific/modules/msproxyservice/service/ProxyEidasAttributeRegistry.java
@@ -111,7 +111,7 @@ public class ProxyEidasAttributeRegistry {
}
/**
- * Get eIDAS related IDA attribute.
+ * Get eIDAS related IDA attribute for a specific mode-operation.
*
* @param eidasAttributeName Name of the eIDAS attribute.
* @param withMandates <code>true</code> if mandates are supported, otherwise <code>false</code>
@@ -127,6 +127,22 @@ public class ProxyEidasAttributeRegistry {
}
+ /**
+ * Get eIDAS related custom attribute-handler.
+ *
+ * @param eidasAttributeName Name of the eIDAS attribute.
+ * @return full classname of the handler implementation if available
+ */
+ public Optional<String> mapEidasAttributeToAttributeHandler(String eidasAttributeName) {
+ return attributeConfiguration.stream()
+ .filter(el -> el.getEidasAttributeName().equals(eidasAttributeName))
+ .filter(el -> StringUtils.isNotEmpty(el.getSpecificAttributeHandlerClass()))
+ .findFirst()
+ .map(el -> el.getSpecificAttributeHandlerClass());
+
+ }
+
+
@PostConstruct
private void initialize() throws EaafConfigurationException {
final String attrConfPath = basicConfig.getBasicConfiguration(
diff --git a/modules/eidas_proxy-sevice/src/test/java/at/asitplus/eidas/specific/modules/msproxyservice/test/services/ProxyEidasAttributeRegistryTest.java b/modules/eidas_proxy-sevice/src/test/java/at/asitplus/eidas/specific/modules/msproxyservice/test/services/ProxyEidasAttributeRegistryTest.java
index 8d417c1a..fb7d257e 100644
--- a/modules/eidas_proxy-sevice/src/test/java/at/asitplus/eidas/specific/modules/msproxyservice/test/services/ProxyEidasAttributeRegistryTest.java
+++ b/modules/eidas_proxy-sevice/src/test/java/at/asitplus/eidas/specific/modules/msproxyservice/test/services/ProxyEidasAttributeRegistryTest.java
@@ -127,6 +127,26 @@ public class ProxyEidasAttributeRegistryTest {
}
+ @Test
+ public void specificAttributeHandler() {
+ assertFalse("find wrong attribute",
+ attrRegistry.mapEidasAttributeToAttributeHandler(
+ "http://eidas.europa.eu/attributes/jUnit/no/custom/handler").isPresent());
+
+ assertFalse("find wrong attribute",
+ attrRegistry.mapEidasAttributeToAttributeHandler(
+ "http://eidas.europa.eu/attributes/naturalperson/representative/DateOfBirth").isPresent());
+
+
+ Optional<String> attr2 = attrRegistry.mapEidasAttributeToAttributeHandler(
+ "http://e-justice.europa.eu/attributes/naturalperson/eJusticeNaturalPersonRole");
+ assertTrue("find wrong IDA mapping", attr2.isPresent());
+ assertEquals("find wrong specific attribute-handler",
+ "at.asitplus.eidas.specific.modules.msproxyservice.handler.EJusticePersonRoleHandler", attr2.get());
+
+ }
+
+
private void checkAttributeMapping(String eidasAttr, boolean withMandates, List<String> idaAttributes) {
@NonNull
Set<String> idaAttrResult = attrRegistry.getIdaAttributesForEidasAttribute(eidasAttr, withMandates);
diff --git a/modules/eidas_proxy-sevice/src/test/resources/config/additional-attributes.xml b/modules/eidas_proxy-sevice/src/test/resources/config/additional-attributes.xml
index 6510546e..e40ebdc4 100644
--- a/modules/eidas_proxy-sevice/src/test/resources/config/additional-attributes.xml
+++ b/modules/eidas_proxy-sevice/src/test/resources/config/additional-attributes.xml
@@ -36,4 +36,23 @@
<entry key="2.XmlType.NamespacePrefix">xs</entry>
<entry key="2.AttributeValueMarshaller">eu.eidas.auth.commons.attribute.impl.LiteralStringAttributeValueMarshaller</entry>
+ <entry key="3.NameUri">http://e-justice.europa.eu/attributes/naturalperson/eJusticeNaturalPersonRole</entry>
+ <entry key="3.FriendlyName">eJusticeNaturalPersonRole</entry>
+ <entry key="3.PersonType">NaturalPerson</entry>
+ <entry key="3.Required">false</entry>
+ <entry key="3.XmlType.NamespaceUri">http://www.w3.org/2001/XMLSchema</entry>
+ <entry key="3.XmlType.LocalPart">string</entry>
+ <entry key="3.XmlType.NamespacePrefix">xs</entry>
+ <entry key="3.AttributeValueMarshaller">eu.eidas.auth.commons.attribute.impl.LiteralStringAttributeValueMarshaller</entry>
+
+ <entry key="4.NameUri">http://e-justice.europa.eu/attributes/legalperson/eJusticeLegalPersonRole</entry>
+ <entry key="4.FriendlyName">eJusticeLegalPersonRole</entry>
+ <entry key="4.PersonType">LegalPerson</entry>
+ <entry key="4.Required">false</entry>
+ <entry key="4.XmlType.NamespaceUri">http://www.w3.org/2001/XMLSchema</entry>
+ <entry key="4.XmlType.LocalPart">string</entry>
+ <entry key="4.XmlType.NamespacePrefix">xs</entry>
+ <entry key="4.AttributeValueMarshaller">eu.eidas.auth.commons.attribute.impl.LiteralStringAttributeValueMarshaller</entry>
+
+
</properties>
diff --git a/modules/eidas_proxy-sevice/src/test/resources/config/idaAttributeMapping.json b/modules/eidas_proxy-sevice/src/test/resources/config/idaAttributeMapping.json
index 7e41d8f6..daaaa37d 100644
--- a/modules/eidas_proxy-sevice/src/test/resources/config/idaAttributeMapping.json
+++ b/modules/eidas_proxy-sevice/src/test/resources/config/idaAttributeMapping.json
@@ -129,6 +129,22 @@
}
},
{
+ "eidasAttribute": "http://e-justice.europa.eu/attributes/naturalperson/eJusticeNaturalPersonRole",
+ "specificAttributeHandlerClass": "at.asitplus.eidas.specific.modules.msproxyservice.handler.EJusticePersonRoleHandler",
+ "type": {
+ "mds": false,
+ "autoIncludeWithMandates": false
+ }
+ },
+ {
+ "eidasAttribute": "http://e-justice.europa.eu/attributes/legalperson/eJusticeLegalPersonRole",
+ "specificAttributeHandlerClass": "at.asitplus.eidas.specific.modules.msproxyservice.handler.EJusticePersonRoleHandler",
+ "type": {
+ "mds": false,
+ "autoIncludeWithMandates": false
+ }
+ },
+ {
"eidasAttribute": "*",
"idaAttribute": {
"basic": "urn:oid:1.2.40.0.10.2.1.1.261.32",
@@ -179,5 +195,13 @@
"mds": false,
"autoIncludeWithMandates": false
}
+ },
+ {
+ "eidasAttribute": "http://eidas.europa.eu/attributes/jUnit/no/custom/handler",
+ "specificAttributeHandlerClass": "",
+ "type": {
+ "mds": false,
+ "autoIncludeWithMandates": false
+ }
}
] \ No newline at end of file