diff options
Diffstat (limited to 'id')
| -rw-r--r-- | id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/protocols/stork2/MOAAttributeProvider.java | 75 | 
1 files changed, 60 insertions, 15 deletions
| diff --git a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/protocols/stork2/MOAAttributeProvider.java b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/protocols/stork2/MOAAttributeProvider.java index a0ec1eb45..d7d6601c9 100644 --- a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/protocols/stork2/MOAAttributeProvider.java +++ b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/protocols/stork2/MOAAttributeProvider.java @@ -25,23 +25,31 @@ package at.gv.egovernment.moa.id.protocols.stork2;  import at.gv.egovernment.moa.id.auth.builder.BPKBuilder;  import at.gv.egovernment.moa.id.auth.data.IdentityLink;  import at.gv.egovernment.moa.id.auth.exception.BuildException; +import at.gv.egovernment.moa.id.data.IAuthData;  import at.gv.egovernment.moa.logging.Logger;  import eu.stork.peps.auth.commons.PersonalAttribute;  import eu.stork.peps.auth.commons.PersonalAttributeList; +import eu.stork.peps.auth.commons.STORKStatusCode;  import java.lang.reflect.InvocationTargetException;  import java.lang.reflect.Method;  import java.util.ArrayList;  import java.util.Collections;  import java.util.HashMap; +import java.util.List;  import java.util.Map; +import javassist.expr.Instanceof; +  /**   * @author bsuzic   *         Date: 2/19/14, Time: 4:42 PM + *          + * @author tlenz + * 		   Date: 23.10.14   */  public class MOAAttributeProvider { -    private final IdentityLink identityLink; +    private final IAuthData authData;      private static final Map<String, String> storkAttributeSimpleMapping;      private static final Map<String, String> storkAttributeFunctionMapping;      private final MOASTORKRequest moastorkRequest; @@ -50,17 +58,18 @@ public class MOAAttributeProvider {          Map<String, String> tempSimpleMap = new HashMap<String, String>();          tempSimpleMap.put("givenName", "getGivenName");          tempSimpleMap.put("surname", "getFamilyName"); -        tempSimpleMap.put("dateOfBirth", "getDateOfBirth"); +        tempSimpleMap.put("dateOfBirth", "getFormatedDateOfBirth");          storkAttributeSimpleMapping = Collections.unmodifiableMap(tempSimpleMap);          Map<String, String> tempFunctionMap = new HashMap<String, String>();          tempFunctionMap.put("eIdentifier", "geteIdentifier"); +        tempFunctionMap.put("ECApplicationRole","getECApplicationRole");          storkAttributeFunctionMapping = Collections.unmodifiableMap(tempFunctionMap);      } -    public MOAAttributeProvider(IdentityLink identityLink, MOASTORKRequest moastorkRequest) { -        this.identityLink = identityLink; +    public MOAAttributeProvider(IAuthData authData, MOASTORKRequest moastorkRequest) { +        this.authData = authData;          this.moastorkRequest = moastorkRequest; -        Logger.debug("identity " + identityLink.getIdentificationType() + " " + identityLink.getIdentificationValue()); +        Logger.debug("identity " + authData.getIdentificationType() + " " + authData.getIdentificationValue());      }      public void populateAttribute(PersonalAttributeList attributeList, PersonalAttribute requestedAttribute ) { @@ -68,8 +77,8 @@ public class MOAAttributeProvider {          if (storkAttributeSimpleMapping.containsKey(storkAttribute)) {              Logger.debug("Trying to get value for attribute using simple mapping [" + storkAttribute + "]");              try { -                Method method = identityLink.getClass().getDeclaredMethod(storkAttributeSimpleMapping.get(storkAttribute)); -                populateAttributeWithMethod(method, identityLink, attributeList, storkAttribute, requestedAttribute.isRequired()); +                Method method = authData.getClass().getDeclaredMethod(storkAttributeSimpleMapping.get(storkAttribute)); +                populateAttributeWithMethod(method, authData, attributeList, storkAttribute, requestedAttribute.isRequired());              } catch (NoSuchMethodException e) {                  Logger.error("Could not found MOA extraction method while getting attribute: " + storkAttribute);                  e.printStackTrace(); @@ -91,27 +100,63 @@ public class MOAAttributeProvider {      }      private String geteIdentifier() { -        Logger.debug("Using base urn for identification value: " + identityLink.getIdentificationType() + " and target country: " + moastorkRequest.getStorkAuthnRequest().getSpCountry()); +        Logger.debug("Using base urn for identification value: " + authData.getIdentificationType() + " and target country: " + moastorkRequest.getStorkAuthnRequest().getSpCountry());          try { -            return new BPKBuilder().buildStorkeIdentifier(identityLink, moastorkRequest.getStorkAuthnRequest().getSpCountry()); +            return new BPKBuilder().buildStorkeIdentifier(authData.getIdentificationType(), authData.getIdentificationValue(),  +            			moastorkRequest.getStorkAuthnRequest().getSpCountry());          } catch (BuildException be) {              Logger.error("Stork eid could not be constructed; " + be.getMessage());              return null; // TODO error          }      } +    private List<String> getECApplicationRole() {    	 +    	List<String> storkRoles = null; +    	 +    	if (authData.getAuthenticationRoles() != null  +    			&& authData.getAuthenticationRoles().size() > 0) { +    		 +    		 +    		//TODO: implement PVP role -> STORK role mapping +//    		storkRoles = new ArrayList<String>(); +//    		storkRoles.add("CIRCABC/viewer"); +    	 +    	} +    	 +    	return storkRoles; +    }      private void populateAttributeWithMethod(Method method, Object object, PersonalAttributeList attributeList, String storkAttribute, Boolean isRequired) {          try { -            String attributeValue = method.invoke(object, new Class[]{}).toString(); +            Object attributeValue = method.invoke(object, new Class[]{}).toString(); +                          PersonalAttribute newAttribute = new PersonalAttribute();              newAttribute.setName(storkAttribute); - -            newAttribute.setStatus("Available");              newAttribute.setIsRequired(isRequired); -            Logger.info("Got attribute value: " + attributeValue); -            newAttribute.setValue(new ArrayList<String>(Collections.singletonList(attributeValue))); -            attributeList.add(newAttribute); +             +            if (attributeValue != null) { +            	newAttribute.setStatus(STORKStatusCode.STATUS_AVAILABLE.name());            	 +            	Logger.info("Got attribute value: " + attributeValue); +             +            	if (attributeValue instanceof String)             +            		newAttribute.setValue(new ArrayList<String>(Collections.singletonList((String)attributeValue))); +             +            	else if (attributeValue instanceof List<?>) { +            		List<?> attributeValueList = (List<?>) attributeValue; +            		if (attributeValueList.size() > 0 && attributeValueList.get(0) instanceof String) +            			newAttribute.setValue((List<String>) attributeValueList); +            	 +            	} else { +            		Logger.error("Receive an unsupported type for attribute " + storkAttribute); +            	 +            	}             +            	attributeList.add(newAttribute); +            	 +            } else { +            	Logger.info("Attribute " + storkAttribute + " is not available."); +            	newAttribute.setStatus(STORKStatusCode.STATUS_NOT_AVAILABLE.name()); +            } +                      } catch (InvocationTargetException e) {              Logger.error("Invocation target exception while getting attribute: " + storkAttribute);              e.printStackTrace(); | 
