[java-identity-provider COMMIT] in /trunk: idp-cas-api/src/main/java/net/shibboleth/idp/cas/protocol/ServiceTicketRes...
noreply at shibboleth.net
noreply at shibboleth.net
Wed Aug 31 14:17:24 EDT 2016
Author: serac
Date: Wed Aug 31 14:17:23 2016
New Revision: 8361
URL: http://svn.shibboleth.net/view/java-identity-provider?rev=8361&view=rev
Log:
IDP-1018 Percent encode tickets.
https://issues.shibboleth.net/jira/browse/IDP-1018
With EncodingTicketService tickets can contain characters ("+", "/", "=")
that need to be percent-encoded for proper handling by many HTTP libs.
Modified:
trunk/idp-cas-api/src/main/java/net/shibboleth/idp/cas/protocol/ServiceTicketResponse.java
trunk/idp-conf/src/test/java/net/shibboleth/idp/test/flows/cas/LoginFlowInitialAuthnTest.java
trunk/idp-conf/src/test/java/net/shibboleth/idp/test/flows/cas/LoginFlowTest.java
Modified: trunk/idp-cas-api/src/main/java/net/shibboleth/idp/cas/protocol/ServiceTicketResponse.java
URL: http://svn.shibboleth.net/view/java-identity-provider/trunk/idp-cas-api/src/main/java/net/shibboleth/idp/cas/protocol/ServiceTicketResponse.java?rev=8361&r1=8360&r2=8361&view=diff
==============================================================================
--- trunk/idp-cas-api/src/main/java/net/shibboleth/idp/cas/protocol/ServiceTicketResponse.java (original)
+++ trunk/idp-cas-api/src/main/java/net/shibboleth/idp/cas/protocol/ServiceTicketResponse.java Wed Aug 31 14:17:23 2016
@@ -17,8 +17,14 @@
package net.shibboleth.idp.cas.protocol;
+import java.net.MalformedURLException;
+
+import net.shibboleth.utilities.java.support.collection.Pair;
import net.shibboleth.utilities.java.support.logic.Constraint;
-import org.springframework.web.util.UriComponentsBuilder;
+import net.shibboleth.utilities.java.support.net.URISupport;
+import net.shibboleth.utilities.java.support.net.URLBuilder;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import javax.annotation.Nonnull;
@@ -28,6 +34,9 @@
* @author Marvin S. Addison
*/
public class ServiceTicketResponse {
+ /** Logger. */
+ private final Logger logger = LoggerFactory.getLogger(ServiceTicketResponse.class);
+
/** Service URL */
@Nonnull
private final String service;
@@ -81,8 +90,24 @@
* @return URL that may be used to redirect to a service with a granted ticket.
*/
public String getRedirectUrl() {
- final UriComponentsBuilder builder = UriComponentsBuilder.fromUriString(service);
- builder.queryParam(getTicketParameterName(), ticket);
- return builder.build().toUriString();
+ try {
+ final URLBuilder builder = new URLBuilder(service);
+ builder.getQueryParams().add(new Pair<>(getTicketParameterName(), ticket));
+ return builder.buildURL();
+ } catch (MalformedURLException e) {
+ if (logger.isDebugEnabled()) {
+ logger.debug("Error decoding URL {}", service, e);
+ } else {
+ logger.warn("Error decoding URL {}", service);
+ }
+ // Fall back to appending the ticket to service URL
+ final char sep;
+ if (service.indexOf('?') > -1) {
+ sep = '&';
+ } else {
+ sep = '?';
+ }
+ return service + sep + getTicketParameterName() + '=' + URISupport.doURLEncode(ticket);
+ }
}
}
Modified: trunk/idp-conf/src/test/java/net/shibboleth/idp/test/flows/cas/LoginFlowInitialAuthnTest.java
URL: http://svn.shibboleth.net/view/java-identity-provider/trunk/idp-conf/src/test/java/net/shibboleth/idp/test/flows/cas/LoginFlowInitialAuthnTest.java?rev=8361&r1=8360&r2=8361&view=diff
==============================================================================
--- trunk/idp-conf/src/test/java/net/shibboleth/idp/test/flows/cas/LoginFlowInitialAuthnTest.java (original)
+++ trunk/idp-conf/src/test/java/net/shibboleth/idp/test/flows/cas/LoginFlowInitialAuthnTest.java Wed Aug 31 14:17:23 2016
@@ -30,6 +30,7 @@
import net.shibboleth.idp.session.criterion.SessionIdCriterion;
import net.shibboleth.idp.session.impl.StorageBackedSessionManager;
import net.shibboleth.idp.test.flows.AbstractFlowTest;
+import net.shibboleth.utilities.java.support.net.URISupport;
import net.shibboleth.utilities.java.support.resolver.CriteriaSet;
import org.opensaml.profile.context.ProfileRequestContext;
@@ -83,7 +84,7 @@
assertEquals(outcome.getId(), "RedirectToService");
final String url = externalContext.getExternalRedirectUrl();
assertTrue(url.contains("ticket=ST-"));
- final String ticketId = url.substring(url.indexOf("ticket=") + 7);
+ final String ticketId = URISupport.doURLDecode(url.substring(url.indexOf("ticket=") + 7));
final Ticket st = ticketService.removeServiceTicket(ticketId);
assertNotNull(st);
final IdPSession session = sessionManager.resolveSingle(
Modified: trunk/idp-conf/src/test/java/net/shibboleth/idp/test/flows/cas/LoginFlowTest.java
URL: http://svn.shibboleth.net/view/java-identity-provider/trunk/idp-conf/src/test/java/net/shibboleth/idp/test/flows/cas/LoginFlowTest.java?rev=8361&r1=8360&r2=8361&view=diff
==============================================================================
[... 69 lines stripped ...]
More information about the commits
mailing list