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 --- .../natural/PhotoTypeAttributeValueMarshaller.java | 67 ++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 id/server/modules/eID4UExtensions/src/main/java/at/gv/egiz/eid4u/impl/attributes/natural/PhotoTypeAttributeValueMarshaller.java (limited to 'id/server/modules/eID4UExtensions/src/main/java/at/gv/egiz/eid4u/impl/attributes/natural/PhotoTypeAttributeValueMarshaller.java') 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); + + } + + } +} -- cgit v1.2.3