diff options
Diffstat (limited to 'connector/src/test')
| -rw-r--r-- | connector/src/test/java/at/asitplus/eidas/specific/connector/test/utils/AuthenticationDataBuilderTest.java | 206 | 
1 files changed, 204 insertions, 2 deletions
| diff --git a/connector/src/test/java/at/asitplus/eidas/specific/connector/test/utils/AuthenticationDataBuilderTest.java b/connector/src/test/java/at/asitplus/eidas/specific/connector/test/utils/AuthenticationDataBuilderTest.java index 552c448e..277138ef 100644 --- a/connector/src/test/java/at/asitplus/eidas/specific/connector/test/utils/AuthenticationDataBuilderTest.java +++ b/connector/src/test/java/at/asitplus/eidas/specific/connector/test/utils/AuthenticationDataBuilderTest.java @@ -1,6 +1,10 @@  package at.asitplus.eidas.specific.connector.test.utils;  import static at.asitplus.eidas.specific.connector.MsEidasNodeConstants.PROP_CONFIG_SP_NEW_EID_MODE; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertThrows; +import static org.junit.Assert.assertTrue;  import java.io.IOException;  import java.security.PublicKey; @@ -176,9 +180,169 @@ public class AuthenticationDataBuilderTest {      Assert.assertEquals("testIdentity flag",           isTestIdentity ? EidIdentityStatusLevelValues.TESTIDENTITY : EidIdentityStatusLevelValues.IDENTITY,  -        ((EidAuthenticationData)authData).getEidStatus()); +        ((EidAuthenticationData)authData).getEidStatus());         +    assertFalse("mandate flag", ((EidAuthenticationData)authData).isUseMandate()); +     +  } +   +  @Test +  public void eidasProxyModeWithJurMandate() throws EaafAuthenticationException, EaafStorageException { +    // initialize state     +    injectRepresentativeInfosIntoSession(); +     +    String commonMandate = RandomStringUtils.randomAlphabetic(10); +     +    // set constant country-code and sourcePin to check hashed eIDAS identifier +    String sourcePinMandate = "asfdsadfsadfsafsdafsadfasr";        +    spConfig.put("target", EaafConstants.URN_PREFIX_EIDAS + "AT+EE"); +     +    // set nat. person mandate information +    pendingReq.getSessionData(AuthProcessDataWrapper.class).setUseMandates(true); +    pendingReq.getSessionData(AuthProcessDataWrapper.class) +        .setGenericDataToSession(PvpAttributeDefinitions.MANDATE_LEG_PER_FULL_NAME_NAME, commonMandate); +    pendingReq.getSessionData(AuthProcessDataWrapper.class) +        .setGenericDataToSession(PvpAttributeDefinitions.MANDATE_LEG_PER_SOURCE_PIN_NAME, sourcePinMandate); +    pendingReq.getSessionData(AuthProcessDataWrapper.class) +        .setGenericDataToSession(PvpAttributeDefinitions.MANDATE_LEG_PER_SOURCE_PIN_TYPE_NAME,  +            EaafConstants.URN_PREFIX_BASEID + "+XFN");             +     +    // execute test +    IAuthData authData = authenticationDataBuilder.buildAuthenticationData(pendingReq); + +     +    // validate state +    Assert.assertNotNull("AuthData null", authData);     +    assertTrue("mandate flag", ((EidAuthenticationData)authData).isUseMandate()); +     +    //check mandate informations +    checkGenericAttribute(authData, PvpAttributeDefinitions.MANDATE_LEG_PER_FULL_NAME_NAME, commonMandate); +    checkGenericAttribute(authData, MsProxyServiceConstants.ATTR_EIDAS_JUR_MANDATOR_PERSONAL_IDENTIFIER,  +        "AT/EE/oaAGaV/zIHSf6rcB0TIOqjWPoOU="); +         +  } +   +  @Test +  public void eidasProxyModeWithJurMandateMissingAttribute() throws EaafAuthenticationException, EaafStorageException { +    // initialize state     +    injectRepresentativeInfosIntoSession(); +     +    // set constant country-code and sourcePin to check hashed eIDAS identifier +    String sourcePinMandate = "asfdsadfsadfsafsdafsadfasr";        +    spConfig.put("target", EaafConstants.URN_PREFIX_EIDAS + "AT+EE"); +     +    // set nat. person mandate information +    pendingReq.getSessionData(AuthProcessDataWrapper.class).setUseMandates(true); +    pendingReq.getSessionData(AuthProcessDataWrapper.class) +        .setGenericDataToSession(PvpAttributeDefinitions.MANDATE_LEG_PER_SOURCE_PIN_NAME, sourcePinMandate); +    pendingReq.getSessionData(AuthProcessDataWrapper.class) +        .setGenericDataToSession(PvpAttributeDefinitions.MANDATE_LEG_PER_SOURCE_PIN_TYPE_NAME,  +            EaafConstants.URN_PREFIX_BASEID + "+XFN");             +     +    // execute test +    // execute test +    EaafAuthenticationException error = assertThrows(EaafAuthenticationException.class,  +        () -> authenticationDataBuilder.buildAuthenticationData(pendingReq)); +    Assert.assertEquals("wrong errorId", "builder.11", error.getErrorId()); +         +  } +   +  @Test +  public void eidasProxyModeWithNatMandate() throws EaafAuthenticationException, EaafStorageException { +    // initialize state     +    injectRepresentativeInfosIntoSession(); +     +    String givenNameMandate = RandomStringUtils.randomAlphabetic(10); +    String familyNameMandate = RandomStringUtils.randomAlphabetic(10); +    String dateOfBirthMandate = "1957-09-15"; +    String bpkMandate = RandomStringUtils.randomAlphanumeric(10); +         +    // set nat. person mandate information +    pendingReq.getSessionData(AuthProcessDataWrapper.class).setUseMandates(true); +    pendingReq.getSessionData(AuthProcessDataWrapper.class) +        .setGenericDataToSession(PvpAttributeDefinitions.MANDATE_NAT_PER_GIVEN_NAME_NAME, givenNameMandate); +    pendingReq.getSessionData(AuthProcessDataWrapper.class) +        .setGenericDataToSession(PvpAttributeDefinitions.MANDATE_NAT_PER_FAMILY_NAME_NAME, familyNameMandate); +    pendingReq.getSessionData(AuthProcessDataWrapper.class) +        .setGenericDataToSession(PvpAttributeDefinitions.MANDATE_NAT_PER_BIRTHDATE_NAME, dateOfBirthMandate); +    pendingReq.getSessionData(AuthProcessDataWrapper.class) +        .setGenericDataToSession(PvpAttributeDefinitions.MANDATE_NAT_PER_BPK_NAME, "AT+XX:" + bpkMandate); +             +    // execute test +    IAuthData authData = authenticationDataBuilder.buildAuthenticationData(pendingReq); + +     +    // validate state +    Assert.assertNotNull("AuthData null", authData);     +    assertTrue("mandate flag", ((EidAuthenticationData)authData).isUseMandate()); +     +    //check mandate informations +    checkGenericAttribute(authData, PvpAttributeDefinitions.MANDATE_NAT_PER_GIVEN_NAME_NAME, givenNameMandate); +    checkGenericAttribute(authData, PvpAttributeDefinitions.MANDATE_NAT_PER_FAMILY_NAME_NAME, familyNameMandate); +    checkGenericAttribute(authData, PvpAttributeDefinitions.MANDATE_NAT_PER_BIRTHDATE_NAME, "1957-09-15"); +    checkGenericAttribute(authData, MsProxyServiceConstants.ATTR_EIDAS_NAT_MANDATOR_PERSONAL_IDENTIFIER, bpkMandate); +         +  } +   +  @Test +  public void eidasProxyModeWithNatMandateWrongBpkFormat() throws EaafAuthenticationException, EaafStorageException { +    // initialize state +    injectRepresentativeInfosIntoSession(); +     +    String givenNameMandate = RandomStringUtils.randomAlphabetic(10); +    String familyNameMandate = RandomStringUtils.randomAlphabetic(10); +    String dateOfBirthMandate = "1957-09-15"; +    String bpkMandate = RandomStringUtils.randomAlphanumeric(10); +         +    // set nat. person mandate information +    pendingReq.getSessionData(AuthProcessDataWrapper.class).setUseMandates(true); +    pendingReq.getSessionData(AuthProcessDataWrapper.class) +        .setGenericDataToSession(PvpAttributeDefinitions.MANDATE_NAT_PER_GIVEN_NAME_NAME, givenNameMandate); +    pendingReq.getSessionData(AuthProcessDataWrapper.class) +        .setGenericDataToSession(PvpAttributeDefinitions.MANDATE_NAT_PER_FAMILY_NAME_NAME, familyNameMandate); +    pendingReq.getSessionData(AuthProcessDataWrapper.class) +        .setGenericDataToSession(PvpAttributeDefinitions.MANDATE_NAT_PER_BIRTHDATE_NAME, dateOfBirthMandate); +    pendingReq.getSessionData(AuthProcessDataWrapper.class) +        .setGenericDataToSession(PvpAttributeDefinitions.MANDATE_NAT_PER_BPK_NAME, bpkMandate); +      +    // execute test +    IAuthData authData = authenticationDataBuilder.buildAuthenticationData(pendingReq); + +     +    // validate state +    Assert.assertNotNull("AuthData null", authData);     +    assertTrue("mandate flag", ((EidAuthenticationData)authData).isUseMandate()); +    //check mandate informations +    checkGenericAttribute(authData, PvpAttributeDefinitions.MANDATE_NAT_PER_GIVEN_NAME_NAME, givenNameMandate); +    checkGenericAttribute(authData, PvpAttributeDefinitions.MANDATE_NAT_PER_FAMILY_NAME_NAME, familyNameMandate); +    checkGenericAttribute(authData, PvpAttributeDefinitions.MANDATE_NAT_PER_BIRTHDATE_NAME, "1957-09-15"); +    checkGenericAttribute(authData, MsProxyServiceConstants.ATTR_EIDAS_NAT_MANDATOR_PERSONAL_IDENTIFIER, bpkMandate); +         +  } +   +  @Test +  public void eidasProxyModeWithNatMandateMissingAttribute() throws EaafAuthenticationException, EaafStorageException { +    // initialize state +    injectRepresentativeInfosIntoSession(); +     +    String familyNameMandate = RandomStringUtils.randomAlphabetic(10); +    String dateOfBirthMandate = "1957-09-15"; +    String bpkMandate = RandomStringUtils.randomAlphanumeric(10); +         +    // set nat. person mandate information +    pendingReq.getSessionData(AuthProcessDataWrapper.class).setUseMandates(true); +    pendingReq.getSessionData(AuthProcessDataWrapper.class) +        .setGenericDataToSession(PvpAttributeDefinitions.MANDATE_NAT_PER_FAMILY_NAME_NAME, familyNameMandate); +    pendingReq.getSessionData(AuthProcessDataWrapper.class) +        .setGenericDataToSession(PvpAttributeDefinitions.MANDATE_NAT_PER_BIRTHDATE_NAME, dateOfBirthMandate); +    pendingReq.getSessionData(AuthProcessDataWrapper.class) +        .setGenericDataToSession(PvpAttributeDefinitions.MANDATE_NAT_PER_BPK_NAME, bpkMandate); +    // execute test +    EaafAuthenticationException error = assertThrows(EaafAuthenticationException.class,  +        () -> authenticationDataBuilder.buildAuthenticationData(pendingReq)); +    Assert.assertEquals("wrong errorId", "builder.11", error.getErrorId()); +            }    @Test @@ -203,7 +367,7 @@ public class AuthenticationDataBuilderTest {      Assert.assertEquals("testIdentity flag",           isTestIdentity ? EidIdentityStatusLevelValues.TESTIDENTITY : EidIdentityStatusLevelValues.IDENTITY,           ((EidAuthenticationData)authData).getEidStatus()); - +          String authBlock = authData.getGenericData(Constants.SZR_AUTHBLOCK, String.class);      String eidasBind = authData.getGenericData(Constants.EIDAS_BIND, String.class); @@ -276,6 +440,44 @@ public class AuthenticationDataBuilderTest {    } +  private void injectRepresentativeInfosIntoSession() throws EaafStorageException { +    boolean isTestIdentity = RandomUtils.nextBoolean(); +    pendingReq.getSessionData(EidAuthProcessDataWrapper.class).setTestIdentity(isTestIdentity); +    pendingReq.getSessionData(AuthProcessDataWrapper.class).setEidProcess(true); +     +    String givenName = RandomStringUtils.randomAlphabetic(10); +    String familyName = RandomStringUtils.randomAlphabetic(10); +    String dateOfBirth = "1956-12-08"; +    String bpk = RandomStringUtils.randomAlphanumeric(10); +    String cc = pendingReq.getSessionData(AuthProcessDataWrapper.class) +        .getGenericDataFromSession(PvpAttributeDefinitions.EID_ISSUING_NATION_NAME, String.class); +    String spC = RandomStringUtils.randomAlphabetic(2).toUpperCase(); +    spConfig.put("target", EaafConstants.URN_PREFIX_EIDAS + cc + "+" + spC); +     +    pendingReq.getSessionData(AuthProcessDataWrapper.class).setEidProcess(true); +    pendingReq.getSessionData(AuthProcessDataWrapper.class).setForeigner(false); +    pendingReq.getSessionData(AuthProcessDataWrapper.class) +        .setGenericDataToSession(PvpAttributeDefinitions.GIVEN_NAME_NAME, givenName); +    pendingReq.getSessionData(AuthProcessDataWrapper.class) +        .setGenericDataToSession(PvpAttributeDefinitions.PRINCIPAL_NAME_NAME, familyName); +    pendingReq.getSessionData(AuthProcessDataWrapper.class) +        .setGenericDataToSession(PvpAttributeDefinitions.BIRTHDATE_NAME, dateOfBirth); +    pendingReq.getSessionData(AuthProcessDataWrapper.class) +        .setGenericDataToSession(MsProxyServiceConstants.ATTR_EIDAS_PERSONAL_IDENTIFIER, bpk); +     +    //set LoA level attribute instead of explicit session-data +    pendingReq.getSessionData(AuthProcessDataWrapper.class) +    .setGenericDataToSession(PvpAttributeDefinitions.EID_CITIZEN_EIDAS_QAA_LEVEL_NAME,  +        pendingReq.getSessionData(AuthProcessDataWrapper.class).getQaaLevel()); +    pendingReq.getSessionData(AuthProcessDataWrapper.class).setQaaLevel(null); +     +  } +   +  private void checkGenericAttribute(IAuthData authData, String attrName, String expected) { +    assertEquals("Wrong: " + attrName, expected, authData.getGenericData(attrName, String.class)); +     +   } +      private IIdentityLink buildDummyIdl() {      return new IIdentityLink() { | 
