Package org.jboss.seam.security.external.saml

Source Code of org.jboss.seam.security.external.saml.SamlUtils

package org.jboss.seam.security.external.saml;

import java.io.StringWriter;
import java.util.GregorianCalendar;

import javax.xml.datatype.DatatypeConfigurationException;
import javax.xml.datatype.DatatypeConstants;
import javax.xml.datatype.DatatypeFactory;
import javax.xml.datatype.XMLGregorianCalendar;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Result;
import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.jboss.seam.security.external.jaxb.samlv2.assertion.AssertionType;
import org.jboss.seam.security.external.jaxb.samlv2.assertion.ConditionsType;
import org.w3c.dom.Document;

/**
* @author Marcel Kolsteren
*/
public class SamlUtils {

    public static XMLGregorianCalendar getXMLGregorianCalendarNow() {
        return getXMLGregorianCalendar(new GregorianCalendar());
    }

    public static XMLGregorianCalendar getXMLGregorianCalendarNowPlusDuration(int field, int amount) {
        GregorianCalendar gregorianCalendar = new GregorianCalendar();
        gregorianCalendar.add(field, amount);
        return getXMLGregorianCalendar(gregorianCalendar);
    }

    private static XMLGregorianCalendar getXMLGregorianCalendar(GregorianCalendar gregorianCalendar) {
        try {
            DatatypeFactory dtf = DatatypeFactory.newInstance();
            return dtf.newXMLGregorianCalendar(gregorianCalendar);
        } catch (DatatypeConfigurationException e) {
            throw new RuntimeException(e);
        }
    }

    public static boolean hasAssertionExpired(AssertionType assertion) {
        ConditionsType conditionsType = assertion.getConditions();
        if (conditionsType != null) {
            XMLGregorianCalendar now = getXMLGregorianCalendarNow();
            XMLGregorianCalendar notBefore = conditionsType.getNotBefore();
            XMLGregorianCalendar notOnOrAfter = conditionsType.getNotOnOrAfter();

            if (notBefore != null) {
                int val = notBefore.compare(now);
                if (val == DatatypeConstants.INDETERMINATE || val == DatatypeConstants.GREATER) {
                    return true;
                }
            }

            if (notOnOrAfter != null) {
                int val = notOnOrAfter.compare(now);
                if (val != DatatypeConstants.GREATER) {
                    return true;
                }
            }

            return false;
        } else {
            return false;
        }
    }

    public static String getDocumentAsString(Document document) {
        Source source = new DOMSource(document);
        StringWriter sw = new StringWriter();

        Result streamResult = new StreamResult(sw);
        try {
            Transformer transformer = TransformerFactory.newInstance().newTransformer();
            transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
            transformer.setOutputProperty(OutputKeys.INDENT, "no");
            transformer.transform(source, streamResult);
        } catch (TransformerException e) {
            throw new RuntimeException(e);
        }

        return sw.toString();
    }
}
TOP

Related Classes of org.jboss.seam.security.external.saml.SamlUtils

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.