/***********************************************************************
*
* $CVSHeader$
*
* This file is part of WebScarab, an Open Web Application Security
* Project utility. For details, please see http://www.owasp.org/
*
* Copyright (c) 2002 - 2004 Rogan Dawes
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*
* Getting Source
* ==============
*
* Source for this application is maintained at Sourceforge.net, a
* repository for free software projects.
*
* For details, please see http://www.sourceforge.net/projects/owasp
*
*/
/*
* ProxyConfig.java
*
* Created on August 28, 2003, 9:30 PM
*/
package org.owasp.webscarab.ui.swing;
import org.owasp.webscarab.plugin.Framework;
import org.owasp.webscarab.httpclient.HTTPClientFactory;
import org.owasp.webscarab.model.Preferences;
import org.owasp.webscarab.util.W32WinInet;
import javax.swing.JOptionPane;
/**
*
* @author rdawes
*/
public class ProxyConfig extends javax.swing.JDialog {
/**
*
*/
private static final long serialVersionUID = 1655655396211378140L;
private HTTPClientFactory _factory = HTTPClientFactory.getInstance();
private Framework _framework;
/** Creates new form ProxyConfig */
public ProxyConfig(java.awt.Frame parent, Framework framework) {
super(parent, true);
_framework = framework;
initComponents();
httpProxyServerTextField.setText(_factory.getHttpProxy());
httpProxyPortTextField.setText(Integer.toString(_factory.getHttpProxyPort()));
httpsProxyServerTextField.setText(_factory.getHttpsProxy());
httpsProxyPortTextField.setText(Integer.toString(_factory.getHttpsProxyPort()));
String[] noproxies = _factory.getNoProxy();
if (noproxies.length>0) {
StringBuffer buff = new StringBuffer();
buff.append(noproxies[0]);
for (int i=1; i<noproxies.length;i++) {
buff.append(", ").append(noproxies[i]);
}
noProxyTextArea.setText(buff.toString());
} else {
noProxyTextArea.setText("");
}
if (!W32WinInet.isAvailable()) {
w32Button.getParent().remove(w32Button);
}
}
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
private void initComponents() {//GEN-BEGIN:initComponents
java.awt.GridBagConstraints gridBagConstraints;
jLabel2 = new javax.swing.JLabel();
httpProxyServerTextField = new javax.swing.JTextField();
jLabel5 = new javax.swing.JLabel();
httpProxyPortTextField = new javax.swing.JTextField();
jLabel4 = new javax.swing.JLabel();
httpsProxyServerTextField = new javax.swing.JTextField();
jLabel3 = new javax.swing.JLabel();
httpsProxyPortTextField = new javax.swing.JTextField();
jLabel1 = new javax.swing.JLabel();
jScrollPane1 = new javax.swing.JScrollPane();
noProxyTextArea = new javax.swing.JTextArea();
jPanel1 = new javax.swing.JPanel();
w32Button = new javax.swing.JButton();
applyButton = new javax.swing.JButton();
cancelButton = new javax.swing.JButton();
getContentPane().setLayout(new java.awt.GridBagLayout());
setTitle("Config proxies");
addWindowListener(new java.awt.event.WindowAdapter() {
public void windowClosing(java.awt.event.WindowEvent evt) {
closeDialog(evt);
}
});
jLabel2.setText("HTTP Proxy : ");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 0;
gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
gridBagConstraints.insets = new java.awt.Insets(0, 4, 0, 4);
getContentPane().add(jLabel2, gridBagConstraints);
httpProxyServerTextField.setMinimumSize(new java.awt.Dimension(250, 20));
httpProxyServerTextField.setPreferredSize(new java.awt.Dimension(250, 20));
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 0;
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints.weightx = 1.0;
getContentPane().add(httpProxyServerTextField, gridBagConstraints);
jLabel5.setText("Port :");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 2;
gridBagConstraints.gridy = 0;
gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
gridBagConstraints.insets = new java.awt.Insets(0, 4, 0, 4);
getContentPane().add(jLabel5, gridBagConstraints);
httpProxyPortTextField.setMinimumSize(new java.awt.Dimension(60, 20));
httpProxyPortTextField.setPreferredSize(new java.awt.Dimension(60, 20));
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 3;
gridBagConstraints.gridy = 0;
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
getContentPane().add(httpProxyPortTextField, gridBagConstraints);
jLabel4.setText("HTTPS Proxy : ");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 1;
gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
gridBagConstraints.insets = new java.awt.Insets(0, 4, 0, 4);
getContentPane().add(jLabel4, gridBagConstraints);
httpsProxyServerTextField.setMinimumSize(new java.awt.Dimension(250, 20));
httpsProxyServerTextField.setPreferredSize(new java.awt.Dimension(250, 20));
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 1;
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints.weightx = 1.0;
getContentPane().add(httpsProxyServerTextField, gridBagConstraints);
jLabel3.setText("Port :");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 2;
gridBagConstraints.gridy = 1;
gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
gridBagConstraints.insets = new java.awt.Insets(0, 4, 0, 4);
getContentPane().add(jLabel3, gridBagConstraints);
httpsProxyPortTextField.setMinimumSize(new java.awt.Dimension(60, 20));
httpsProxyPortTextField.setPreferredSize(new java.awt.Dimension(60, 20));
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 3;
gridBagConstraints.gridy = 1;
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
getContentPane().add(httpsProxyPortTextField, gridBagConstraints);
jLabel1.setText("No Proxy : ");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 2;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHEAST;
gridBagConstraints.insets = new java.awt.Insets(0, 4, 0, 4);
getContentPane().add(jLabel1, gridBagConstraints);
jScrollPane1.setHorizontalScrollBarPolicy(javax.swing.JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
jScrollPane1.setMinimumSize(new java.awt.Dimension(250, 48));
jScrollPane1.setPreferredSize(new java.awt.Dimension(250, 51));
noProxyTextArea.setLineWrap(true);
noProxyTextArea.setToolTipText("Enter a comma separated list of hosts that do not need to go through the proxy");
noProxyTextArea.setMinimumSize(new java.awt.Dimension(250, 40));
noProxyTextArea.setPreferredSize(new java.awt.Dimension(250, 40));
jScrollPane1.setViewportView(noProxyTextArea);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 2;
gridBagConstraints.gridwidth = 3;
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.weighty = 1.0;
getContentPane().add(jScrollPane1, gridBagConstraints);
w32Button.setText("Get IE Settings");
w32Button.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
w32ButtonActionPerformed(evt);
}
});
jPanel1.add(w32Button);
applyButton.setText("Apply");
applyButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
applyButtonActionPerformed(evt);
}
});
jPanel1.add(applyButton);
cancelButton.setText("Cancel");
cancelButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
cancelButtonActionPerformed(evt);
}
});
jPanel1.add(cancelButton);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 3;
gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER;
getContentPane().add(jPanel1, gridBagConstraints);
pack();
java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
java.awt.Dimension dialogSize = getSize();
setLocation((screenSize.width-dialogSize.width)/2,(screenSize.height-dialogSize.height)/2);
}//GEN-END:initComponents
private void w32ButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_w32ButtonActionPerformed
if (W32WinInet.isAvailable()) {
String server = W32WinInet.getHttpProxyServer();
httpProxyServerTextField.setText(server == null ? "" : server);
int port = W32WinInet.getHttpProxyPort();
if (port < 1) port = 3128;
httpProxyPortTextField.setText(Integer.toString(port));
server = W32WinInet.getHttpsProxyServer();
httpsProxyServerTextField.setText(server == null ? "" : server);
port = W32WinInet.getHttpsProxyPort();
if (port < 1) port = 3128;
httpsProxyPortTextField.setText(Integer.toString(port));
String bypass = W32WinInet.getNoProxy();
if (bypass == null) bypass = "";
noProxyTextArea.setText(bypass.replaceAll(";",","));
}
}//GEN-LAST:event_w32ButtonActionPerformed
private void applyButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_applyButtonActionPerformed
String error = null;
String httpserver = httpProxyServerTextField.getText().trim();
int httpport = -1;
try {
String p = httpProxyPortTextField.getText().trim();
if (httpserver.equals("") && p.equals("")) p = "3128";
httpport = Integer.parseInt(p);
if (httpport<1 || httpport>65535) error = "HTTP Proxy port must be between 0 and 65536";
} catch (NumberFormatException nfe) {
error = "Error parsing the HTTP Proxy port number";
}
if (error != null) {
JOptionPane.showMessageDialog(this, error, "Error", JOptionPane.ERROR_MESSAGE);
return;
}
String httpsserver = httpsProxyServerTextField.getText().trim();
int httpsport = -1;
try {
String p = httpsProxyPortTextField.getText().trim();
if (httpsserver.equals("") && p.equals("")) p = "3128";
httpsport = Integer.parseInt(p);
if (httpsport<1 || httpsport>65535) error = "HTTPS Proxy port must be between 0 and 65536";
} catch (NumberFormatException nfe) {
error = "Error parsing the HTTPS Proxy port number";
}
if (error != null) {
JOptionPane.showMessageDialog(this, error, "Error", JOptionPane.ERROR_MESSAGE);
return;
}
String[] noproxies = noProxyTextArea.getText().trim().split(" *, *");
boolean running = _framework.isRunning();
if (running) {
if (_framework.isBusy()) {
String[] status = _framework.getStatus();
JOptionPane.showMessageDialog(this, status, "Error - plugins are busy", JOptionPane.ERROR_MESSAGE);
return;
}
_framework.stopPlugins();
}
_factory.setHttpProxy(httpserver, httpport);
_factory.setHttpsProxy(httpsserver, httpsport);
_factory.setNoProxy(noproxies);
if (running) {
_framework.startPlugins();
}
Preferences.setPreference("WebScarab.httpProxy", httpserver+":"+httpport);
Preferences.setPreference("WebScarab.httpsProxy", httpsserver+":"+httpsport);
Preferences.setPreference("WebScarab.noProxy", noProxyTextArea.getText());
setVisible(false);
dispose();
}//GEN-LAST:event_applyButtonActionPerformed
private void cancelButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cancelButtonActionPerformed
setVisible(false);
dispose();
}//GEN-LAST:event_cancelButtonActionPerformed
/** Closes the dialog */
private void closeDialog(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_closeDialog
setVisible(false);
dispose();
}//GEN-LAST:event_closeDialog
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JButton applyButton;
private javax.swing.JButton cancelButton;
private javax.swing.JTextField httpProxyPortTextField;
private javax.swing.JTextField httpProxyServerTextField;
private javax.swing.JTextField httpsProxyPortTextField;
private javax.swing.JTextField httpsProxyServerTextField;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
private javax.swing.JLabel jLabel4;
private javax.swing.JLabel jLabel5;
private javax.swing.JPanel jPanel1;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JTextArea noProxyTextArea;
private javax.swing.JButton w32Button;
// End of variables declaration//GEN-END:variables
}