From 363e8657cd060f9a585b8e1dbac88aa12457238f Mon Sep 17 00:00:00 2001 From: Thomas <> Date: Tue, 3 May 2022 14:47:03 +0200 Subject: fix(eidas): catch IndexOutOfBand exception in case of eIDAS Attribute that has no attribute-value --- .../eidas/v2/tasks/CreateIdentityLinkTask.java | 22 +++++++++++++++------- .../auth/eidas/v2/utils/EidasResponseUtils.java | 14 ++++++-------- 2 files changed, 21 insertions(+), 15 deletions(-) (limited to 'modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific') diff --git a/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/CreateIdentityLinkTask.java b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/CreateIdentityLinkTask.java index ce737526..58ab0c6a 100644 --- a/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/CreateIdentityLinkTask.java +++ b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/CreateIdentityLinkTask.java @@ -445,15 +445,23 @@ public class CreateIdentityLinkTask extends AbstractAuthServletTask { } else { final List natPersonIdObj = EidasResponseUtils .translateStringListAttribute(el, attributeMap.get(el)); - final String stringAttr = natPersonIdObj.get(0); - if (StringUtils.isNotEmpty(stringAttr)) { - result.put(el.getFriendlyName(), stringAttr); - log.trace("Find attr '" + el.getFriendlyName() + "' with value: " + stringAttr); - + if (natPersonIdObj.isEmpty()) { + log.info("Ignore attribute: {}, because no attributeValue was found", + el.getNameUri()); + } else { - log.info("Ignore empty 'String' attribute"); - } + final String stringAttr = natPersonIdObj.get(0); + if (StringUtils.isNotEmpty(stringAttr)) { + result.put(el.getFriendlyName(), stringAttr); + log.trace("Find attr '" + el.getFriendlyName() + "' with value: " + stringAttr); + } else { + log.info("Ignore empty 'String' attributeValue for: {}", + el.getNameUri()); + + } + + } } } diff --git a/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/utils/EidasResponseUtils.java b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/utils/EidasResponseUtils.java index c8c5a069..ced6ffe6 100644 --- a/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/utils/EidasResponseUtils.java +++ b/modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/utils/EidasResponseUtils.java @@ -32,8 +32,6 @@ import javax.annotation.Nullable; import org.apache.commons.lang3.StringUtils; import org.joda.time.DateTime; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; @@ -46,10 +44,10 @@ import eu.eidas.auth.commons.attribute.AttributeValueMarshaller; import eu.eidas.auth.commons.attribute.AttributeValueMarshallingException; import eu.eidas.auth.commons.attribute.AttributeValueTransliterator; import eu.eidas.auth.commons.protocol.eidas.impl.PostalAddress; +import lombok.extern.slf4j.Slf4j; +@Slf4j public class EidasResponseUtils { - private static final Logger log = LoggerFactory.getLogger(EidasResponseUtils.class); - public static final String PERSONALIDENIFIER_VALIDATION_PATTERN = "^[A-Z,a-z]{2}/[A-Z,a-z]{2}/.*"; /** @@ -97,11 +95,11 @@ public class EidasResponseUtils { * @param attributeValues Attributes from eIDAS response * @return Set of attribute values. If more then one value than the first value contains the 'Latin' value. */ - // TODO: check possible problem with nonLatinCharacters + // TODO: check possible problem with nonLatinCharacters public static List translateStringListAttribute(AttributeDefinition attributeDefinition, ImmutableSet> attributeValues) { final List stringListAttribute = new ArrayList<>(); - if (attributeValues != null) { + if (attributeValues != null && !attributeValues.isEmpty()) { final AttributeValueMarshaller attributeValueMarshaller = attributeDefinition .getAttributeValueMarshaller(); for (final AttributeValue attributeValue : attributeValues.asList()) { @@ -129,12 +127,12 @@ public class EidasResponseUtils { } } - log.trace("Extract values: {} for attr: {}", StringUtils.join(stringListAttribute, ","), attributeDefinition.getFriendlyName()); } else { - log.info("Can not extract infos from 'null' attribute value"); + log.info("Can not extract infos from '{}' attributeValue for attribute: {}", + attributeValues != null ? "empty" : "null", attributeDefinition.getNameUri()); } -- cgit v1.2.3