From 333ab96ba336d0052f115805810498886ac197aa Mon Sep 17 00:00:00 2001 From: "Marvin S. Addison" Date: Mon, 11 May 2015 12:01:48 -0400 Subject: [PATCH] Issue #100 Isolate JodaTime to SAML module. --- cas-client-core/pom.xml | 6 --- .../jasig/cas/client/util/CommonUtils.java | 22 -------- .../cas/client/util/CommonUtilsTests.java | 6 --- cas-client-support-saml/pom.xml | 6 +++ .../org/jasig/cas/client/util/SamlUtils.java | 53 +++++++++++++++++++ .../validation/Saml11TicketValidator.java | 6 +-- .../jasig/cas/client/util/SamlUtilsTest.java | 40 ++++++++++++++ .../Saml11TicketValidatorTests.java | 20 +++---- 8 files changed, 112 insertions(+), 47 deletions(-) create mode 100644 cas-client-support-saml/src/main/java/org/jasig/cas/client/util/SamlUtils.java create mode 100644 cas-client-support-saml/src/test/java/org/jasig/cas/client/util/SamlUtilsTest.java diff --git a/cas-client-core/pom.xml b/cas-client-core/pom.xml index 08a42b1..f82ac35 100644 --- a/cas-client-core/pom.xml +++ b/cas-client-core/pom.xml @@ -34,12 +34,6 @@ 2.6 - - joda-time - joda-time - 2.7 - - xml-security xmlsec diff --git a/cas-client-core/src/main/java/org/jasig/cas/client/util/CommonUtils.java b/cas-client-core/src/main/java/org/jasig/cas/client/util/CommonUtils.java index e7cc375..95eff51 100644 --- a/cas-client-core/src/main/java/org/jasig/cas/client/util/CommonUtils.java +++ b/cas-client-core/src/main/java/org/jasig/cas/client/util/CommonUtils.java @@ -22,9 +22,6 @@ import java.io.*; import java.net.HttpURLConnection; import java.net.URL; import java.net.URLEncoder; -import java.text.DateFormat; -import java.text.ParseException; -import java.text.SimpleDateFormat; import java.util.*; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -33,11 +30,6 @@ import org.jasig.cas.client.ssl.HttpURLConnectionFactory; import org.jasig.cas.client.ssl.HttpsURLConnectionFactory; import org.jasig.cas.client.validation.ProxyList; import org.jasig.cas.client.validation.ProxyListEditor; -import org.joda.time.DateTime; -import org.joda.time.DateTimeZone; -import org.joda.time.LocalDateTime; -import org.joda.time.format.DateTimeFormatter; -import org.joda.time.format.ISODateTimeFormat; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -64,24 +56,10 @@ public final class CommonUtils { private static final HttpURLConnectionFactory DEFAULT_URL_CONNECTION_FACTORY = new HttpsURLConnectionFactory(); - private static final DateTimeFormatter ISO_FORMAT = ISODateTimeFormat.dateTimeNoMillis(); - private CommonUtils() { // nothing to do } - public static String formatForUtcTime(final Date date) { - return ISO_FORMAT.print(new DateTime(date).withZone(DateTimeZone.UTC)); - } - - - public static Date parseUtcDate(final String date) { - if (isEmpty(date)) { - return null; - } - return ISODateTimeFormat.dateTimeParser().parseDateTime(date).toDate(); - } - /** * Check whether the object is null or not. If it is, throw an exception and * display the message. diff --git a/cas-client-core/src/test/java/org/jasig/cas/client/util/CommonUtilsTests.java b/cas-client-core/src/test/java/org/jasig/cas/client/util/CommonUtilsTests.java index 479a3f3..1b28ad5 100644 --- a/cas-client-core/src/test/java/org/jasig/cas/client/util/CommonUtilsTests.java +++ b/cas-client-core/src/test/java/org/jasig/cas/client/util/CommonUtilsTests.java @@ -21,7 +21,6 @@ package org.jasig.cas.client.util; import java.net.URL; import java.util.ArrayList; import java.util.Collection; -import java.util.Date; import junit.framework.TestCase; import org.jasig.cas.client.PublicTestHttpServer; @@ -194,9 +193,4 @@ public final class CommonUtilsTests extends TestCase { public void testUrlEncode() { assertEquals("this+is+a+very+special+parameter+with+%3D%25%2F", CommonUtils.urlEncode("this is a very special parameter with =%/")); } - - public void testParseUtcDate() { - final Date expected = new Date(1424437961025L); - assertEquals(expected, CommonUtils.parseUtcDate("2015-02-20T08:12:41.025-0500")); - } } diff --git a/cas-client-support-saml/pom.xml b/cas-client-support-saml/pom.xml index 60c49f7..b63ae11 100644 --- a/cas-client-support-saml/pom.xml +++ b/cas-client-support-saml/pom.xml @@ -16,7 +16,13 @@ cas-client-core ${project.version} + + joda-time + joda-time + 2.7 + + org.jasig.cas.client cas-client-core diff --git a/cas-client-support-saml/src/main/java/org/jasig/cas/client/util/SamlUtils.java b/cas-client-support-saml/src/main/java/org/jasig/cas/client/util/SamlUtils.java new file mode 100644 index 0000000..8e74a71 --- /dev/null +++ b/cas-client-support-saml/src/main/java/org/jasig/cas/client/util/SamlUtils.java @@ -0,0 +1,53 @@ +/* + * Licensed to Jasig under one or more contributor license + * agreements. See the NOTICE file distributed with this work + * for additional information regarding copyright ownership. + * Jasig licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a + * copy of the License at the following location: + * * + * http://www.apache.org/licenses/LICENSE-2.0 + * * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.jasig.cas.client.util; + +import java.util.Date; + +import org.joda.time.DateTime; +import org.joda.time.DateTimeZone; +import org.joda.time.format.DateTimeFormatter; +import org.joda.time.format.ISODateTimeFormat; + +/** + * SAML utility class. + * + * @author Marvin S. Addison + * @since 3.4 + */ +public final class SamlUtils { + + private static final DateTimeFormatter ISO_FORMAT = ISODateTimeFormat.dateTimeNoMillis(); + + private SamlUtils() { + // nothing to do + } + + public static String formatForUtcTime(final Date date) { + return ISO_FORMAT.print(new DateTime(date).withZone(DateTimeZone.UTC)); + } + + public static Date parseUtcDate(final String date) { + if (CommonUtils.isEmpty(date)) { + return null; + } + return ISODateTimeFormat.dateTimeParser().parseDateTime(date).toDate(); + } +} diff --git a/cas-client-support-saml/src/main/java/org/jasig/cas/client/validation/Saml11TicketValidator.java b/cas-client-support-saml/src/main/java/org/jasig/cas/client/validation/Saml11TicketValidator.java index f1e5f3a..4a59081 100644 --- a/cas-client-support-saml/src/main/java/org/jasig/cas/client/validation/Saml11TicketValidator.java +++ b/cas-client-support-saml/src/main/java/org/jasig/cas/client/validation/Saml11TicketValidator.java @@ -120,9 +120,9 @@ public final class Saml11TicketValidator extends AbstractUrlBasedTicketValidator protected Assertion parseResponseFromServer(final String response) throws TicketValidationException { try { final Document document = XmlUtils.newDocument(response); - final Date assertionValidityStart = CommonUtils.parseUtcDate( + final Date assertionValidityStart = SamlUtils.parseUtcDate( XPATH_ASSERTION_DATE_START.evaluateAsString(document)); - final Date assertionValidityEnd = CommonUtils.parseUtcDate( + final Date assertionValidityEnd = SamlUtils.parseUtcDate( XPATH_ASSERTION_DATE_END.evaluateAsString(document)); if (!isValidAssertion(assertionValidityStart, assertionValidityEnd)) { throw new TicketValidationException("Invalid SAML assertion"); @@ -191,7 +191,7 @@ public final class Saml11TicketValidator extends AbstractUrlBasedTicketValidator final String request = String.format( SAML_REQUEST_TEMPLATE, generateId(), - CommonUtils.formatForUtcTime(new Date()), + SamlUtils.formatForUtcTime(new Date()), ticket); HttpURLConnection conn = null; try { diff --git a/cas-client-support-saml/src/test/java/org/jasig/cas/client/util/SamlUtilsTest.java b/cas-client-support-saml/src/test/java/org/jasig/cas/client/util/SamlUtilsTest.java new file mode 100644 index 0000000..bd42201 --- /dev/null +++ b/cas-client-support-saml/src/test/java/org/jasig/cas/client/util/SamlUtilsTest.java @@ -0,0 +1,40 @@ +/* + * Licensed to Jasig under one or more contributor license + * agreements. See the NOTICE file distributed with this work + * for additional information regarding copyright ownership. + * Jasig licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a + * copy of the License at the following location: + * * + * http://www.apache.org/licenses/LICENSE-2.0 + * * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.jasig.cas.client.util; + +import java.util.Date; + +import org.junit.Test; + +import static org.junit.Assert.*; + +/** + * Test cases for {@link SamlUtils}. + * + * @author Marvin S. Addison + */ +public class SamlUtilsTest { + + @Test + public void testParseUtcDate() { + final Date expected = new Date(1424437961025L); + assertEquals(expected, SamlUtils.parseUtcDate("2015-02-20T08:12:41.025-0500")); + } +} \ No newline at end of file diff --git a/cas-client-support-saml/src/test/java/org/jasig/cas/client/validation/Saml11TicketValidatorTests.java b/cas-client-support-saml/src/test/java/org/jasig/cas/client/validation/Saml11TicketValidatorTests.java index 7738966..8d90800 100644 --- a/cas-client-support-saml/src/test/java/org/jasig/cas/client/validation/Saml11TicketValidatorTests.java +++ b/cas-client-support-saml/src/test/java/org/jasig/cas/client/validation/Saml11TicketValidatorTests.java @@ -24,7 +24,7 @@ import java.io.UnsupportedEncodingException; import java.util.Collection; import java.util.Date; import org.jasig.cas.client.PublicTestHttpServer; -import org.jasig.cas.client.util.CommonUtils; +import org.jasig.cas.client.util.SamlUtils; import org.joda.time.DateTime; import org.joda.time.DateTimeZone; import org.joda.time.Interval; @@ -83,13 +83,13 @@ public final class Saml11TicketValidatorTests extends AbstractTicketValidatorTes final Interval range = currentTimeRangeInterval(); final Date now = new Date(); final String RESPONSE = "testtestPrincipalurn:oasis:names:tc:SAML:1.0:cm:artifact"; server.content = RESPONSE.getBytes(server.encoding); try { @@ -107,21 +107,21 @@ public final class Saml11TicketValidatorTests extends AbstractTicketValidatorTes final String response = "" + "" + "" + "" + "" + "https://example.com/test-client/secure/" + "" + "" + "testPrincipal" + "urn:oasis:names:tc:SAML:1.0:cm:artifact"