diff options
| -rw-r--r-- | id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/auth/builder/AuthenticationDataBuilder.java | 54 | 
1 files changed, 49 insertions, 5 deletions
| diff --git a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/auth/builder/AuthenticationDataBuilder.java b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/auth/builder/AuthenticationDataBuilder.java index 3c029f261..ed2cd3ecb 100644 --- a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/auth/builder/AuthenticationDataBuilder.java +++ b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/auth/builder/AuthenticationDataBuilder.java @@ -31,7 +31,10 @@ import java.security.PrivateKey;  import java.util.ArrayList;  import java.util.Arrays;  import java.util.Date; +import java.util.Iterator;  import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern;  import javax.naming.ldap.LdapName;  import javax.naming.ldap.Rdn; @@ -53,6 +56,9 @@ import at.gv.e_government.reference.namespace.mandates._20040701_.Mandator;  import at.gv.e_government.reference.namespace.persondata._20020228_.CorporateBodyType;  import at.gv.e_government.reference.namespace.persondata._20020228_.IdentificationType;  import at.gv.e_government.reference.namespace.persondata._20020228_.IdentificationType.Value; +import at.gv.e_government.reference.namespace.persondata._20020228_.PersonNameType; +import at.gv.e_government.reference.namespace.persondata._20020228_.PersonNameType.FamilyName; +import at.gv.e_government.reference.namespace.persondata._20020228_.PhysicalPersonType;  import at.gv.egovernment.moa.id.auth.MOAIDAuthConstants;  import at.gv.egovernment.moa.id.auth.data.AuthenticationSession;  import at.gv.egovernment.moa.id.auth.data.ExtendedSAMLAttribute; @@ -487,7 +493,8 @@ public class AuthenticationDataBuilder implements MOAIDAuthConstants {  			//build legal person short mandate  			if (extractor.containsAttribute(PVPConstants.MANDATE_LEG_PER_FULL_NAME_NAME) &&  					extractor.containsAttribute(PVPConstants.MANDATE_LEG_PER_SOURCE_PIN_NAME) && -					extractor.containsAttribute(PVPConstants.MANDATE_LEG_PER_SOURCE_PIN_TYPE_NAME)) {				 +					extractor.containsAttribute(PVPConstants.MANDATE_LEG_PER_SOURCE_PIN_TYPE_NAME)) { +				Logger.debug("Build short mandate for legal person ...");  				CorporateBodyType legalperson = new CorporateBodyType();  				IdentificationType legalID = new IdentificationType();  				Value idvalue = new Value(); @@ -505,10 +512,47 @@ public class AuthenticationDataBuilder implements MOAIDAuthConstants {  					extractor.containsAttribute(PVPConstants.MANDATE_NAT_PER_BIRTHDATE_NAME) &&  					extractor.containsAttribute(PVPConstants.MANDATE_NAT_PER_FAMILY_NAME_NAME) &&   					extractor.containsAttribute(PVPConstants.MANDATE_NAT_PER_GIVEN_NAME_NAME)) { -				throw new AssertionAttributeExtractorExeption("Federation with short mandates for natural persons are not supported!", null); -				 -				 -				 +				Logger.debug("Build short mandate for natural person ..."); +				PhysicalPersonType physPerson = new PhysicalPersonType(); +				PersonNameType persName = new PersonNameType();				 +				mandator.setPhysicalPerson(physPerson );				 +				physPerson.setName(persName ); +				FamilyName familyName = new FamilyName(); +				persName.getFamilyName().add(familyName ); +				IdentificationType persID = new IdentificationType(); +				physPerson.getIdentification().add(persID ); +				Value idValue = new Value(); +				persID.setValue(idValue ); +				 +				String[] pvp2GivenName = extractor.getAttribute(PVPConstants.MANDATE_NAT_PER_GIVEN_NAME_NAME).split(" "); +				for(int i=0; i<pvp2GivenName.length; i++) +					persName.getGivenName().add(pvp2GivenName[i]);				 +				familyName.setValue(extractor.getAttribute(PVPConstants.MANDATE_NAT_PER_FAMILY_NAME_NAME));			 +				physPerson.setDateOfBirth(extractor.getAttribute(PVPConstants.MANDATE_NAT_PER_BIRTHDATE_NAME)); +				 +				if (extractor.containsAttribute(PVPConstants.MANDATE_NAT_PER_SOURCE_PIN_NAME)) { +					persID.setType(Constants.URN_PREFIX_BASEID); +					idValue.setValue(extractor.getAttribute(PVPConstants.MANDATE_NAT_PER_SOURCE_PIN_NAME)); +					 +				} else { +					String[] pvp2bPK = extractor.getAttribute(PVPConstants.MANDATE_NAT_PER_BPK_NAME).split(":"); +					if (pvp2bPK.length == 2) { +						idValue.setValue(pvp2bPK[1]); +						 +						Pattern pattern = Pattern.compile(MOAIDAuthConstants.REGEX_PATTERN_TARGET); +						Matcher matcher = pattern.matcher(pvp2bPK[0]); +						if (matcher.matches()) +							persID.setType(Constants.URN_PREFIX_CDID + "+" +  pvp2bPK[0]);							 +						else +							persID.setType(Constants.URN_PREFIX_WBPK + "+" +  pvp2bPK[0]); +						 +					} else { +						Logger.warn("Receive mandator bPK from federation with an unsupported format. " + extractor.getAttribute(PVPConstants.MANDATE_NAT_PER_BPK_NAME)); +						throw new AssertionAttributeExtractorExeption("Receive mandator bPK from federation with an unsupported format."); +						 +					}					 +				} +										  			} else {  				Logger.error("Short mandate could not generated. Assertion contains not all attributes which are necessary.");  				throw new AssertionAttributeExtractorExeption("Assertion contains not all attributes which are necessary for mandate generation", null); | 
