package com.jbidwatcher.ui.config;
/*
* Copyright (c) 2000-2007, CyberFOX Software, Inc. All Rights Reserved.
*
* Developed by mrs (Morgan Schweers)
*/
import com.jbidwatcher.ui.util.JPasteListener;
import com.jbidwatcher.util.config.JConfig;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
public class JConfigFirewallTab extends JConfigTab {
private JRadioButton noFirewall;
private JRadioButton socksFirewall;
private JRadioButton webProxy;
private JCheckBox proxyHttps;
String holdProxyHost=null, holdProxyPort=null;
String holdHTTPSProxyHost=null, holdHTTPSProxyPort=null;
String holdProxyUser=null, holdProxyPass=null;
String holdFireHost=null, holdFirePort=null;
private JTextField proxyHost, proxyPort;
private JTextField httpsProxyHost, httpsProxyPort;
private JTextField proxyUser;
private JPasswordField proxyPass;
private JTextField firewallHost, firewallPort;
private DocumentListener firewallTextFieldListener;
private class radioAction implements ActionListener {
public void actionPerformed(ActionEvent ae) {
boolean proxyP=false, firewallP=false;
if(noFirewall.isSelected()) {
firewallP = false;
proxyP = false;
} else if(socksFirewall.isSelected()) {
firewallP = true;
proxyP = false;
} else if(webProxy.isSelected()) {
firewallP = false;
proxyP = true;
}
updateProxyFirewall(proxyP, firewallP, proxyHttps.isSelected());
}
}
private class textAction implements DocumentListener {
private void anyEvent() {
if(proxyHost.isEnabled()) {
holdProxyHost = proxyHost.getText();
}
if(proxyPort.isEnabled()) {
holdProxyPort = proxyPort.getText();
}
if(proxyUser.isEnabled()) {
holdProxyUser = proxyUser.getText();
}
if(proxyPass.isEnabled()) {
holdProxyPass = new String(proxyPass.getPassword());
}
if(firewallHost.isEnabled()) {
holdFireHost = firewallHost.getText();
}
if(firewallPort.isEnabled()) {
holdFirePort = firewallPort.getText();
}
if(httpsProxyHost.isEnabled()) {
holdHTTPSProxyHost = httpsProxyHost.getText();
}
if(httpsProxyPort.isEnabled()) {
holdHTTPSProxyPort = httpsProxyPort.getText();
}
}
public void insertUpdate(DocumentEvent de) {
anyEvent();
}
public void changedUpdate(DocumentEvent de) {
anyEvent();
}
public void removeUpdate(DocumentEvent de) {
anyEvent();
}
}
public JConfigFirewallTab(JPasteListener pasteListener) {
super();
this.pasteListener = pasteListener;
JPanel topPanes = new JPanel();
JPanel bottomPanes = new JPanel();
firewallTextFieldListener = new textAction();
this.setLayout(new BorderLayout());
topPanes.setLayout(new GridLayout(1,2));
topPanes.add(panelPack(buildRadioButtons()));
topPanes.add(panelPack(buildFirewallPrompt()));
this.add(topPanes, "North");
bottomPanes.setLayout(new GridLayout(1, 2));
bottomPanes.add(panelPack(buildProxyPanel()));
bottomPanes.add(panelPack(buildHTTPSProxyPanel()));
//this.add(panelPack(buildProxyPanel()), "Center");
this.add(bottomPanes, "Center");
updateValues();
}
// This is how the main configuration menu knows what to name this
// tab.
public String getTabName() { return "Firewall"; }
//
// Cancel all modifications.
// Reverts to stored configuration values.
//
public void cancel() {
holdProxyHost = holdProxyPort = holdProxyUser = holdProxyPass =
holdFireHost = holdFirePort = holdHTTPSProxyHost = holdHTTPSProxyPort = null;
updateValues();
}
private void storeConfig(String value, String key) {
if(value != null) {
JConfig.setConfiguration(key, value);
}
}
//
// Apply all changes made to the firewall options. This does NOT
// immediately open a SOCKS server, or a web proxy for all future
// transactions. It should. HACKHACK -- mrs: 14-August-2001 01:44
//
public void apply() {
String firewallState = "none";
if(noFirewall.isSelected()) {
firewallState = "none";
} else if(socksFirewall.isSelected()) {
firewallState = "firewall";
} else if(webProxy.isSelected()) {
firewallState = "proxy";
}
JConfig.setConfiguration("proxyfirewall", firewallState);
storeConfig(holdProxyHost, "proxy.host");
storeConfig(holdProxyPort, "proxy.port");
storeConfig(holdProxyUser, "proxy.user");
storeConfig(holdProxyPass, "proxy.pass");
storeConfig(holdFireHost, "firewall.host");
storeConfig(holdFirePort, "firewall.port");
if(proxyHttps.isSelected()) {
JConfig.setConfiguration("proxy.https.set", "true");
storeConfig(holdHTTPSProxyHost, "proxy.https.host");
storeConfig(holdHTTPSProxyPort, "proxy.https.port");
} else {
JConfig.setConfiguration("proxy.https.set", "false");
}
}
private void setAllProxyText() {
proxyHost.setText(getConfigValue(webProxy, "proxy.host", holdProxyHost));
proxyPort.setText(getConfigValue(webProxy, "proxy.port", holdProxyPort));
proxyUser.setText(getConfigValue(webProxy, "proxy.user", holdProxyUser));
proxyPass.setText(getConfigValue(webProxy, "proxy.pass", holdProxyPass));
}
private void setAllProxyStatus(boolean proxyP) {
proxyHost.setEnabled(proxyP);
proxyPort.setEnabled(proxyP);
proxyUser.setEnabled(proxyP);
proxyPass.setEnabled(proxyP);
}
private void setAllFirewallText() {
firewallHost.setText(getConfigValue(socksFirewall, "firewall.host", holdFireHost));
firewallPort.setText(getConfigValue(socksFirewall, "firewall.port", holdFirePort));
}
private void setAllFirewallStatus(boolean firewallP) {
firewallHost.setEnabled(firewallP);
firewallPort.setEnabled(firewallP);
}
private void setAllHTTPSText() {
httpsProxyHost.setText(getConfigValue(proxyHttps, "proxy.https.host", holdHTTPSProxyHost));
httpsProxyPort.setText(getConfigValue(proxyHttps, "proxy.https.port", holdHTTPSProxyPort));
}
private void setAllHTTPSStatus(boolean httpsP) {
httpsProxyHost.setEnabled(httpsP);
httpsProxyPort.setEnabled(httpsP);
}
private void updateProxyFirewall(boolean proxyP, boolean firewallP, boolean httpsP) {
if(!proxyP) {
setAllProxyStatus(proxyP);
setAllProxyText();
} else {
setAllProxyText();
setAllProxyStatus(proxyP);
}
if(!firewallP) {
setAllFirewallStatus(firewallP);
setAllFirewallText();
} else {
setAllFirewallText();
setAllFirewallStatus(firewallP);
}
if(!httpsP) {
setAllHTTPSStatus(httpsP);
setAllHTTPSText();
} else {
setAllHTTPSText();
setAllHTTPSStatus(httpsP);
}
}
public final void updateValues() {
String proxyFirewall = JConfig.queryConfiguration("proxyfirewall");
boolean proxyP, firewallP;
if(proxyFirewall == null) {
noFirewall.setSelected(true);
firewallP = false;
proxyP = false;
} else if(proxyFirewall.equals("proxy")) {
webProxy.setSelected(true);
firewallP = false;
proxyP = true;
} else if(proxyFirewall.equals("firewall")) {
socksFirewall.setSelected(true);
firewallP = true;
proxyP = false;
} else {
// HACKHACK -- Should make a note that it's an invalid value.
noFirewall.setSelected(true);
firewallP = false;
proxyP = false;
}
if(JConfig.queryConfiguration("proxy.https.set", "false").equals("true")) {
proxyHttps.setSelected(true);
}
updateProxyFirewall(proxyP, firewallP, proxyHttps.isSelected());
}
private JPanel buildRadioButtons() {
ActionListener rad = new radioAction();
JPanel buttonPanel = new JPanel();
Box buttonBox = Box.createVerticalBox();
noFirewall = new JRadioButton("No firewall or proxy");
socksFirewall = new JRadioButton("SOCKS 4/5 Firewall");
webProxy = new JRadioButton("HTTP Web Proxy");
ButtonGroup allButtons = new ButtonGroup();
allButtons.add(socksFirewall);
allButtons.add(webProxy);
allButtons.add(noFirewall);
socksFirewall.addActionListener(rad);
webProxy.addActionListener(rad);
noFirewall.addActionListener(rad);
buttonPanel.setBorder(BorderFactory.createTitledBorder("Firewall/Proxy"));
buttonPanel.setLayout(new BorderLayout());
buttonBox.add(socksFirewall);
buttonBox.add(webProxy);
buttonBox.add(noFirewall);
buttonPanel.add(buttonBox, "North");
return buttonPanel;
}
private JPanel buildFirewallPrompt() {
JPanel firewallPanel = new JPanel();
Box updownBox;
firewallPanel.setBorder(BorderFactory.createTitledBorder("SOCKS Settings"));
firewallPanel.setLayout(new BoxLayout(firewallPanel, BoxLayout.Y_AXIS));
firewallHost = new JTextField();
firewallPort = new JTextField();
setAllFirewallStatus(false);
adjustField(firewallHost, "Host name or IP address of SOCKS firewall", firewallTextFieldListener);
adjustField(firewallPort, "Port number for SOCKS firewall", firewallTextFieldListener);
updownBox = Box.createVerticalBox();
updownBox.add(makeLine(new JLabel("SOCKS Host: "), firewallHost));
updownBox.add(makeLine(new JLabel("SOCKS Port: "), firewallPort));
firewallPanel.add(updownBox);
return firewallPanel;
}
private JPanel buildProxyPanel() {
JPanel proxyPanel = new JPanel();
proxyPanel.setBorder(BorderFactory.createTitledBorder("HTTP/Web Proxy Settings"));
proxyPanel.setLayout(new BoxLayout(proxyPanel, BoxLayout.Y_AXIS));
proxyHost = new JTextField();
proxyPort = new JTextField();
proxyUser = new JTextField();
proxyPass = new JPasswordField();
setAllProxyStatus(false);
adjustField(proxyHost, "Host name or IP address of web proxy server", firewallTextFieldListener);
adjustField(proxyPort, "Port number that a web proxy server runs on", firewallTextFieldListener);
adjustField(proxyUser, "Username (if needed) for web proxy server", firewallTextFieldListener);
adjustField(proxyPass, "Password (if needed) for web proxy server", firewallTextFieldListener);
proxyPanel.add(makeLine(new JLabel("Host: "), proxyHost));
proxyPanel.add(makeLine(new JLabel("Port: "), proxyPort));
proxyPanel.add(makeLine(new JLabel("Username: "), proxyUser));
proxyPanel.add(makeLine(new JLabel("Password: "), proxyPass));
return proxyPanel;
}
private JPanel buildHTTPSProxyPanel() {
JPanel proxyPanel = new JPanel();
radioAction rad = new radioAction();
proxyPanel.setBorder(BorderFactory.createTitledBorder("HTTPS/Secure Proxy Settings"));
proxyPanel.setLayout(new BoxLayout(proxyPanel, BoxLayout.Y_AXIS));
httpsProxyHost = new JTextField();
httpsProxyPort = new JTextField();
setAllHTTPSStatus(false);
adjustField(httpsProxyHost, "Host name or IP address of HTTPS proxy server", firewallTextFieldListener);
adjustField(httpsProxyPort, "Port number that the HTTPS proxy server runs on", firewallTextFieldListener);
proxyHttps = new JCheckBox("Enable HTTPS (secure http) proxy?");
proxyHttps.addActionListener(rad);
JPanel checkboxPanel = new JPanel(new BorderLayout());
checkboxPanel.add(proxyHttps, BorderLayout.WEST);
proxyPanel.add(checkboxPanel);
proxyPanel.add(makeLine(new JLabel("HTTPS Host: "), httpsProxyHost));
proxyPanel.add(makeLine(new JLabel("HTTPS Port: "), httpsProxyPort));
return proxyPanel;
}
}