/*
* PACFileIntranetInfo.java
*
* Created on May 16, 2003, 1:57 PM
*/
package com.sun.portal.util;
import java.util.StringTokenizer;
import java.util.logging.Level;
import java.util.logging.Logger;
import com.sun.portal.log.common.PortalLogger;
import com.sun.portal.rproxy.server.GatewayContext;
import com.sun.portal.rproxy.server.GatewayContextFactory;
/**
*
* @author mm132998
* @version
*/
public class PACFileIntranetInfo implements IntranetInfo {
private static final char PIPE = '|';
private static final char SPACE = ' ';
private static final char DOT = '.';
private static final String STAR_DOT_STRING = "*.";
private static final String STAR_STRING = "*";
// static Logger logger = Logger.getLogger("com.sun.portal.sra.rproxy");
private static Logger logger = PortalLogger.getLogger(PACFileIntranetInfo.class);
private String defaultDomain;
private String defaultSubDomainAndDomain;
private void initDefaultDomainSubDomain() {
GatewayContext gatewayContext = GatewayContextFactory.getGatewayContext();
String defaultDomainSubDomain = gatewayContext.getDefaultDomainAndSubDomain(); // GatewayProfile.getString(DEFAULT_DOMAIN_AND_SUBDOMAINS,"").toLowerCase();
String[] splitEntry = StringHelper.split(defaultDomainSubDomain, PIPE);
if (splitEntry.length == 0) {
defaultDomain = "";
defaultSubDomainAndDomain = "";
// logger.severe("The default sub-domain / domain not specified in
// gateway profile!");
logger.severe("PSSR_CSPU085");
} else if (splitEntry.length == 1) {
defaultDomain = DOT + splitEntry[0];
defaultSubDomainAndDomain = defaultDomain;
} else {
defaultDomain = DOT + splitEntry[0];
defaultSubDomainAndDomain = DOT + splitEntry[1] + defaultDomain;
}
}
private String pacFileLocation = null;
/** Creates new PACFileIntranetInfo */
public PACFileIntranetInfo(String pacFileLocation) throws Exception {
this.pacFileLocation = pacFileLocation;
initDefaultDomainSubDomain();
EvalPAC.initPACFile(pacFileLocation);
}
public String internGetWebProxy(String protocol, String host) {
String proxy = EvalPAC.getProxy(protocol, host, "127.0.0.1");
if (proxy == null || proxy.trim().length() == 0 || proxy.trim().equalsIgnoreCase("null")) {
return null;
}
StringTokenizer st = new StringTokenizer(proxy);
String type = st.nextToken();
if (type.equalsIgnoreCase("SOCKS")) {
// logger.severe("Gateway does not support SOCKS proxies !\n" +
// "Socks proxy \"" + proxy+ "\" returned for host : " + host);
Object[] params = { "\n", proxy, host };
logger.log(Level.SEVERE, "PSSR_CSPU086", params);
return null;
} else if (type.equalsIgnoreCase("DIRECT")) {
return null;
}
StringTokenizer st1 = new StringTokenizer(st.nextToken(), ";");
String retval = st1.nextToken();
return retval;
}
public String getWebProxy(String protocol, String host) {
String proxy = internGetWebProxy(protocol, host);
if (proxy == null && host.indexOf('.') == -1) {
proxy = internGetWebProxy(protocol, host + defaultSubDomainAndDomain);
}
return proxy;
}
public boolean internContainHost(String host) {
// It does not matter whether it is http or https to decide
// whether this is part of the intranet.
String proxy = EvalPAC.getProxy("http", host, "127.0.0.1");
if (proxy == null || proxy.trim().length() == 0 || proxy.trim().equalsIgnoreCase("null")) {
return false;
}
StringTokenizer st = new StringTokenizer(proxy);
String type = st.nextToken();
if (type.equalsIgnoreCase("STARPROXY")) {
return false;
}
return true;
}
public boolean containHost(String host) {
boolean retval = internContainHost(host);
if (!retval && host.indexOf('.') == -1) {
retval = internContainHost(host + defaultSubDomainAndDomain);
}
return retval;
}
}
|