From 02417bdd22142acb370ec899f0c674498026a632 Mon Sep 17 00:00:00 2001
From: vramik <vramik@redhat.com>
Date: Wed, 14 Nov 2018 19:09:22 +0000
Subject: [PATCH] KEYCLOAK-7707
---
src/main/java/org/keycloak/protocol/cas/utils/RedirectUtils.java | 19 +++++++++++++++++--
1 files changed, 17 insertions(+), 2 deletions(-)
diff --git a/src/main/java/org/keycloak/protocol/cas/utils/RedirectUtils.java b/src/main/java/org/keycloak/protocol/cas/utils/RedirectUtils.java
index c61bdd0..97d1de9 100644
--- a/src/main/java/org/keycloak/protocol/cas/utils/RedirectUtils.java
+++ b/src/main/java/org/keycloak/protocol/cas/utils/RedirectUtils.java
@@ -26,6 +26,7 @@
import javax.ws.rs.core.UriInfo;
import java.net.URI;
+import java.net.URISyntaxException;
import java.util.Collection;
import java.util.HashSet;
import java.util.Set;
@@ -54,7 +55,7 @@
public static Set<String> resolveValidRedirects(UriInfo uriInfo, String rootUrl, Set<String> validRedirects) {
// If the valid redirect URI is relative (no scheme, host, port) then use the request's scheme, host, and port
- Set<String> resolveValidRedirects = new HashSet<String>();
+ Set<String> resolveValidRedirects = new HashSet<>();
for (String validRedirect : validRedirects) {
resolveValidRedirects.add(validRedirect); // add even relative urls.
if (validRedirect.startsWith("/")) {
@@ -69,12 +70,18 @@
private static Set<String> getValidateRedirectUris(UriInfo uriInfo, RealmModel realm) {
Set<String> redirects = new HashSet<>();
for (ClientModel client : realm.getClients()) {
- redirects.addAll(resolveValidRedirects(uriInfo, client.getRootUrl(), client.getRedirectUris()));
+ if (client.isEnabled()) {
+ redirects.addAll(resolveValidRedirects(uriInfo, client.getRootUrl(), client.getRedirectUris()));
+ }
}
return redirects;
}
private static String verifyRedirectUri(UriInfo uriInfo, String rootUrl, String redirectUri, RealmModel realm, Set<String> validRedirects, boolean requireRedirectUri) {
+
+ if (redirectUri != null)
+ redirectUri = normalizeUrl(redirectUri);
+
if (redirectUri == null) {
if (!requireRedirectUri) {
redirectUri = getSingleValidRedirectUri(validRedirects);
@@ -170,4 +177,12 @@
return validRedirect;
}
+ private static String normalizeUrl(String url) {
+ try {
+ URI uri = new URI(url);
+ return uri.normalize().toString();
+ } catch (URISyntaxException e) {
+ throw new IllegalArgumentException("Invalid URL syntax: " + e.getMessage());
+ }
+ }
}
--
Gitblit v1.10.0