From 80ff9857f005e89350848b1a2e5c22766615de32 Mon Sep 17 00:00:00 2001 From: John Gasper Date: Wed, 5 Mar 2014 10:17:59 -0800 Subject: [PATCH] Added support for having regex expressions in the proxy (chaining) list. --- .../cas/client/validation/ProxyList.java | 19 +++++++++++ .../Cas20ProxyTicketValidatorTests.java | 32 +++++++++++++++++++ 2 files changed, 51 insertions(+) diff --git a/cas-client-core/src/main/java/org/jasig/cas/client/validation/ProxyList.java b/cas-client-core/src/main/java/org/jasig/cas/client/validation/ProxyList.java index 3585d5b..7baaa56 100644 --- a/cas-client-core/src/main/java/org/jasig/cas/client/validation/ProxyList.java +++ b/cas-client-core/src/main/java/org/jasig/cas/client/validation/ProxyList.java @@ -27,6 +27,7 @@ import org.jasig.cas.client.util.CommonUtils; * Holding class for the proxy list to make Spring configuration easier. * * @author Scott Battaglia + * @author John Gasper * @version $Revision$ $Date$ * @since 3.1.3 */ @@ -47,6 +48,24 @@ public final class ProxyList { for (final String[] list : this.proxyChains) { if (Arrays.equals(proxiedList, list)) { return true; + } else { + //strings might be regex, so check for each string + if (list.length == proxiedList.length) { + boolean passed = false; + + for (int i=0; i list = new ArrayList(); + list.add(new String[] { "proxy1", "proxy2", "^proxy3/[a-z]*/" }); + this.ticketValidator.setAllowedProxyChains(new ProxyList(list)); + + final String USERNAME = "username"; + final String RESPONSE = "usernamePGTIOU-84678-8a9d...proxy1proxy2proxy3/abc/"; + server.content = RESPONSE.getBytes(server.encoding); + + final Assertion assertion = this.ticketValidator.validate("test", "test"); + assertEquals(USERNAME, assertion.getPrincipal().getName()); + } + + @Test + public void testRegexProxyChainWithInvalidProxy() throws TicketValidationException, UnsupportedEncodingException { + final List list = new ArrayList(); + list.add(new String[] { "proxy1", "proxy2", "^proxy3/[a-z]*/" }); + this.ticketValidator.setAllowedProxyChains(new ProxyList(list)); + + final String RESPONSE = "usernamePGTIOU-84678-8a9d...proxy/ABC/proxy2proxy3"; + server.content = RESPONSE.getBytes(server.encoding); + + try { + this.ticketValidator.validate("test", "test"); + fail("Invalid proxy chain"); + } catch (InvalidProxyChainTicketValidationException e) { + // expected + } + } + @Test public void testConstructionFromSpringBean() throws TicketValidationException, UnsupportedEncodingException { final ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(