From b76b6e6212784d622ca79bd258fa3e529b353346 Mon Sep 17 00:00:00 2001 From: Thomas Lenz Date: Fri, 28 Sep 2018 14:19:50 +0200 Subject: add first code for eID4U --- .../attributes/natural/DocumentAttributeValue.java | 15 +++++ .../EhicIdTypeAttributeValueMarshaller.java | 26 +++++++++ .../attributes/natural/IdTypeAttributeValue.java | 14 +++++ .../natural/IdTypeAttributeValueMarshaller.java | 26 +++++++++ .../natural/MaritalStateAttributeValue.java | 14 +++++ .../MaritalStateAttributeValueMarshaller.java | 26 +++++++++ .../NationalityTypeAttributeValueMarshaller.java | 26 +++++++++ ...onValidatingStringAttributeValueMarshaller.java | 17 ++++++ .../natural/PhotoTypeAttributeValueMarshaller.java | 67 ++++++++++++++++++++++ .../RFC822MailboxTypeAttributeValueMarshaller.java | 26 +++++++++ .../natural/TaxIdentificationNumberType.java | 27 +++++++++ 11 files changed, 284 insertions(+) create mode 100644 id/server/modules/eID4UExtensions/src/main/java/at/gv/egiz/eid4u/impl/attributes/natural/DocumentAttributeValue.java create mode 100644 id/server/modules/eID4UExtensions/src/main/java/at/gv/egiz/eid4u/impl/attributes/natural/EhicIdTypeAttributeValueMarshaller.java create mode 100644 id/server/modules/eID4UExtensions/src/main/java/at/gv/egiz/eid4u/impl/attributes/natural/IdTypeAttributeValue.java create mode 100644 id/server/modules/eID4UExtensions/src/main/java/at/gv/egiz/eid4u/impl/attributes/natural/IdTypeAttributeValueMarshaller.java create mode 100644 id/server/modules/eID4UExtensions/src/main/java/at/gv/egiz/eid4u/impl/attributes/natural/MaritalStateAttributeValue.java create mode 100644 id/server/modules/eID4UExtensions/src/main/java/at/gv/egiz/eid4u/impl/attributes/natural/MaritalStateAttributeValueMarshaller.java create mode 100644 id/server/modules/eID4UExtensions/src/main/java/at/gv/egiz/eid4u/impl/attributes/natural/NationalityTypeAttributeValueMarshaller.java create mode 100644 id/server/modules/eID4UExtensions/src/main/java/at/gv/egiz/eid4u/impl/attributes/natural/NonValidatingStringAttributeValueMarshaller.java create mode 100644 id/server/modules/eID4UExtensions/src/main/java/at/gv/egiz/eid4u/impl/attributes/natural/PhotoTypeAttributeValueMarshaller.java create mode 100644 id/server/modules/eID4UExtensions/src/main/java/at/gv/egiz/eid4u/impl/attributes/natural/RFC822MailboxTypeAttributeValueMarshaller.java create mode 100644 id/server/modules/eID4UExtensions/src/main/java/at/gv/egiz/eid4u/impl/attributes/natural/TaxIdentificationNumberType.java (limited to 'id/server/modules/eID4UExtensions/src/main/java/at/gv/egiz/eid4u/impl/attributes/natural') diff --git a/id/server/modules/eID4UExtensions/src/main/java/at/gv/egiz/eid4u/impl/attributes/natural/DocumentAttributeValue.java b/id/server/modules/eID4UExtensions/src/main/java/at/gv/egiz/eid4u/impl/attributes/natural/DocumentAttributeValue.java new file mode 100644 index 000000000..d430c55e2 --- /dev/null +++ b/id/server/modules/eID4UExtensions/src/main/java/at/gv/egiz/eid4u/impl/attributes/natural/DocumentAttributeValue.java @@ -0,0 +1,15 @@ +package at.gv.egiz.eid4u.impl.attributes.natural; + +import at.gv.egiz.eid4u.impl.attributes.xjc.Document; +import eu.eidas.auth.commons.attribute.impl.AbstractAttributeValue; + +public class DocumentAttributeValue extends AbstractAttributeValue{ + + private static final long serialVersionUID = 1L; + + protected DocumentAttributeValue(Document val, boolean nonLatinScriptAlternateVer) { + super(val, false); + + } + +} diff --git a/id/server/modules/eID4UExtensions/src/main/java/at/gv/egiz/eid4u/impl/attributes/natural/EhicIdTypeAttributeValueMarshaller.java b/id/server/modules/eID4UExtensions/src/main/java/at/gv/egiz/eid4u/impl/attributes/natural/EhicIdTypeAttributeValueMarshaller.java new file mode 100644 index 000000000..7da25adbc --- /dev/null +++ b/id/server/modules/eID4UExtensions/src/main/java/at/gv/egiz/eid4u/impl/attributes/natural/EhicIdTypeAttributeValueMarshaller.java @@ -0,0 +1,26 @@ +package at.gv.egiz.eid4u.impl.attributes.natural; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import at.gv.egiz.eid4u.api.attributes.Definitions; +import at.gv.egiz.eid4u.impl.attributes.AbstractStringAttributeMarshaller; + +public class EhicIdTypeAttributeValueMarshaller extends AbstractStringAttributeMarshaller { + + private static final String PATTERN = "^80[0-9]{18}$"; + private static final Pattern p = Pattern.compile(PATTERN); + + @Override + protected boolean hasValidForm(String value) { + Matcher matcher = p.matcher(value); + return matcher.matches(); + + } + + @Override + protected String getName() { + return Definitions.EHICID_FRIENDLYNAME; + } + +} diff --git a/id/server/modules/eID4UExtensions/src/main/java/at/gv/egiz/eid4u/impl/attributes/natural/IdTypeAttributeValue.java b/id/server/modules/eID4UExtensions/src/main/java/at/gv/egiz/eid4u/impl/attributes/natural/IdTypeAttributeValue.java new file mode 100644 index 000000000..9b08c5f00 --- /dev/null +++ b/id/server/modules/eID4UExtensions/src/main/java/at/gv/egiz/eid4u/impl/attributes/natural/IdTypeAttributeValue.java @@ -0,0 +1,14 @@ +package at.gv.egiz.eid4u.impl.attributes.natural; + +import at.gv.egiz.eid4u.api.attributes.natural.IdType; +import eu.eidas.auth.commons.attribute.impl.AbstractAttributeValue; + +public final class IdTypeAttributeValue extends AbstractAttributeValue{ + + private static final long serialVersionUID = -4215108790225070526L; + + protected IdTypeAttributeValue(IdType val) { + super(val, true); + } + +} diff --git a/id/server/modules/eID4UExtensions/src/main/java/at/gv/egiz/eid4u/impl/attributes/natural/IdTypeAttributeValueMarshaller.java b/id/server/modules/eID4UExtensions/src/main/java/at/gv/egiz/eid4u/impl/attributes/natural/IdTypeAttributeValueMarshaller.java new file mode 100644 index 000000000..d5f325632 --- /dev/null +++ b/id/server/modules/eID4UExtensions/src/main/java/at/gv/egiz/eid4u/impl/attributes/natural/IdTypeAttributeValueMarshaller.java @@ -0,0 +1,26 @@ +package at.gv.egiz.eid4u.impl.attributes.natural; + +import at.gv.egiz.eid4u.api.attributes.natural.IdType; +import eu.eidas.auth.commons.attribute.AttributeValue; +import eu.eidas.auth.commons.attribute.AttributeValueMarshaller; +import eu.eidas.auth.commons.attribute.AttributeValueMarshallingException; + +public final class IdTypeAttributeValueMarshaller implements AttributeValueMarshaller { + + @Override + public String marshal(AttributeValue value) throws AttributeValueMarshallingException { + return value.getValue().getValue(); + + } + + @Override + public AttributeValue unmarshal(String value, boolean isNonLatinScriptAlternateVersion) + throws AttributeValueMarshallingException { + IdType idType = IdType.fromString(value); + if (null == idType) { + throw new AttributeValueMarshallingException("Illegal IdType value \"" + value + "\""); + } + return new IdTypeAttributeValue(idType); + } + +} diff --git a/id/server/modules/eID4UExtensions/src/main/java/at/gv/egiz/eid4u/impl/attributes/natural/MaritalStateAttributeValue.java b/id/server/modules/eID4UExtensions/src/main/java/at/gv/egiz/eid4u/impl/attributes/natural/MaritalStateAttributeValue.java new file mode 100644 index 000000000..6ef73dca3 --- /dev/null +++ b/id/server/modules/eID4UExtensions/src/main/java/at/gv/egiz/eid4u/impl/attributes/natural/MaritalStateAttributeValue.java @@ -0,0 +1,14 @@ +package at.gv.egiz.eid4u.impl.attributes.natural; + +import at.gv.egiz.eid4u.api.attributes.natural.MaritalState; +import eu.eidas.auth.commons.attribute.impl.AbstractAttributeValue; + +public final class MaritalStateAttributeValue extends AbstractAttributeValue{ + + private static final long serialVersionUID = -4215108790225070526L; + + protected MaritalStateAttributeValue(MaritalState val) { + super(val, true); + } + +} diff --git a/id/server/modules/eID4UExtensions/src/main/java/at/gv/egiz/eid4u/impl/attributes/natural/MaritalStateAttributeValueMarshaller.java b/id/server/modules/eID4UExtensions/src/main/java/at/gv/egiz/eid4u/impl/attributes/natural/MaritalStateAttributeValueMarshaller.java new file mode 100644 index 000000000..afa8d4d06 --- /dev/null +++ b/id/server/modules/eID4UExtensions/src/main/java/at/gv/egiz/eid4u/impl/attributes/natural/MaritalStateAttributeValueMarshaller.java @@ -0,0 +1,26 @@ +package at.gv.egiz.eid4u.impl.attributes.natural; + +import at.gv.egiz.eid4u.api.attributes.natural.MaritalState; +import eu.eidas.auth.commons.attribute.AttributeValue; +import eu.eidas.auth.commons.attribute.AttributeValueMarshaller; +import eu.eidas.auth.commons.attribute.AttributeValueMarshallingException; + +public final class MaritalStateAttributeValueMarshaller implements AttributeValueMarshaller { + + @Override + public String marshal(AttributeValue value) throws AttributeValueMarshallingException { + return value.getValue().getValue(); + + } + + @Override + public AttributeValue unmarshal(String value, boolean isNonLatinScriptAlternateVersion) + throws AttributeValueMarshallingException { + MaritalState idType = MaritalState.fromString(value); + if (null == idType) { + throw new AttributeValueMarshallingException("Illegal MaritalState value \"" + value + "\""); + } + return new MaritalStateAttributeValue(idType); + } + +} diff --git a/id/server/modules/eID4UExtensions/src/main/java/at/gv/egiz/eid4u/impl/attributes/natural/NationalityTypeAttributeValueMarshaller.java b/id/server/modules/eID4UExtensions/src/main/java/at/gv/egiz/eid4u/impl/attributes/natural/NationalityTypeAttributeValueMarshaller.java new file mode 100644 index 000000000..d9b55cf2f --- /dev/null +++ b/id/server/modules/eID4UExtensions/src/main/java/at/gv/egiz/eid4u/impl/attributes/natural/NationalityTypeAttributeValueMarshaller.java @@ -0,0 +1,26 @@ +package at.gv.egiz.eid4u.impl.attributes.natural; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import at.gv.egiz.eid4u.api.attributes.Definitions; +import at.gv.egiz.eid4u.impl.attributes.AbstractStringAttributeMarshaller; + +public class NationalityTypeAttributeValueMarshaller extends AbstractStringAttributeMarshaller { + + private static final String PATTERN = "^[A-Z]{2}$"; + private static final Pattern p = Pattern.compile(PATTERN); + + @Override + protected boolean hasValidForm(String value) { + Matcher matcher = p.matcher(value); + return matcher.matches(); + + } + + @Override + protected String getName() { + return Definitions.NATIONALITY_FRIENDLYNAME; + } + +} diff --git a/id/server/modules/eID4UExtensions/src/main/java/at/gv/egiz/eid4u/impl/attributes/natural/NonValidatingStringAttributeValueMarshaller.java b/id/server/modules/eID4UExtensions/src/main/java/at/gv/egiz/eid4u/impl/attributes/natural/NonValidatingStringAttributeValueMarshaller.java new file mode 100644 index 000000000..b19a6b661 --- /dev/null +++ b/id/server/modules/eID4UExtensions/src/main/java/at/gv/egiz/eid4u/impl/attributes/natural/NonValidatingStringAttributeValueMarshaller.java @@ -0,0 +1,17 @@ +package at.gv.egiz.eid4u.impl.attributes.natural; + +import at.gv.egiz.eid4u.impl.attributes.AbstractStringAttributeMarshaller; + +public class NonValidatingStringAttributeValueMarshaller extends AbstractStringAttributeMarshaller { + + @Override + protected boolean hasValidForm(String value) { + return true; + } + + @Override + protected String getName() { + return "GenericStringAttribute"; + } + +} diff --git a/id/server/modules/eID4UExtensions/src/main/java/at/gv/egiz/eid4u/impl/attributes/natural/PhotoTypeAttributeValueMarshaller.java b/id/server/modules/eID4UExtensions/src/main/java/at/gv/egiz/eid4u/impl/attributes/natural/PhotoTypeAttributeValueMarshaller.java new file mode 100644 index 000000000..59f1817a4 --- /dev/null +++ b/id/server/modules/eID4UExtensions/src/main/java/at/gv/egiz/eid4u/impl/attributes/natural/PhotoTypeAttributeValueMarshaller.java @@ -0,0 +1,67 @@ +package at.gv.egiz.eid4u.impl.attributes.natural; + +import java.io.Reader; +import java.io.StringReader; +import java.io.StringWriter; + +import javax.xml.bind.JAXBContext; +import javax.xml.bind.JAXBException; +import javax.xml.bind.Marshaller; +import javax.xml.bind.Unmarshaller; +import javax.xml.stream.XMLInputFactory; +import javax.xml.stream.XMLStreamException; +import javax.xml.stream.XMLStreamReader; + +import at.gv.egiz.eid4u.impl.attributes.xjc.Document; +import eu.eidas.auth.commons.EidasStringUtil; +import eu.eidas.auth.commons.attribute.AttributeValue; +import eu.eidas.auth.commons.attribute.AttributeValueMarshaller; +import eu.eidas.auth.commons.attribute.AttributeValueMarshallingException; + +public class PhotoTypeAttributeValueMarshaller implements AttributeValueMarshaller{ + + @Override + public String marshal(AttributeValue value) throws AttributeValueMarshallingException { + try { + JAXBContext context = JAXBContext.newInstance(Document.class); + Marshaller m = context.createMarshaller(); + StringWriter sw = new StringWriter(); + m.marshal(value, sw); + return EidasStringUtil.encodeToBase64(sw.toString()); + + } catch (JAXBException e) { + throw new AttributeValueMarshallingException("Can NOT create JAXB marshaller for type 'Document'", e); + + } + + } + + @Override + public AttributeValue unmarshal(String value, boolean isNonLatinScriptAlternateVersion) + throws AttributeValueMarshallingException { + try { + Reader reader = new StringReader(EidasStringUtil.decodeStringFromBase64(value)); + + //initialize XML reader to prevent XXE + XMLInputFactory xif = XMLInputFactory.newInstance(); + xif.setProperty(XMLInputFactory.IS_SUPPORTING_EXTERNAL_ENTITIES, false); + xif.setProperty(XMLInputFactory.SUPPORT_DTD, false); + XMLStreamReader xmlReader = xif.createXMLStreamReader(reader); + + //unmarshal + JAXBContext context = JAXBContext.newInstance(Document.class); + Unmarshaller um = context.createUnmarshaller(); + Object obj = um.unmarshal(xmlReader); + + if (!(obj instanceof Document)) + throw new AttributeValueMarshallingException("Unmarshalled result is NOT of type 'Document'"); + + return new DocumentAttributeValue((Document)obj, isNonLatinScriptAlternateVersion); + + } catch (JAXBException | XMLStreamException e) { + throw new AttributeValueMarshallingException("Can NOT create JAXB unmarshaller for type 'Document'", e); + + } + + } +} diff --git a/id/server/modules/eID4UExtensions/src/main/java/at/gv/egiz/eid4u/impl/attributes/natural/RFC822MailboxTypeAttributeValueMarshaller.java b/id/server/modules/eID4UExtensions/src/main/java/at/gv/egiz/eid4u/impl/attributes/natural/RFC822MailboxTypeAttributeValueMarshaller.java new file mode 100644 index 000000000..05448d35d --- /dev/null +++ b/id/server/modules/eID4UExtensions/src/main/java/at/gv/egiz/eid4u/impl/attributes/natural/RFC822MailboxTypeAttributeValueMarshaller.java @@ -0,0 +1,26 @@ +package at.gv.egiz.eid4u.impl.attributes.natural; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import at.gv.egiz.eid4u.api.attributes.Definitions; +import at.gv.egiz.eid4u.impl.attributes.AbstractStringAttributeMarshaller; + +public class RFC822MailboxTypeAttributeValueMarshaller extends AbstractStringAttributeMarshaller { + + private static final String PATTERN = "[^@]+@[^\\.]+\\..+"; + private static final Pattern p = Pattern.compile(PATTERN); + + @Override + protected boolean hasValidForm(String value) { + Matcher matcher = p.matcher(value); + return matcher.matches(); + + } + + @Override + protected String getName() { + return Definitions.EMAIL_NAME; + } + +} diff --git a/id/server/modules/eID4UExtensions/src/main/java/at/gv/egiz/eid4u/impl/attributes/natural/TaxIdentificationNumberType.java b/id/server/modules/eID4UExtensions/src/main/java/at/gv/egiz/eid4u/impl/attributes/natural/TaxIdentificationNumberType.java new file mode 100644 index 000000000..2b4bb6378 --- /dev/null +++ b/id/server/modules/eID4UExtensions/src/main/java/at/gv/egiz/eid4u/impl/attributes/natural/TaxIdentificationNumberType.java @@ -0,0 +1,27 @@ +package at.gv.egiz.eid4u.impl.attributes.natural; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import at.gv.egiz.eid4u.api.attributes.Definitions; +import at.gv.egiz.eid4u.impl.attributes.AbstractStringAttributeMarshaller; + +public final class TaxIdentificationNumberType extends AbstractStringAttributeMarshaller { + + private static final String PATTERN = "^[A-Z]{2}/[a-zA-Z0-9].*"; + private static final Pattern p = Pattern.compile(PATTERN); + + @Override + protected boolean hasValidForm(String value) { + Matcher matcher = p.matcher(value); + return matcher.matches(); + + } + + @Override + protected String getName() { + return Definitions.TAXIDENTIFICATIONNUMBER_FRIENDLYNAME; + + } + +} -- cgit v1.2.3