| | |
| | | package org.keycloak.protocol.oidc.utils; |
| | | |
| | | import org.jboss.logging.Logger; |
| | | import org.keycloak.models.ClientModel; |
| | | import org.keycloak.models.Constants; |
| | | import org.keycloak.models.RealmModel; |
| | | import org.keycloak.services.Urls; |
| | | import org.keycloak.services.ServicesLogger; |
| | | |
| | | import javax.ws.rs.core.UriInfo; |
| | | import java.net.URI; |
| | |
| | | */ |
| | | public class RedirectUtils { |
| | | |
| | | private static final Logger logger = Logger.getLogger(RedirectUtils.class); |
| | | private static final ServicesLogger logger = ServicesLogger.ROOT_LOGGER; |
| | | |
| | | public static String verifyRealmRedirectUri(UriInfo uriInfo, String redirectUri, RealmModel realm) { |
| | | Set<String> validRedirects = getValidateRedirectUris(uriInfo, realm); |
| | |
| | | logger.debug("No Redirect URIs supplied"); |
| | | redirectUri = null; |
| | | } else { |
| | | redirectUri = lowerCaseHostname(redirectUri); |
| | | |
| | | String r = redirectUri.indexOf('?') != -1 ? redirectUri.substring(0, redirectUri.indexOf('?')) : redirectUri; |
| | | Set<String> resolveValidRedirects = resolveValidRedirects(uriInfo, rootUrl, validRedirects); |
| | | |
| | |
| | | } |
| | | } |
| | | |
| | | private static String lowerCaseHostname(String redirectUri) { |
| | | int n = redirectUri.indexOf('/', 7); |
| | | if (n == -1) { |
| | | return redirectUri.toLowerCase(); |
| | | } else { |
| | | return redirectUri.substring(0, n).toLowerCase() + redirectUri.substring(n); |
| | | } |
| | | } |
| | | |
| | | private static String relativeToAbsoluteURI(UriInfo uriInfo, String rootUrl, String relative) { |
| | | if (rootUrl == null) { |
| | | URI baseUri = uriInfo.getBaseUri(); |