/* * Copyright 2018 A-SIT Plus GmbH * AT-specific eIDAS Connector has been developed in a cooperation between EGIZ, * A-SIT Plus GmbH, A-SIT, and Graz University of Technology. * * Licensed under the EUPL, Version 1.2 or - as soon they will be approved by * the European Commission - subsequent versions of the EUPL (the "License"); * You may not use this work except in compliance with the License. * You may obtain a copy of the License at: * https://joinup.ec.europa.eu/news/understanding-eupl-v12 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" basis, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * * This product combines work with different licenses. See the "NOTICE" text * file for details on the various modules and licenses. * The "NOTICE" text file is part of the distribution. Any derivative works * that you distribute must include a readable copy of the "NOTICE" text file. */ package at.asitplus.eidas.specific.modules.auth.eidas.v2.test; import static org.junit.Assert.fail; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.HashMap; import java.util.Map; import org.joda.time.DateTime; import org.junit.BeforeClass; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.annotation.DirtiesContext.ClassMode; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import at.asitplus.eidas.specific.modules.auth.eidas.v2.Constants; import at.asitplus.eidas.specific.modules.auth.eidas.v2.dao.ErnbEidData; import at.asitplus.eidas.specific.modules.auth.eidas.v2.service.CcSpecificEidProcessingService; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration("/SpringTest-context_tasks_test.xml") @DirtiesContext(classMode = ClassMode.AFTER_CLASS) public class EidasAttributePostProcessingTest { @Autowired private CcSpecificEidProcessingService postProcessor; // lower case private static final String P1_eIDASID = "DE/AT/532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25"; private static final String P1_GIVENNAME = "Max"; private static final String P1_FAMILYNAME = "Mustermann"; private static final DateTime P1_DATEOFBIRTH = DateTime.now(); private static final String P1_PLACEOFBIRTH = "Nirgendwo"; private static final String P1_BIRTHNAME = "Musterkind"; // mixed private static final String P3_eIDASID = "DE/AT/532eaabd9574880dbf76b9b8cc00832c20A6ec113d682299550d7a6e0f345e25"; private static final String P3_GIVENNAME = "Max"; private static final String P3_FAMILYNAME = "Mustermann"; private static final DateTime P3_DATEOFBIRTH = DateTime.now(); private static final String P3_PLACEOFBIRTH = "Nirgendwo"; private static final String P3_BIRTHNAME = "Musterkind"; // upper case private static final String P4_eIDASID = "DE/AT/532EAABD9574880DBF76B9B8CC00832C20A6EC113D682299550D7A6E0F345E25"; private static final String P4_GIVENNAME = "Max"; private static final String P4_FAMILYNAME = "Mustermann"; private static final DateTime P4_DATEOFBIRTH = DateTime.now(); private static final String P4_PLACEOFBIRTH = "Nirgendwo"; private static final String P4_BIRTHNAME = "Musterkind"; // To long identifier private static final String P5_eIDASID = "DE/AT/532EAABD9574880DBF76B9B8CC00832C20A6EC113D682299550D7A6E0F345E251"; private static final String P5_GIVENNAME = "Max"; private static final String P5_FAMILYNAME = "Mustermann"; private static final DateTime P5_DATEOFBIRTH = DateTime.now(); private static final String P5_PLACEOFBIRTH = "Nirgendwo"; private static final String P5_BIRTHNAME = "Musterkind"; // to short identifier private static final String P6_eIDASID = "DE/AT/532EAABD9574880DBF76B9B8CC00832C20A6EC113D682299550D7A6E0F"; private static final String P6_GIVENNAME = "Max"; private static final String P6_FAMILYNAME = "Mustermann"; private static final DateTime P6_DATEOFBIRTH = DateTime.now(); private static final String P6_PLACEOFBIRTH = "Nirgendwo"; private static final String P6_BIRTHNAME = "Musterkind"; // no hex encoded identifier private static final String P7_eIDASID = "DE/AT/532EAABD9574880DBF76B9B8CC00832C20A6EC113D682299550D7A6E0F"; private static final String P7_GIVENNAME = "Max"; private static final String P7_FAMILYNAME = "Mustermann"; private static final DateTime P7_DATEOFBIRTH = DateTime.now(); private static final String P7_PLACEOFBIRTH = "Nirgendwo"; private static final String P7_BIRTHNAME = "Musterkind"; private static final String P2_eIDASID = "EE/AT/asfasfasdfasdfasdfasdfasdfasvafasdfasdfasdfasdfasdfasvascasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasd"; private static final String P2_GIVENNAME = "Max"; private static final String P2_FAMILYNAME = "Mustermann"; private static final DateTime P2_DATEOFBIRTH = DateTime.now(); private static final String P2_PLACEOFBIRTH = "Nirgendwo"; private static final String P2_BIRTHNAME = "Musterkind"; /** * jUnit class initializer. * * @throws IOException In case of an error */ @BeforeClass public static void classInitializer() throws IOException { final String current = new java.io.File(".").toURI().toString(); System.setProperty("eidas.ms.configuration", current + "../../basicConfig/default_config.properties"); } @Test public void deWithHexLowerCase() throws Exception { try { final ErnbEidData result = postProcessor.postProcess( generateInputData( P1_eIDASID, P1_FAMILYNAME, P1_GIVENNAME, P1_DATEOFBIRTH, P1_PLACEOFBIRTH, P1_BIRTHNAME)); validate(result, "Uy6qvZV0iA2/drm4zACDLCCm7BE9aCKZVQ16bg80XiU=", P1_FAMILYNAME, P1_GIVENNAME, P1_DATEOFBIRTH, P1_PLACEOFBIRTH, P1_BIRTHNAME); } catch (final Exception e) { e.printStackTrace(); fail(e.getMessage()); } } @Test public void deWithHexMixedCase() throws Exception { try { final ErnbEidData result = postProcessor.postProcess( generateInputData( P3_eIDASID, P3_FAMILYNAME, P3_GIVENNAME, P3_DATEOFBIRTH, P3_PLACEOFBIRTH, P3_BIRTHNAME)); validate(result, "Uy6qvZV0iA2/drm4zACDLCCm7BE9aCKZVQ16bg80XiU=", P3_FAMILYNAME, P3_GIVENNAME, P3_DATEOFBIRTH, P3_PLACEOFBIRTH, P3_BIRTHNAME); } catch (final Exception e) { e.printStackTrace(); fail(e.getMessage()); } } @Test public void deWithHexUpperCase() throws Exception { try { final ErnbEidData result = postProcessor.postProcess( generateInputData( P4_eIDASID, P4_FAMILYNAME, P4_GIVENNAME, P4_DATEOFBIRTH, P4_PLACEOFBIRTH, P4_BIRTHNAME)); validate(result, "Uy6qvZV0iA2/drm4zACDLCCm7BE9aCKZVQ16bg80XiU=", P4_FAMILYNAME, P4_GIVENNAME, P4_DATEOFBIRTH, P4_PLACEOFBIRTH, P4_BIRTHNAME); } catch (final Exception e) { e.printStackTrace(); fail(e.getMessage()); } } @Test public void deWithHexTooLongCase() throws Exception { try { postProcessor.postProcess( generateInputData( P5_eIDASID, P5_FAMILYNAME, P5_GIVENNAME, P5_DATEOFBIRTH, P5_PLACEOFBIRTH, P5_BIRTHNAME)); } catch (final Exception e) { return; } fail("Too long input accepted"); } @Test public void deWithHexTooShortCase() throws Exception { try { postProcessor.postProcess( generateInputData( P6_eIDASID, P6_FAMILYNAME, P6_GIVENNAME, P6_DATEOFBIRTH, P6_PLACEOFBIRTH, P6_BIRTHNAME)); } catch (final Exception e) { return; } fail("Too short input accepted"); } @Test public void deWithNoHexCase() throws Exception { try { postProcessor.postProcess( generateInputData( P7_eIDASID, P7_FAMILYNAME, P7_GIVENNAME, P7_DATEOFBIRTH, P7_PLACEOFBIRTH, P7_BIRTHNAME)); } catch (final Exception e) { return; } fail("Not hex encoded input accepted"); } @Test public void eeTestCase() throws Exception { try { final ErnbEidData result = postProcessor.postProcess( generateInputData( P2_eIDASID, P2_FAMILYNAME, P2_GIVENNAME, P2_DATEOFBIRTH, P2_PLACEOFBIRTH, P2_BIRTHNAME)); validate(result, "asfasfasdfasdfasdfasdfasdfasvafasdfasdfasdfasdfasdfasvascasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasd", P2_FAMILYNAME, P2_GIVENNAME, P2_DATEOFBIRTH, P2_PLACEOFBIRTH, P2_BIRTHNAME); } catch (final Exception e) { e.printStackTrace(); fail(e.getMessage()); } } @Test public void eeTestFamilyNameMissingCase() throws Exception { try { final ErnbEidData result = postProcessor.postProcess( generateInputData( P2_eIDASID, null, P2_GIVENNAME, P2_DATEOFBIRTH, P2_PLACEOFBIRTH, P2_BIRTHNAME)); validate(result, "asfasfasdfasdfasdfasdfasdfasvafasdfasdfasdfasdfasdfasvascasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasd", P2_FAMILYNAME, P2_GIVENNAME, P2_DATEOFBIRTH, P2_PLACEOFBIRTH, P2_BIRTHNAME); } catch (final Exception e) { return; } fail("FamilyName missing input accepted"); } @Test public void eeTestGivenNameMissingCase() throws Exception { try { final ErnbEidData result = postProcessor.postProcess( generateInputData( P2_eIDASID, P2_FAMILYNAME, null, P2_DATEOFBIRTH, P2_PLACEOFBIRTH, P2_BIRTHNAME)); validate(result, "asfasfasdfasdfasdfasdfasdfasvafasdfasdfasdfasdfasdfasvascasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasd", P2_FAMILYNAME, P2_GIVENNAME, P2_DATEOFBIRTH, P2_PLACEOFBIRTH, P2_BIRTHNAME); } catch (final Exception e) { return; } fail("GivenName missing input accepted"); } @Test public void eeTestDateOfBirthMissingCase() throws Exception { try { final ErnbEidData result = postProcessor.postProcess( generateInputData( P2_eIDASID, P2_FAMILYNAME, P2_GIVENNAME, null, P2_PLACEOFBIRTH, P2_BIRTHNAME)); validate(result, "asfasfasdfasdfasdfasdfasdfasvafasdfasdfasdfasdfasdfasvascasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasd", P2_FAMILYNAME, P2_GIVENNAME, P2_DATEOFBIRTH, P2_PLACEOFBIRTH, P2_BIRTHNAME); } catch (final Exception e) { return; } fail("DateOfBirth missing input accepted"); } @Test public void eeTestIdMissingCase() throws Exception { try { final ErnbEidData result = postProcessor.postProcess( generateInputData( null, P2_FAMILYNAME, P2_GIVENNAME, P2_DATEOFBIRTH, P2_PLACEOFBIRTH, P2_BIRTHNAME)); validate(result, "asfasfasdfasdfasdfasdfasdfasvafasdfasdfasdfasdfasdfasvascasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasd", P2_FAMILYNAME, P2_GIVENNAME, P2_DATEOFBIRTH, P2_PLACEOFBIRTH, P2_BIRTHNAME); } catch (final Exception e) { return; } fail("eIDAS-Id missing input accepted"); } private Map generateInputData(String id, String familyName, String givenName, DateTime dateOfBirth, String placeOfBirth, String birthName) { final Map result = new HashMap<>(); result.put(Constants.eIDAS_ATTR_PERSONALIDENTIFIER, id); result.put(Constants.eIDAS_ATTR_CURRENTGIVENNAME, givenName); result.put(Constants.eIDAS_ATTR_CURRENTFAMILYNAME, familyName); result.put(Constants.eIDAS_ATTR_DATEOFBIRTH, dateOfBirth); result.put(Constants.eIDAS_ATTR_PLACEOFBIRTH, placeOfBirth); result.put(Constants.eIDAS_ATTR_BIRTHNAME, birthName); return result; } private void validate(ErnbEidData result, String id, String familyName, String givenName, DateTime dateOfBirth, String placeOfBirth, String birthName) { if (!result.getPseudonym().equals(id)) { fail(result.getPseudonym() + "is not equal to " + id); } if (!result.getFamilyName().equals(familyName)) { fail(result.getFamilyName() + "is not equal to " + familyName); } if (!result.getGivenName().equals(givenName)) { fail(result.getGivenName() + "is not equal to " + givenName); } if (!result.getDateOfBirth().equals(dateOfBirth)) { fail(result.getDateOfBirth() + "is not equal to " + dateOfBirth); } if (!result.getFormatedDateOfBirth().equals(new SimpleDateFormat("yyyy-MM-dd").format(dateOfBirth .toDate()))) { fail(result.getDateOfBirth() + "is not equal to " + new SimpleDateFormat("yyyy-MM-dd").format( dateOfBirth.toDate())); } if (!result.getPlaceOfBirth().equals(placeOfBirth)) { fail(result.getPlaceOfBirth() + "is not equal to " + placeOfBirth); } if (!result.getBirthName().equals(birthName)) { fail(result.getBirthName() + "is not equal to " + birthName); } } }