|
|
@ -8,7 +8,7 @@ import java.net.MalformedURLException;
|
|
|
|
import java.net.URL;
|
|
|
|
import java.net.URL;
|
|
|
|
import java.net.URLDecoder;
|
|
|
|
import java.net.URLDecoder;
|
|
|
|
import java.util.HashMap;
|
|
|
|
import java.util.HashMap;
|
|
|
|
import java.util.StringTokenizer;
|
|
|
|
import java.util.regex.PatternSyntaxException;
|
|
|
|
import javax.servlet.Servlet;
|
|
|
|
import javax.servlet.Servlet;
|
|
|
|
import javax.servlet.ServletConfig;
|
|
|
|
import javax.servlet.ServletConfig;
|
|
|
|
import javax.servlet.ServletException;
|
|
|
|
import javax.servlet.ServletException;
|
|
|
@ -122,22 +122,18 @@ public class UrlProxyServlet extends ProxyServlet implements Servlet {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
// 2 - get target url
|
|
|
|
// 2 - get target url
|
|
|
|
URL proxyurl = null;
|
|
|
|
URL proxyurl = null;
|
|
|
|
String strARGS = request.getQueryString();
|
|
|
|
final String strUrl = request.getParameter("url");
|
|
|
|
if (strARGS == null) {
|
|
|
|
if (strUrl == null) {
|
|
|
|
response.sendError(HttpServletResponse.SC_NOT_FOUND,"url parameter missing");
|
|
|
|
response.sendError(HttpServletResponse.SC_NOT_FOUND,"url parameter missing");
|
|
|
|
return;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (strARGS.startsWith("url=")) {
|
|
|
|
try {
|
|
|
|
final String strUrl = strARGS.substring(4); // strip "url="
|
|
|
|
proxyurl = new URL(strUrl);
|
|
|
|
|
|
|
|
} catch (final MalformedURLException e) {
|
|
|
|
try {
|
|
|
|
proxyurl = new URL(URLDecoder.decode(strUrl, UTF8.charset.name()));
|
|
|
|
proxyurl = new URL(strUrl);
|
|
|
|
|
|
|
|
} catch (final MalformedURLException e) {
|
|
|
|
|
|
|
|
proxyurl = new URL(URLDecoder.decode(strUrl, UTF8.charset.name()));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (proxyurl == null) {
|
|
|
|
if (proxyurl == null) {
|
|
|
|
response.sendError(HttpServletResponse.SC_NOT_FOUND,"url parameter missing");
|
|
|
|
response.sendError(HttpServletResponse.SC_NOT_FOUND,"url parameter missing");
|
|
|
|
return;
|
|
|
|
return;
|
|
|
@ -334,16 +330,17 @@ public class UrlProxyServlet extends ProxyServlet implements Servlet {
|
|
|
|
private boolean proxyippatternmatch(final String key) {
|
|
|
|
private boolean proxyippatternmatch(final String key) {
|
|
|
|
// the cfgippattern is a comma-separated list of patterns
|
|
|
|
// the cfgippattern is a comma-separated list of patterns
|
|
|
|
// each pattern may contain one wildcard-character '*' which matches anything
|
|
|
|
// each pattern may contain one wildcard-character '*' which matches anything
|
|
|
|
final String cfgippattern = Switchboard.getSwitchboard().getConfig("proxyURL.access", "*");
|
|
|
|
final String[] cfgippattern = Switchboard.getSwitchboard().getConfigArray("proxyURL.access", "*");
|
|
|
|
if (cfgippattern.equals("*")) {
|
|
|
|
if (cfgippattern[0].equals("*")) {
|
|
|
|
return true;
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
final StringTokenizer st = new StringTokenizer(cfgippattern, ",");
|
|
|
|
for (String pattern : cfgippattern) {
|
|
|
|
String pattern;
|
|
|
|
try {
|
|
|
|
while (st.hasMoreTokens()) {
|
|
|
|
if (key.matches(pattern)) {
|
|
|
|
pattern = st.nextToken();
|
|
|
|
return true;
|
|
|
|
if (key.matches(pattern)) {
|
|
|
|
}
|
|
|
|
return true;
|
|
|
|
} catch (PatternSyntaxException ex) {
|
|
|
|
|
|
|
|
this._log.warn("wrong ip pattern in url proxy config", ex.getMessage() );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return false;
|
|
|
|
return false;
|
|
|
|