From ae8fac8033b435de8d77cadb2a84088c2b8fceb6 Mon Sep 17 00:00:00 2001
From: Thomas Lenz <thomas.lenz@egiz.gv.at>
Date: Thu, 21 Feb 2019 11:30:46 +0100
Subject: fix problem with nonLatin characters add additional log messages

---
 .../tasks/CreateIdentityLinkTask.java              |  3 ++-
 .../tasks/ReceiveAuthnResponseTask.java            |  3 +--
 .../utils/eIDASResponseUtils.java                  | 25 ++++++++++++++++++++--
 3 files changed, 26 insertions(+), 5 deletions(-)

diff --git a/eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/authmodule_eIDASv2/tasks/CreateIdentityLinkTask.java b/eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/authmodule_eIDASv2/tasks/CreateIdentityLinkTask.java
index 096fc8cb..481f9e1d 100644
--- a/eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/authmodule_eIDASv2/tasks/CreateIdentityLinkTask.java
+++ b/eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/authmodule_eIDASv2/tasks/CreateIdentityLinkTask.java
@@ -100,7 +100,8 @@ public class CreateIdentityLinkTask extends AbstractAuthServletTask {
 		try{
 			AuthProcessDataWrapper authProcessData = pendingReq.getSessionData(AuthProcessDataWrapper.class);
 			ILightResponse eIDASResponse = authProcessData.getGenericDataFromSession(
-					Constants.DATA_FULL_EIDAS_RESPONSE, ILightResponse.class);																	
+					Constants.DATA_FULL_EIDAS_RESPONSE, ILightResponse.class);
+			
 		    Map<String, Object> simpleAttrMap = converteIDASAttrToSimpleMap(eIDASResponse.getAttributes().getAttributeMap());		    		    
 		    
 		    IIdentityLink identityLink = null;
diff --git a/eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/authmodule_eIDASv2/tasks/ReceiveAuthnResponseTask.java b/eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/authmodule_eIDASv2/tasks/ReceiveAuthnResponseTask.java
index 3acc9719..93e25102 100644
--- a/eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/authmodule_eIDASv2/tasks/ReceiveAuthnResponseTask.java
+++ b/eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/authmodule_eIDASv2/tasks/ReceiveAuthnResponseTask.java
@@ -30,7 +30,6 @@ import javax.servlet.http.HttpServletResponse;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.ApplicationContext;
 import org.springframework.stereotype.Component;
 
 import at.asitplus.eidas.specific.connector.MSConnectorEventCodes;
@@ -50,7 +49,6 @@ import eu.eidas.auth.commons.light.ILightResponse;
 public class ReceiveAuthnResponseTask extends AbstractAuthServletTask {
 	private static final Logger log = LoggerFactory.getLogger(ReceiveAuthnResponseTask.class);
 	
-	@Autowired private ApplicationContext context;
 	@Autowired private IConfiguration basicConfig;
 	@Autowired private eIDASAttributeRegistry attrRegistry;
 		
@@ -65,6 +63,7 @@ public class ReceiveAuthnResponseTask extends AbstractAuthServletTask {
 			}  
 			
 	    	log.debug("Receive eIDAS response with RespId:" + eIDASResponse.getId() + " for ReqId:" + eIDASResponse.getInResponseToId());
+	    	log.trace("Full eIDAS-Resp: " + eIDASResponse.toString());
 			revisionsLogger.logEvent(pendingReq, MSConnectorEventCodes.RESPONSE_FROM_EIDAS_NODE, eIDASResponse.getId());
 	    	
 	    	
diff --git a/eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/authmodule_eIDASv2/utils/eIDASResponseUtils.java b/eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/authmodule_eIDASv2/utils/eIDASResponseUtils.java
index cc6d54c4..8422f204 100644
--- a/eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/authmodule_eIDASv2/utils/eIDASResponseUtils.java
+++ b/eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/authmodule_eIDASv2/utils/eIDASResponseUtils.java
@@ -27,6 +27,7 @@ import java.util.List;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
+import org.apache.commons.lang3.StringUtils;
 import org.joda.time.DateTime;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -39,6 +40,7 @@ import eu.eidas.auth.commons.attribute.AttributeDefinition;
 import eu.eidas.auth.commons.attribute.AttributeValue;
 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;
 
 public class eIDASResponseUtils {
@@ -83,20 +85,39 @@ public class eIDASResponseUtils {
 		
 	}
 
+	//TODO: check possible problem with nonLatinCharacters	
     public static List<String> translateStringListAttribute(AttributeDefinition<?> attributeDefinition, ImmutableList<? extends AttributeValue<?>> attributeValues) {
         final List<String> stringListAttribute = new ArrayList<String>();
         AttributeValueMarshaller<?> attributeValueMarshaller = attributeDefinition.getAttributeValueMarshaller();
         for (AttributeValue<?> attributeValue : attributeValues) {
             String valueString = null;
             try {
-                valueString = attributeValueMarshaller.marshal((AttributeValue) attributeValue);
-                stringListAttribute.add(valueString);
+            	valueString = attributeValueMarshaller.marshal((AttributeValue) attributeValue);
+            	
+            	log.trace("Find attr: " + attributeDefinition.getFriendlyName() 
+            				+ " with value: " + attributeValue.toString() 
+            				+ " nonLatinFlag: " + attributeValue.isNonLatinScriptAlternateVersion()
+            				+ " needTransliteration: " + AttributeValueTransliterator.needsTransliteration(valueString));
+            	            	
+            	//if (attributeValue.isNonLatinScriptAlternateVersion()) {
+            	if (!AttributeValueTransliterator.needsTransliteration(valueString)) {
+            		stringListAttribute.add(0, valueString);
+            		
+            	} else {
+            		log.trace("Find 'needsTransliteration' flag. Setting this value at last list element ... ");
+            		stringListAttribute.add(valueString);
+            		
+            	}
+            	
             } catch (AttributeValueMarshallingException e) {
                 throw new IllegalStateException(e);
                 
             }
         }
         
+        log.trace("Extract values: " + StringUtils.join(stringListAttribute, ",") 
+        	+ " for attr: " + attributeDefinition.getFriendlyName());
+        
         return stringListAttribute;
         
     }
-- 
cgit v1.2.3