ensure API compatibility
This commit is contained in:
parent
18c79fcf00
commit
872fc49fb7
|
|
@ -6,9 +6,9 @@
|
||||||
* Version 2.0 (the "License"); you may not use this file
|
* Version 2.0 (the "License"); you may not use this file
|
||||||
* except in compliance with the License. You may obtain a
|
* except in compliance with the License. You may obtain a
|
||||||
* copy of the License at the following location:
|
* copy of the License at the following location:
|
||||||
*
|
* <p>
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
*
|
* <p>
|
||||||
* Unless required by applicable law or agreed to in writing,
|
* Unless required by applicable law or agreed to in writing,
|
||||||
* software distributed under the License is distributed on an
|
* software distributed under the License is distributed on an
|
||||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
|
@ -18,16 +18,6 @@
|
||||||
*/
|
*/
|
||||||
package org.jasig.cas.client.util;
|
package org.jasig.cas.client.util;
|
||||||
|
|
||||||
import java.io.*;
|
|
||||||
import java.net.HttpURLConnection;
|
|
||||||
import java.net.URL;
|
|
||||||
import java.net.URLEncoder;
|
|
||||||
import java.util.*;
|
|
||||||
|
|
||||||
import javax.net.ssl.SSLException;
|
|
||||||
import javax.servlet.http.HttpServletRequest;
|
|
||||||
import javax.servlet.http.HttpServletResponse;
|
|
||||||
|
|
||||||
import org.jasig.cas.client.Protocol;
|
import org.jasig.cas.client.Protocol;
|
||||||
import org.jasig.cas.client.proxy.ProxyGrantingTicketStorage;
|
import org.jasig.cas.client.proxy.ProxyGrantingTicketStorage;
|
||||||
import org.jasig.cas.client.ssl.HttpURLConnectionFactory;
|
import org.jasig.cas.client.ssl.HttpURLConnectionFactory;
|
||||||
|
|
@ -37,6 +27,23 @@ import org.jasig.cas.client.validation.ProxyListEditor;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
import javax.net.ssl.SSLException;
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
|
||||||
|
import java.io.Closeable;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStreamReader;
|
||||||
|
import java.io.UnsupportedEncodingException;
|
||||||
|
import java.net.HttpURLConnection;
|
||||||
|
import java.net.URL;
|
||||||
|
import java.net.URLEncoder;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Common utilities so that we don't need to include Commons Lang.
|
* Common utilities so that we don't need to include Commons Lang.
|
||||||
*
|
*
|
||||||
|
|
@ -61,19 +68,20 @@ public final class CommonUtils {
|
||||||
|
|
||||||
private static final String SERVICE_PARAMETER_NAMES;
|
private static final String SERVICE_PARAMETER_NAMES;
|
||||||
|
|
||||||
private CommonUtils() {
|
|
||||||
// nothing to do
|
|
||||||
}
|
|
||||||
|
|
||||||
static {
|
static {
|
||||||
final Set<String> serviceParameterSet = new HashSet<String>(4);
|
final Set<String> serviceParameterSet = new HashSet<String>(4);
|
||||||
for (final Protocol protocol : Protocol.values()) {
|
for (final Protocol protocol : Protocol.values()) {
|
||||||
serviceParameterSet.add(protocol.getServiceParameterName());
|
serviceParameterSet.add(protocol.getServiceParameterName());
|
||||||
}
|
}
|
||||||
SERVICE_PARAMETER_NAMES = serviceParameterSet.toString()
|
SERVICE_PARAMETER_NAMES = serviceParameterSet.toString()
|
||||||
.replaceAll("\\[|\\]", "")
|
.replaceAll("\\[|\\]", "")
|
||||||
.replaceAll("\\s", "");
|
.replaceAll("\\s", "");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private CommonUtils() {
|
||||||
|
// nothing to do
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check whether the object is null or not. If it is, throw an exception and
|
* Check whether the object is null or not. If it is, throw an exception and
|
||||||
* display the message.
|
* display the message.
|
||||||
|
|
@ -183,15 +191,30 @@ public final class CommonUtils {
|
||||||
* @return the fully constructed redirect url.
|
* @return the fully constructed redirect url.
|
||||||
*/
|
*/
|
||||||
public static String constructRedirectUrl(final String casServerLoginUrl, final String serviceParameterName,
|
public static String constructRedirectUrl(final String casServerLoginUrl, final String serviceParameterName,
|
||||||
final String serviceUrl, final boolean renew, final boolean gateway, final String method) {
|
final String serviceUrl, final boolean renew, final boolean gateway, final String method) {
|
||||||
return casServerLoginUrl + (casServerLoginUrl.contains("?") ? "&" : "?") + serviceParameterName + "="
|
return casServerLoginUrl + (casServerLoginUrl.contains("?") ? "&" : "?") + serviceParameterName + "="
|
||||||
+ urlEncode(serviceUrl) + (renew ? "&renew=true" : "") + (gateway ? "&gateway=true" : "")
|
+ urlEncode(serviceUrl) + (renew ? "&renew=true" : "") + (gateway ? "&gateway=true" : "")
|
||||||
+ (method != null ? "&method=" + method : "");
|
+ (method != null ? "&method=" + method : "");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Construct redirect url to a CAS server.
|
||||||
|
*
|
||||||
|
* @param casServerLoginUrl the cas server login url
|
||||||
|
* @param serviceParameterName the service parameter name
|
||||||
|
* @param serviceUrl the service url
|
||||||
|
* @param renew the renew
|
||||||
|
* @param gateway the gateway
|
||||||
|
* @return the string
|
||||||
|
*/
|
||||||
|
public static String constructRedirectUrl(final String casServerLoginUrl, final String serviceParameterName,
|
||||||
|
final String serviceUrl, final boolean renew, final boolean gateway) {
|
||||||
|
return constructRedirectUrl(casServerLoginUrl, serviceParameterName, serviceUrl, renew, gateway, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Url encode a value using UTF-8 encoding.
|
* Url encode a value using UTF-8 encoding.
|
||||||
*
|
*
|
||||||
* @param value the value to encode.
|
* @param value the value to encode.
|
||||||
* @return the encoded value.
|
* @return the encoded value.
|
||||||
*/
|
*/
|
||||||
|
|
@ -204,8 +227,8 @@ public final class CommonUtils {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void readAndRespondToProxyReceptorRequest(final HttpServletRequest request,
|
public static void readAndRespondToProxyReceptorRequest(final HttpServletRequest request,
|
||||||
final HttpServletResponse response, final ProxyGrantingTicketStorage proxyGrantingTicketStorage)
|
final HttpServletResponse response, final ProxyGrantingTicketStorage proxyGrantingTicketStorage)
|
||||||
throws IOException {
|
throws IOException {
|
||||||
final String proxyGrantingTicketIou = request.getParameter(PARAM_PROXY_GRANTING_TICKET_IOU);
|
final String proxyGrantingTicketIou = request.getParameter(PARAM_PROXY_GRANTING_TICKET_IOU);
|
||||||
|
|
||||||
final String proxyGrantingTicket = request.getParameter(PARAM_PROXY_GRANTING_TICKET);
|
final String proxyGrantingTicket = request.getParameter(PARAM_PROXY_GRANTING_TICKET);
|
||||||
|
|
@ -216,12 +239,12 @@ public final class CommonUtils {
|
||||||
}
|
}
|
||||||
|
|
||||||
LOGGER.debug("Received proxyGrantingTicketId [{}] for proxyGrantingTicketIou [{}]", proxyGrantingTicket,
|
LOGGER.debug("Received proxyGrantingTicketId [{}] for proxyGrantingTicketIou [{}]", proxyGrantingTicket,
|
||||||
proxyGrantingTicketIou);
|
proxyGrantingTicketIou);
|
||||||
|
|
||||||
proxyGrantingTicketStorage.save(proxyGrantingTicketIou, proxyGrantingTicket);
|
proxyGrantingTicketStorage.save(proxyGrantingTicketIou, proxyGrantingTicket);
|
||||||
|
|
||||||
LOGGER.debug("Successfully saved proxyGrantingTicketId [{}] for proxyGrantingTicketIou [{}]",
|
LOGGER.debug("Successfully saved proxyGrantingTicketId [{}] for proxyGrantingTicketIou [{}]",
|
||||||
proxyGrantingTicket, proxyGrantingTicketIou);
|
proxyGrantingTicket, proxyGrantingTicketIou);
|
||||||
|
|
||||||
response.getWriter().write("<?xml version=\"1.0\"?>");
|
response.getWriter().write("<?xml version=\"1.0\"?>");
|
||||||
response.getWriter().write("<casClient:proxySuccess xmlns:casClient=\"http://www.yale.edu/tp/casClient\" />");
|
response.getWriter().write("<casClient:proxySuccess xmlns:casClient=\"http://www.yale.edu/tp/casClient\" />");
|
||||||
|
|
@ -254,7 +277,7 @@ public final class CommonUtils {
|
||||||
|
|
||||||
return serverNames[0];
|
return serverNames[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
private static boolean requestIsOnStandardPort(final HttpServletRequest request) {
|
private static boolean requestIsOnStandardPort(final HttpServletRequest request) {
|
||||||
final int serverPort = request.getServerPort();
|
final int serverPort = request.getServerPort();
|
||||||
return serverPort == 80 || serverPort == 443;
|
return serverPort == 80 || serverPort == 443;
|
||||||
|
|
@ -281,7 +304,7 @@ public final class CommonUtils {
|
||||||
final String service, final String serverNames,
|
final String service, final String serverNames,
|
||||||
final String artifactParameterName, final boolean encode) {
|
final String artifactParameterName, final boolean encode) {
|
||||||
return constructServiceUrl(request, response, service, serverNames, SERVICE_PARAMETER_NAMES
|
return constructServiceUrl(request, response, service, serverNames, SERVICE_PARAMETER_NAMES
|
||||||
, artifactParameterName, encode);
|
, artifactParameterName, encode);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -301,8 +324,8 @@ public final class CommonUtils {
|
||||||
* @return the service url to use.
|
* @return the service url to use.
|
||||||
*/
|
*/
|
||||||
public static String constructServiceUrl(final HttpServletRequest request, final HttpServletResponse response,
|
public static String constructServiceUrl(final HttpServletRequest request, final HttpServletResponse response,
|
||||||
final String service, final String serverNames, final String serviceParameterName,
|
final String service, final String serverNames, final String serviceParameterName,
|
||||||
final String artifactParameterName, final boolean encode) {
|
final String artifactParameterName, final boolean encode) {
|
||||||
if (CommonUtils.isNotBlank(service)) {
|
if (CommonUtils.isNotBlank(service)) {
|
||||||
return encode ? response.encodeURL(service) : service;
|
return encode ? response.encodeURL(service) : service;
|
||||||
}
|
}
|
||||||
|
|
@ -330,10 +353,10 @@ public final class CommonUtils {
|
||||||
for (final URIBuilder.BasicNameValuePair pair : originalRequestUrl.getQueryParams()) {
|
for (final URIBuilder.BasicNameValuePair pair : originalRequestUrl.getQueryParams()) {
|
||||||
final String name = pair.getName();
|
final String name = pair.getName();
|
||||||
if (!name.equals(artifactParameterName) && !serviceParameterNames.contains(name)) {
|
if (!name.equals(artifactParameterName) && !serviceParameterNames.contains(name)) {
|
||||||
if (name.contains("&") || name.contains("=") ){
|
if (name.contains("&") || name.contains("=")) {
|
||||||
final URIBuilder encodedParamBuilder = new URIBuilder();
|
final URIBuilder encodedParamBuilder = new URIBuilder();
|
||||||
encodedParamBuilder.setParameters(name);
|
encodedParamBuilder.setParameters(name);
|
||||||
for (final URIBuilder.BasicNameValuePair pair2 :encodedParamBuilder.getQueryParams()){
|
for (final URIBuilder.BasicNameValuePair pair2 : encodedParamBuilder.getQueryParams()) {
|
||||||
final String name2 = pair2.getName();
|
final String name2 = pair2.getName();
|
||||||
if (!name2.equals(artifactParameterName) && !serviceParameterNames.contains(name2)) {
|
if (!name2.equals(artifactParameterName) && !serviceParameterNames.contains(name2)) {
|
||||||
builder.addParameter(name2, pair2.getValue());
|
builder.addParameter(name2, pair2.getValue());
|
||||||
|
|
@ -369,13 +392,13 @@ public final class CommonUtils {
|
||||||
* @return the value of the parameter.
|
* @return the value of the parameter.
|
||||||
*/
|
*/
|
||||||
public static String safeGetParameter(final HttpServletRequest request, final String parameter,
|
public static String safeGetParameter(final HttpServletRequest request, final String parameter,
|
||||||
final List<String> parameters) {
|
final List<String> parameters) {
|
||||||
if ("POST".equals(request.getMethod()) && parameters.contains(parameter)) {
|
if ("POST".equals(request.getMethod()) && parameters.contains(parameter)) {
|
||||||
LOGGER.debug("safeGetParameter called on a POST HttpServletRequest for Restricted Parameters. Cannot complete check safely. Reverting to standard behavior for this Parameter");
|
LOGGER.debug("safeGetParameter called on a POST HttpServletRequest for Restricted Parameters. Cannot complete check safely. Reverting to standard behavior for this Parameter");
|
||||||
return request.getParameter(parameter);
|
return request.getParameter(parameter);
|
||||||
}
|
}
|
||||||
return request.getQueryString() == null || !request.getQueryString().contains(parameter) ? null : request
|
return request.getQueryString() == null || !request.getQueryString().contains(parameter) ? null : request
|
||||||
.getParameter(parameter);
|
.getParameter(parameter);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String safeGetParameter(final HttpServletRequest request, final String parameter) {
|
public static String safeGetParameter(final HttpServletRequest request, final String parameter) {
|
||||||
|
|
@ -392,11 +415,11 @@ public final class CommonUtils {
|
||||||
*/
|
*/
|
||||||
@Deprecated
|
@Deprecated
|
||||||
public static String getResponseFromServer(final String constructedUrl, final String encoding) {
|
public static String getResponseFromServer(final String constructedUrl, final String encoding) {
|
||||||
try {
|
try {
|
||||||
return getResponseFromServer(new URL(constructedUrl), DEFAULT_URL_CONNECTION_FACTORY, encoding);
|
return getResponseFromServer(new URL(constructedUrl), DEFAULT_URL_CONNECTION_FACTORY, encoding);
|
||||||
} catch (final IOException e) {
|
} catch (final IOException e) {
|
||||||
throw new RuntimeException(e.getMessage(), e);
|
throw new RuntimeException(e.getMessage(), e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Deprecated
|
@Deprecated
|
||||||
|
|
@ -413,8 +436,8 @@ public final class CommonUtils {
|
||||||
* @return the response.
|
* @return the response.
|
||||||
*/
|
*/
|
||||||
public static String getResponseFromServer(final URL constructedUrl, final HttpURLConnectionFactory factory,
|
public static String getResponseFromServer(final URL constructedUrl, final HttpURLConnectionFactory factory,
|
||||||
final String encoding) {
|
final String encoding) {
|
||||||
|
|
||||||
HttpURLConnection conn = null;
|
HttpURLConnection conn = null;
|
||||||
InputStreamReader in = null;
|
InputStreamReader in = null;
|
||||||
try {
|
try {
|
||||||
|
|
@ -434,13 +457,13 @@ public final class CommonUtils {
|
||||||
|
|
||||||
return builder.toString();
|
return builder.toString();
|
||||||
} catch (final RuntimeException e) {
|
} catch (final RuntimeException e) {
|
||||||
throw e;
|
throw e;
|
||||||
} catch (final SSLException e) {
|
} catch (final SSLException e) {
|
||||||
LOGGER.error("SSL error getting response from host: {} : Error Message: {}", constructedUrl.getHost(), e.getMessage(), e);
|
LOGGER.error("SSL error getting response from host: {} : Error Message: {}", constructedUrl.getHost(), e.getMessage(), e);
|
||||||
throw new RuntimeException(e);
|
throw new RuntimeException(e);
|
||||||
} catch (final IOException e) {
|
} catch (final IOException e) {
|
||||||
LOGGER.error("Error getting response from host: [{}] with path: [{}] and protocol: [{}] Error Message: {}",
|
LOGGER.error("Error getting response from host: [{}] with path: [{}] and protocol: [{}] Error Message: {}",
|
||||||
constructedUrl.getHost(), constructedUrl.getPath(), constructedUrl.getProtocol(), e.getMessage(), e);
|
constructedUrl.getHost(), constructedUrl.getPath(), constructedUrl.getProtocol(), e.getMessage(), e);
|
||||||
throw new RuntimeException(e);
|
throw new RuntimeException(e);
|
||||||
} finally {
|
} finally {
|
||||||
closeQuietly(in);
|
closeQuietly(in);
|
||||||
|
|
@ -574,11 +597,11 @@ public final class CommonUtils {
|
||||||
case 1: {
|
case 1: {
|
||||||
final char ch0 = str.charAt(0);
|
final char ch0 = str.charAt(0);
|
||||||
if (ch0 == 'y' || ch0 == 'Y' ||
|
if (ch0 == 'y' || ch0 == 'Y' ||
|
||||||
ch0 == 't' || ch0 == 'T') {
|
ch0 == 't' || ch0 == 'T') {
|
||||||
return Boolean.TRUE;
|
return Boolean.TRUE;
|
||||||
}
|
}
|
||||||
if (ch0 == 'n' || ch0 == 'N' ||
|
if (ch0 == 'n' || ch0 == 'N' ||
|
||||||
ch0 == 'f' || ch0 == 'F') {
|
ch0 == 'f' || ch0 == 'F') {
|
||||||
return Boolean.FALSE;
|
return Boolean.FALSE;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
@ -587,11 +610,11 @@ public final class CommonUtils {
|
||||||
final char ch0 = str.charAt(0);
|
final char ch0 = str.charAt(0);
|
||||||
final char ch1 = str.charAt(1);
|
final char ch1 = str.charAt(1);
|
||||||
if ((ch0 == 'o' || ch0 == 'O') &&
|
if ((ch0 == 'o' || ch0 == 'O') &&
|
||||||
(ch1 == 'n' || ch1 == 'N') ) {
|
(ch1 == 'n' || ch1 == 'N')) {
|
||||||
return Boolean.TRUE;
|
return Boolean.TRUE;
|
||||||
}
|
}
|
||||||
if ((ch0 == 'n' || ch0 == 'N') &&
|
if ((ch0 == 'n' || ch0 == 'N') &&
|
||||||
(ch1 == 'o' || ch1 == 'O') ) {
|
(ch1 == 'o' || ch1 == 'O')) {
|
||||||
return Boolean.FALSE;
|
return Boolean.FALSE;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
@ -601,13 +624,13 @@ public final class CommonUtils {
|
||||||
final char ch1 = str.charAt(1);
|
final char ch1 = str.charAt(1);
|
||||||
final char ch2 = str.charAt(2);
|
final char ch2 = str.charAt(2);
|
||||||
if ((ch0 == 'y' || ch0 == 'Y') &&
|
if ((ch0 == 'y' || ch0 == 'Y') &&
|
||||||
(ch1 == 'e' || ch1 == 'E') &&
|
(ch1 == 'e' || ch1 == 'E') &&
|
||||||
(ch2 == 's' || ch2 == 'S') ) {
|
(ch2 == 's' || ch2 == 'S')) {
|
||||||
return Boolean.TRUE;
|
return Boolean.TRUE;
|
||||||
}
|
}
|
||||||
if ((ch0 == 'o' || ch0 == 'O') &&
|
if ((ch0 == 'o' || ch0 == 'O') &&
|
||||||
(ch1 == 'f' || ch1 == 'F') &&
|
(ch1 == 'f' || ch1 == 'F') &&
|
||||||
(ch2 == 'f' || ch2 == 'F') ) {
|
(ch2 == 'f' || ch2 == 'F')) {
|
||||||
return Boolean.FALSE;
|
return Boolean.FALSE;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
@ -618,9 +641,9 @@ public final class CommonUtils {
|
||||||
final char ch2 = str.charAt(2);
|
final char ch2 = str.charAt(2);
|
||||||
final char ch3 = str.charAt(3);
|
final char ch3 = str.charAt(3);
|
||||||
if ((ch0 == 't' || ch0 == 'T') &&
|
if ((ch0 == 't' || ch0 == 'T') &&
|
||||||
(ch1 == 'r' || ch1 == 'R') &&
|
(ch1 == 'r' || ch1 == 'R') &&
|
||||||
(ch2 == 'u' || ch2 == 'U') &&
|
(ch2 == 'u' || ch2 == 'U') &&
|
||||||
(ch3 == 'e' || ch3 == 'E') ) {
|
(ch3 == 'e' || ch3 == 'E')) {
|
||||||
return Boolean.TRUE;
|
return Boolean.TRUE;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
@ -632,10 +655,10 @@ public final class CommonUtils {
|
||||||
final char ch3 = str.charAt(3);
|
final char ch3 = str.charAt(3);
|
||||||
final char ch4 = str.charAt(4);
|
final char ch4 = str.charAt(4);
|
||||||
if ((ch0 == 'f' || ch0 == 'F') &&
|
if ((ch0 == 'f' || ch0 == 'F') &&
|
||||||
(ch1 == 'a' || ch1 == 'A') &&
|
(ch1 == 'a' || ch1 == 'A') &&
|
||||||
(ch2 == 'l' || ch2 == 'L') &&
|
(ch2 == 'l' || ch2 == 'L') &&
|
||||||
(ch3 == 's' || ch3 == 'S') &&
|
(ch3 == 's' || ch3 == 'S') &&
|
||||||
(ch4 == 'e' || ch4 == 'E') ) {
|
(ch4 == 'e' || ch4 == 'E')) {
|
||||||
return Boolean.FALSE;
|
return Boolean.FALSE;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
@ -691,7 +714,7 @@ public final class CommonUtils {
|
||||||
* @return the int represented by the string, or the default if conversion fails
|
* @return the int represented by the string, or the default if conversion fails
|
||||||
*/
|
*/
|
||||||
public static int toInt(final String str, final int defaultValue) {
|
public static int toInt(final String str, final int defaultValue) {
|
||||||
if(str == null) {
|
if (str == null) {
|
||||||
return defaultValue;
|
return defaultValue;
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue