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.