summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/AuthenticationData.java70
-rw-r--r--eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/auth/services/IErrorService.java10
-rw-r--r--eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/builder/attributes/BirthdateAttributeBuilder.java10
-rw-r--r--eaaf_core/src/test/java/at/gv/egiz/eaaf/core/impl/idp/auth/AuthenticationDataBuilderTest.java2
-rw-r--r--eaaf_core/src/test/java/at/gv/egiz/eaaf/core/impl/idp/auth/attributes/BirthdayAttrBuilderTest.java2
-rw-r--r--eaaf_core/src/test/java/at/gv/egiz/eaaf/core/impl/idp/auth/data/AuthenticationDataTest.java85
-rw-r--r--eaaf_core_api/src/main/java/at/gv/egiz/eaaf/core/api/idp/IAuthData.java21
-rw-r--r--eaaf_modules/eaaf_module_pvp2_idp/src/test/java/at/gv/egiz/eaaf/modules/pvp2/idp/test/AuthenticationActionTest.java25
8 files changed, 163 insertions, 62 deletions
diff --git a/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/AuthenticationData.java b/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/AuthenticationData.java
index 00324a9a..4fe22feb 100644
--- a/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/AuthenticationData.java
+++ b/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/AuthenticationData.java
@@ -26,6 +26,9 @@ import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;
import java.util.TimeZone;
+import java.util.regex.Pattern;
+
+import javax.annotation.Nullable;
import org.apache.commons.collections4.map.HashedMap;
import org.apache.commons.lang3.StringUtils;
@@ -47,6 +50,7 @@ public class AuthenticationData implements IAuthData, Serializable {
private static final long serialVersionUID = -1042697056735596866L;
public static final String IDENTITY_LINK_DATE_FORMAT = "yyyy-MM-dd";
+ public static final String IDENTITY_LINK_DATE_REGEX = "([0-9]{4})-([0-9]{2})-([0-9]{2})";
public static final String ISSUE_INSTANT_DATE_FORMAT = "yyyy-MM-dd'T'HH:mm:ss'Z'";
private boolean isBaseIdTransferRestrication = true;
@@ -64,7 +68,7 @@ public class AuthenticationData implements IAuthData, Serializable {
private String familyName;
private String givenName;
- private Date dateOfBirth;
+ private String dateOfBirth;
private String encSourceId;
private String encSourceIdType;
@@ -147,22 +151,36 @@ public class AuthenticationData implements IAuthData, Serializable {
}
@Override
- public Date getDateOfBirth() {
- return getDateCopyOrNull(this.dateOfBirth);
+ public String getDateOfBirth() {
+ return this.dateOfBirth;
}
@Override
- public String getFormatedDateOfBirth() {
- final DateFormat pvpDateFormat = new SimpleDateFormat(IDENTITY_LINK_DATE_FORMAT);
- if (getDateOfBirth() != null) {
- return pvpDateFormat.format(getDateOfBirth());
- } else {
- return "2999-12-31";
- }
-
+ public String getDateOfBirthFormated(String pattern) {
+ if (StringUtils.isNotEmpty(getDateOfBirth())) {
+ try {
+ final DateFormat dateFormat = new SimpleDateFormat(IDENTITY_LINK_DATE_FORMAT);
+ Date parsedDate = dateFormat.parse(getDateOfBirth());
+ final String dateString = dateFormat.format(parsedDate);
+ if (getDateOfBirth().equals(dateString)) {
+ final DateFormat destDateFormat = new SimpleDateFormat(pattern);
+ return destDateFormat.format(parsedDate);
+
+ } else {
+ log.info("DateOfBirth has an unusal format. Can not be converted to: {}", pattern);
+
+ }
+
+ } catch (ParseException | IllegalArgumentException e) {
+ log.error("Can not parse DateOfBirth.", e);
+
+ }
+ }
+ return null;
+
}
-
+
@Override
public String getFamilyName() {
return this.familyName;
@@ -216,26 +234,16 @@ public class AuthenticationData implements IAuthData, Serializable {
*
* @param dateOfBirth The dateOfBirth to set
*/
- public void setDateOfBirth(final Date dateOfBirth) {
- this.dateOfBirth = getDateCopyOrNull(dateOfBirth);
- }
-
- /**
- * Set the date of birth.
- *
- * @param dateOfBirth date of birth String as "yyyy-MM-dd"
- */
- public void setDateOfBirth(final String dateOfBirth) {
- try {
- if (StringUtils.isNotEmpty(dateOfBirth)) {
- final DateFormat identityLinkFormat = new SimpleDateFormat(IDENTITY_LINK_DATE_FORMAT);
- this.dateOfBirth = identityLinkFormat.parse(dateOfBirth);
-
+ public void setDateOfBirth(@Nullable final String dateOfBirth) {
+ if (dateOfBirth != null) {
+ if (Pattern.matches(IDENTITY_LINK_DATE_REGEX, dateOfBirth)) {
+ this.dateOfBirth = dateOfBirth;
+
+ } else {
+ log.error("DateOfBirth: {} does NOT match to pattern: {}",
+ dateOfBirth, IDENTITY_LINK_DATE_REGEX);
+
}
-
- } catch (final ParseException e) {
- log.warn("Parse dateOfBirht from IdentityLink FAILED", e);
-
}
}
diff --git a/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/auth/services/IErrorService.java b/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/auth/services/IErrorService.java
index 812a5171..4e04a87f 100644
--- a/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/auth/services/IErrorService.java
+++ b/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/auth/services/IErrorService.java
@@ -1,10 +1,12 @@
package at.gv.egiz.eaaf.core.impl.idp.auth.services;
-import at.gv.egiz.eaaf.core.api.gui.ModifyableGuiBuilderConfiguration;
-import at.gv.egiz.eaaf.core.exceptions.EaafException;
+import java.util.HashSet;
+import javax.annotation.Nonnull;
import javax.servlet.http.HttpServletRequest;
-import java.util.HashSet;
+
+import at.gv.egiz.eaaf.core.api.gui.ModifyableGuiBuilderConfiguration;
+import at.gv.egiz.eaaf.core.exceptions.EaafException;
public interface IErrorService {
/**
@@ -35,6 +37,7 @@ public interface IErrorService {
* @param internalCode internal error code
* @return external error code
*/
+ @Nonnull
String getExternalCodeFromInternal(String internalCode);
/**
@@ -45,6 +48,7 @@ public interface IErrorService {
* @return eror handle Data
* @throws EaafException In case of an internal error
*/
+ @Nonnull
IHandleData createHandleData(Throwable throwable, HttpServletRequest req) throws EaafException;
/**
diff --git a/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/builder/attributes/BirthdateAttributeBuilder.java b/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/builder/attributes/BirthdateAttributeBuilder.java
index 19500cb3..a82a1a55 100644
--- a/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/builder/attributes/BirthdateAttributeBuilder.java
+++ b/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/builder/attributes/BirthdateAttributeBuilder.java
@@ -19,8 +19,7 @@
package at.gv.egiz.eaaf.core.impl.idp.builder.attributes;
-import java.text.DateFormat;
-import java.text.SimpleDateFormat;
+import org.apache.commons.lang3.StringUtils;
import at.gv.egiz.eaaf.core.api.idp.IAttributeGenerator;
import at.gv.egiz.eaaf.core.api.idp.IAuthData;
@@ -41,11 +40,8 @@ public class BirthdateAttributeBuilder implements IPvpAttributeBuilder {
public <ATT> ATT build(final ISpConfiguration oaParam, final IAuthData authData,
final IAttributeGenerator<ATT> g) throws AttributeBuilderException {
- if (authData.getDateOfBirth() != null) {
- final DateFormat pvpDateFormat = new SimpleDateFormat(BIRTHDATE_FORMAT_PATTERN);
- final String dateString = pvpDateFormat.format(authData.getDateOfBirth());
-
- return g.buildStringAttribute(BIRTHDATE_FRIENDLY_NAME, BIRTHDATE_NAME, dateString);
+ if (StringUtils.isNotEmpty(authData.getDateOfBirth())) {
+ return g.buildStringAttribute(BIRTHDATE_FRIENDLY_NAME, BIRTHDATE_NAME, authData.getDateOfBirth());
} else {
throw new UnavailableAttributeException(BIRTHDATE_NAME);
diff --git a/eaaf_core/src/test/java/at/gv/egiz/eaaf/core/impl/idp/auth/AuthenticationDataBuilderTest.java b/eaaf_core/src/test/java/at/gv/egiz/eaaf/core/impl/idp/auth/AuthenticationDataBuilderTest.java
index 33bd1010..19054634 100644
--- a/eaaf_core/src/test/java/at/gv/egiz/eaaf/core/impl/idp/auth/AuthenticationDataBuilderTest.java
+++ b/eaaf_core/src/test/java/at/gv/egiz/eaaf/core/impl/idp/auth/AuthenticationDataBuilderTest.java
@@ -307,7 +307,7 @@ public class AuthenticationDataBuilderTest {
throw new Exception("GivenName wrong");
}
- if (!authData.getFormatedDateOfBirth().equals("1973-06-04")) {
+ if (!authData.getDateOfBirth().equals("1973-06-04")) {
throw new Exception("DateOfBirth wrong");
}
diff --git a/eaaf_core/src/test/java/at/gv/egiz/eaaf/core/impl/idp/auth/attributes/BirthdayAttrBuilderTest.java b/eaaf_core/src/test/java/at/gv/egiz/eaaf/core/impl/idp/auth/attributes/BirthdayAttrBuilderTest.java
index 21cf71a9..f155b3b4 100644
--- a/eaaf_core/src/test/java/at/gv/egiz/eaaf/core/impl/idp/auth/attributes/BirthdayAttrBuilderTest.java
+++ b/eaaf_core/src/test/java/at/gv/egiz/eaaf/core/impl/idp/auth/attributes/BirthdayAttrBuilderTest.java
@@ -29,7 +29,7 @@ public class BirthdayAttrBuilderTest extends AbstractAttributeBuilderTest {
final DateFormat format =
new SimpleDateFormat(PvpAttributeDefinitions.BIRTHDATE_FORMAT_PATTERN);
Assert.assertEquals("Birthday does NOT match", authData.getDateOfBirth(),
- format.parse(value));
+ value);
} catch (final Exception e) {
Assert.assertTrue("Attr. builder has an exception", e == null);
diff --git a/eaaf_core/src/test/java/at/gv/egiz/eaaf/core/impl/idp/auth/data/AuthenticationDataTest.java b/eaaf_core/src/test/java/at/gv/egiz/eaaf/core/impl/idp/auth/data/AuthenticationDataTest.java
new file mode 100644
index 00000000..9d99b158
--- /dev/null
+++ b/eaaf_core/src/test/java/at/gv/egiz/eaaf/core/impl/idp/auth/data/AuthenticationDataTest.java
@@ -0,0 +1,85 @@
+package at.gv.egiz.eaaf.core.impl.idp.auth.data;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+
+import org.apache.commons.lang3.RandomStringUtils;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.BlockJUnit4ClassRunner;
+
+import at.gv.egiz.eaaf.core.impl.idp.AuthenticationData;
+
+@RunWith(BlockJUnit4ClassRunner.class)
+public class AuthenticationDataTest {
+
+ @Test
+ public void formatedDateButNotSet() {
+ AuthenticationData authData = new AuthenticationData();
+ assertNull("formatedDateOfBirth", authData.getDateOfBirthFormated("dd/MM/yyy"));
+
+ }
+
+ @Test
+ public void formatedDateButInvalidPattern() {
+ AuthenticationData authData = new AuthenticationData();
+ authData.setDateOfBirth("1940-01-01");
+ assertNull("formatedDateOfBirth", authData.getDateOfBirthFormated("aa-bb-cccc"));
+
+ }
+
+ @Test
+ public void validDateStatic() {
+ AuthenticationData authData = new AuthenticationData();
+
+ String date = "1940-01-01";
+ authData.setDateOfBirth(date);
+
+ assertNotNull("birthday", authData.getDateOfBirth());
+ assertEquals("birthday attribute", date,
+ authData.getDateOfBirth());
+ assertEquals("birthday attribute", "01/01/1940",
+ authData.getDateOfBirthFormated("dd/MM/yyy"));
+
+ }
+
+
+ @Test
+ public void validButNotUsal() {
+ AuthenticationData authData = new AuthenticationData();
+ authData.setDateOfBirth("1970-00-00");
+
+ assertNotNull("birthday", authData.getDateOfBirth());
+ assertEquals("birthday attribute", "1970-00-00",
+ authData.getDateOfBirth());
+ assertNull("formatedDateOfBirth", authData.getDateOfBirthFormated("dd/MM/yyy"));
+
+ }
+
+ @Test
+ public void invalidDate() {
+ AuthenticationData authData = new AuthenticationData();
+ authData.setDateOfBirth("1970/00/00");
+
+ assertNull("birthday", authData.getDateOfBirth());
+ assertNull("formatedDateOfBirth", authData.getDateOfBirthFormated("dd/MM/yyy"));
+
+ }
+
+
+ @Test
+ public void validDateRandom() {
+ AuthenticationData authData = new AuthenticationData();
+
+ String date = RandomStringUtils.randomNumeric(4) + "-" + RandomStringUtils.randomNumeric(2)
+ + "-" + RandomStringUtils.randomNumeric(2);
+ authData.setDateOfBirth(date);
+
+ assertNotNull("birthday", authData.getDateOfBirth());
+ assertEquals("birthday attribute", date,
+ authData.getDateOfBirth());
+
+ }
+
+}
diff --git a/eaaf_core_api/src/main/java/at/gv/egiz/eaaf/core/api/idp/IAuthData.java b/eaaf_core_api/src/main/java/at/gv/egiz/eaaf/core/api/idp/IAuthData.java
index 6626d24d..f76e8d76 100644
--- a/eaaf_core_api/src/main/java/at/gv/egiz/eaaf/core/api/idp/IAuthData.java
+++ b/eaaf_core_api/src/main/java/at/gv/egiz/eaaf/core/api/idp/IAuthData.java
@@ -75,19 +75,24 @@ public interface IAuthData {
String getGivenName();
/**
- * Date of birth of the user.
+ * Date of birth of the user as "yyyy-MM-dd".
+ *
+ * <p><b>Attention:</b> <i>MM</i> and <i>dd</i> can also be <i>00</i> in case of an unknown date </p>
*
* @return date of birth or null no data of birth is available
*/
- Date getDateOfBirth();
-
+ String getDateOfBirth();
+
/**
- * String formated date of birth of the user with pattern yyyy-MM-dd.
- *
- *
- * @return date of birth or '2999-12-31' if no data of birth is available
+ * Get date of birth with a specific date pattern.
+ *
+ * <p><b>Attention:</b> If birthday has un unusal form like <i>MM</i> and <i>dd</i> are <i>00</i>
+ * a transformation CAN NOT be possible </p>
+ *
+ * @param pattern Date pattern, like "yyyy-MM-dd" e.g.
+ * @return Formatted birthday or <code>null</code> if date can not be transformed
*/
- String getFormatedDateOfBirth();
+ String getDateOfBirthFormated(String pattern);
/**
* Get the encrypted SourceId (vSZ) from new E-ID scheme.
diff --git a/eaaf_modules/eaaf_module_pvp2_idp/src/test/java/at/gv/egiz/eaaf/modules/pvp2/idp/test/AuthenticationActionTest.java b/eaaf_modules/eaaf_module_pvp2_idp/src/test/java/at/gv/egiz/eaaf/modules/pvp2/idp/test/AuthenticationActionTest.java
index df5c15f8..cab14a5d 100644
--- a/eaaf_modules/eaaf_module_pvp2_idp/src/test/java/at/gv/egiz/eaaf/modules/pvp2/idp/test/AuthenticationActionTest.java
+++ b/eaaf_modules/eaaf_module_pvp2_idp/src/test/java/at/gv/egiz/eaaf/modules/pvp2/idp/test/AuthenticationActionTest.java
@@ -157,10 +157,6 @@ public class AuthenticationActionTest {
return null;
}
- @Override
- public String getFormatedDateOfBirth() {
- return DateFormatUtils.format(getDateOfBirth(), "yyyy-MM-dd");
- }
@Override
public String getFamilyName() {
@@ -184,13 +180,7 @@ public class AuthenticationActionTest {
public String getEidasQaaLevel() {
return EaafConstants.EIDAS_LOA_LOW;
}
-
- @Override
- public Date getDateOfBirth() {
- return new Date();
-
- }
-
+
@Override
public String getCiticenCountryCode() {
// TODO Auto-generated method stub
@@ -221,6 +211,19 @@ public class AuthenticationActionTest {
public Date getAuthenticationIssueInstant() {
return new Date();
}
+
+ @Override
+ public String getDateOfBirth() {
+ return RandomStringUtils.randomNumeric(4) + "-" + RandomStringUtils.randomNumeric(2) + "-"
+ + RandomStringUtils.randomNumeric(2);
+
+ }
+
+ @Override
+ public String getDateOfBirthFormated(String pattern) {
+ // TODO Auto-generated method stub
+ return null;
+ }
};
}