package com.grendelscan.proxy;
import java.util.HashMap;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Proxies
{
private static final Logger LOGGER = LoggerFactory.getLogger(Proxies.class);
private final HashMap<ReverseProxyConfig, ReverseProxy> reverseProxies;
private ForwardProxy forwardProxy;
public Proxies()
{
LOGGER.trace("Instantiating Proxies object");
reverseProxies = new HashMap<ReverseProxyConfig, ReverseProxy>(1);
}
public void addReverseProxy(final ReverseProxyConfig config)
{
LOGGER.trace("Adding reverse proxy");
ReverseProxy proxy;
if (config.isSsl())
{
proxy = new SSLReverseProxy(config);
}
else
{
proxy = new ReverseProxy(config);
}
reverseProxies.put(config, proxy);
}
public ForwardProxy getForwardProxy()
{
return forwardProxy;
}
public boolean isReverseProxyRunning(final ReverseProxyConfig config)
{
return reverseProxies.get(config).isRunning();
}
public boolean isRunning()
{
boolean running = false;
if (forwardProxy != null)
{
running = forwardProxy.isRunning();
}
if (!running)
{
for (ReverseProxy reverseProxy : reverseProxies.values())
{
if (reverseProxy.isRunning())
{
return true;
}
}
}
return running;
}
public void startForwardProxy()
{
LOGGER.debug("Starting forward proxy");
ProxyConfig forwardConfig = new ProxyConfig();
forwardConfig.setBindPort(Scan.getScanSettings().getProxyPort());
forwardConfig.setBindIP(Scan.getScanSettings().getProxyIPAddress());
forwardProxy = new ForwardProxy(forwardConfig);
forwardProxy.startProxy();
}
public void startProxies()
{
LOGGER.debug("Starting all proxies");
if (Scan.getScanSettings().isProxyEnabled())
{
startForwardProxy();
if (Scan.getInstance().isGUI())
{
MainWindow.getInstance().updateForwardProxyGUIStatus();
}
}
for (ReverseProxyConfig reverseConfig : Scan.getScanSettings().getReadOnlyReverseProxyConfigs())
{
addReverseProxy(reverseConfig);
startReverseProxy(reverseConfig);
}
}
public void startReverseProxy(final ReverseProxyConfig config)
{
LOGGER.debug("Starting reverse proxy for " + config.getRemoteHost() + ":" + config.getRemotePort());
reverseProxies.get(config).startProxy();
}
public void stopAndRemoveReverseProxy(final ReverseProxyConfig config)
{
stopReverseProxy(config);
LOGGER.debug("Removing reverse proxy for " + config.getRemoteHost() + ":" + config.getRemotePort());
reverseProxies.remove(config);
}
// public HashMap<ReverseProxyConfig, ReverseProxy> getReverseProxies()
// {
// return reverseProxies;
// }
public void stopForwardProxy()
{
LOGGER.debug("Stopping forward proxy");
if (forwardProxy != null)
{
forwardProxy.stopProxy();
}
}
public void stopProxies()
{
LOGGER.debug("Stopping all proxies");
if (forwardProxy != null)
{
forwardProxy.stopProxy();
}
for (ReverseProxy reverseProxy : reverseProxies.values())
{
reverseProxy.stopProxy();
}
}
// public ReverseProxy getReverseProxy(ReverseProxyConfig config)
// {
// return reverseProxies.get(config);
// }
public void stopReverseProxy(final ReverseProxyConfig config)
{
LOGGER.debug("Stopping reverse proxy for " + config.getRemoteHost() + ":" + config.getRemotePort());
reverseProxies.get(config).stopProxy();
}
}