From 5f1a30a31425ed34bdd239c83c736e3f27d0a3cd Mon Sep 17 00:00:00 2001 From: Misagh Moayyed Date: Mon, 10 Dec 2012 21:10:10 -0700 Subject: [PATCH] CASC-199: Allow for an additional option to exclude empty proxy chains. --- .../validation/Cas20ProxyTicketValidator.java | 23 +++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/cas-client-core/src/main/java/org/jasig/cas/client/validation/Cas20ProxyTicketValidator.java b/cas-client-core/src/main/java/org/jasig/cas/client/validation/Cas20ProxyTicketValidator.java index cea0a26..e7cde21 100644 --- a/cas-client-core/src/main/java/org/jasig/cas/client/validation/Cas20ProxyTicketValidator.java +++ b/cas-client-core/src/main/java/org/jasig/cas/client/validation/Cas20ProxyTicketValidator.java @@ -27,7 +27,6 @@ import java.util.List; * Extension to the traditional Service Ticket validation that will validate service tickets and proxy tickets. * * @author Scott Battaglia - * @version $Revision$ $Date$ * @since 3.1 */ public class Cas20ProxyTicketValidator extends Cas20ServiceTicketValidator { @@ -37,6 +36,9 @@ public class Cas20ProxyTicketValidator extends Cas20ServiceTicketValidator { /** This should be a list of an array of Strings */ private ProxyList allowedProxyChains = new ProxyList(); + /** Allows for an empty chain of proxy callback urls. **/ + private boolean allowEmptyProxyChain = true; + public Cas20ProxyTicketValidator(final String casServerUrlPrefix) { super(casServerUrlPrefix); } @@ -51,13 +53,13 @@ public class Cas20ProxyTicketValidator extends Cas20ServiceTicketValidator { protected void customParseResponse(final String response, final Assertion assertion) throws TicketValidationException { final List proxies = XmlUtils.getTextForElements(response, "proxy"); - final String[] proxiedList = proxies.toArray(new String[proxies.size()]); - + // this means there was nothing in the proxy chain, which is okay - if (proxies.isEmpty() || this.acceptAnyProxy) { + if ((this.allowEmptyProxyChain && proxies.isEmpty()) || this.acceptAnyProxy) { return; } + final String[] proxiedList = proxies.toArray(new String[proxies.size()]); if (this.allowedProxyChains.contains(proxiedList)) { return; } @@ -76,4 +78,17 @@ public class Cas20ProxyTicketValidator extends Cas20ServiceTicketValidator { protected boolean isAcceptAnyProxy() { return this.acceptAnyProxy; } + + protected boolean isAllowEmptyProxyChain() { + return this.allowEmptyProxyChain; + } + + /** + * Set to determine whether empty proxy chains are allowed. + * @see #customParseResponse(String, Assertion) + * @param allowEmptyProxyChain + */ + public void setAllowEmptyProxyChain(final boolean allowEmptyProxyChain) { + this.allowEmptyProxyChain = allowEmptyProxyChain; + } }