/* * Zed Attack Proxy (ZAP) and its related class files. * * ZAP is an HTTP/HTTPS proxy for assessing web application security. * * Copyright 2017 The ZAP Development Team * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.zaproxy.zap.extension.callback; import java.awt.CardLayout; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.Insets; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.List; import javax.swing.JCheckBox; import javax.swing.JComboBox; import javax.swing.JLabel; import javax.swing.JPanel; import org.parosproxy.paros.Constant; import org.parosproxy.paros.model.OptionsParam; import org.parosproxy.paros.view.AbstractParamPanel; import org.zaproxy.zap.utils.ZapPortNumberSpinner; import org.zaproxy.zap.utils.ZapTextField; import org.zaproxy.zap.view.LayoutHelper; public class OptionsCallbackPanel extends AbstractParamPanel { private static final long serialVersionUID = 1L; private JPanel panel = null; private ExtensionCallback ext; private JComboBox<String> localAddress = null; private JComboBox<String> remoteAddress = null; private ZapTextField testURL = null; private JCheckBox randomPort = null; private ZapPortNumberSpinner spinnerPort = null; public OptionsCallbackPanel(ExtensionCallback ext) { super(); this.ext = ext; this.setLayout(new CardLayout()); this.setName(Constant.messages.getString("callback.options.title")); this.add(getCallbackPanel(), getCallbackPanel().getName()); } private JPanel getCallbackPanel() { if (panel == null) { JLabel jLabel6 = new JLabel(); GridBagConstraints gridBagConstraints15 = new GridBagConstraints(); java.awt.GridBagConstraints gridBagConstraints7 = new GridBagConstraints(); java.awt.GridBagConstraints gridBagConstraints6 = new GridBagConstraints(); java.awt.GridBagConstraints gridBagConstraints5 = new GridBagConstraints(); panel = new JPanel(); panel.setLayout(new GridBagLayout()); gridBagConstraints5.gridx = 1; gridBagConstraints5.gridy = 0; gridBagConstraints5.weightx = 0.5D; gridBagConstraints5.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints5.ipadx = 50; gridBagConstraints5.ipady = 0; gridBagConstraints5.anchor = java.awt.GridBagConstraints.EAST; gridBagConstraints5.insets = new java.awt.Insets(2, 2, 2, 2); gridBagConstraints6.gridx = 0; gridBagConstraints6.gridy = 1; gridBagConstraints6.ipadx = 0; gridBagConstraints6.ipady = 0; gridBagConstraints6.anchor = java.awt.GridBagConstraints.WEST; gridBagConstraints6.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints6.insets = new java.awt.Insets(2, 2, 2, 2); gridBagConstraints6.weightx = 0.5D; gridBagConstraints7.gridx = 1; gridBagConstraints7.gridy = 1; gridBagConstraints7.weightx = 0.5D; gridBagConstraints7.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints7.ipadx = 50; gridBagConstraints7.ipady = 0; gridBagConstraints7.anchor = java.awt.GridBagConstraints.EAST; gridBagConstraints7.insets = new java.awt.Insets(2, 2, 2, 2); jLabel6.setText(Constant.messages .getString("options.proxy.local.label.browser")); gridBagConstraints15.anchor = java.awt.GridBagConstraints.NORTHWEST; gridBagConstraints15.gridx = 0; gridBagConstraints15.gridy = 4; gridBagConstraints15.insets = new java.awt.Insets(2, 2, 2, 2); gridBagConstraints15.weightx = 1.0D; gridBagConstraints15.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints15.gridwidth = 2; JLabel localAddrLabel = new JLabel( Constant.messages .getString("callback.options.label.localaddress")); localAddrLabel.setLabelFor(getLocalAddress()); panel.add(localAddrLabel, LayoutHelper.getGBC(0, 0, 1, 0.5D, new Insets(2, 2, 2, 2))); panel.add(getLocalAddress(), LayoutHelper.getGBC(1, 0, 1, 0.5D, new Insets(2, 2, 2, 2))); JLabel remoteAddrLabel = new JLabel( Constant.messages .getString("callback.options.label.remoteaddress")); remoteAddrLabel.setLabelFor(getRemoteAddress()); panel.add(remoteAddrLabel, LayoutHelper.getGBC(0, 1, 1, 0.5D, new Insets(2, 2, 2, 2))); panel.add(getRemoteAddress(), LayoutHelper.getGBC(1, 1, 1, 0.5D, new Insets(2, 2, 2, 2))); JLabel rndPortLabel = new JLabel( Constant.messages .getString("callback.options.label.rndport")); rndPortLabel.setLabelFor(getSpinnerPort()); panel.add(rndPortLabel, LayoutHelper.getGBC(0, 2, 1, 0.5D, new Insets(2, 2, 2, 2))); panel.add(this.getRandomPort(), LayoutHelper.getGBC(1, 2, 1, 0.5D, new Insets(2, 2, 2, 2))); JLabel portLabel = new JLabel( Constant.messages.getString("callback.options.label.port")); portLabel.setLabelFor(getSpinnerPort()); panel.add(portLabel, LayoutHelper.getGBC(0, 3, 1, 0.5D, new Insets(2, 2, 2, 2))); panel.add(getSpinnerPort(), LayoutHelper.getGBC(1, 3, 1, 0.5D, new Insets(2, 2, 2, 2))); JLabel testUrlLabel = new JLabel( Constant.messages .getString("callback.options.label.testurl")); testUrlLabel.setLabelFor(getTestURL()); panel.add(testUrlLabel, LayoutHelper.getGBC(0, 4, 1, 0.5D, new Insets(2, 2, 2, 2))); panel.add(getTestURL(), LayoutHelper.getGBC(1, 4, 1, 0.5D, new Insets(2, 2, 2, 2))); panel.add(new JLabel(), LayoutHelper.getGBC(0, 20, 2, 0.5D, 1.0D)); } return panel; } private JComboBox<String> getLocalAddress() { if (localAddress == null) { localAddress = new JComboBox<String>(); } return localAddress; } private JComboBox<String> getRemoteAddress() { if (remoteAddress == null) { remoteAddress = new JComboBox<String>(); remoteAddress.setEditable(true); } return remoteAddress; } private ZapTextField getTestURL() { if (testURL == null) { testURL = new ZapTextField(); testURL.setEditable(false); testURL.setFocusable(true); } return testURL; } private JCheckBox getRandomPort() { if (randomPort == null) { randomPort = new JCheckBox(); randomPort.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent ae) { getSpinnerPort().setEnabled(!randomPort.isSelected()); } }); } return randomPort; } private ZapPortNumberSpinner getSpinnerPort() { if (spinnerPort == null) { spinnerPort = new ZapPortNumberSpinner(0); } return spinnerPort; } @Override public void initParam(Object obj) { OptionsParam optionsParam = (OptionsParam) obj; CallbackParam proxyParam = optionsParam .getParamSet(CallbackParam.class); List<String> allAddrs = proxyParam.getAvailableAddresses(false); localAddress.removeAllItems(); localAddress.addItem("0.0.0.0"); for (String addr : allAddrs) { localAddress.addItem(addr); } localAddress.setSelectedItem(proxyParam.getLocalAddress()); remoteAddress.removeAllItems(); for (String addr : allAddrs) { remoteAddress.addItem(addr); } remoteAddress.setSelectedItem(proxyParam.getRemoteAddress()); if (proxyParam.getPort() == 0) { getRandomPort().setSelected(true); getSpinnerPort().setEnabled(false); getSpinnerPort().setValue(ext.getPort()); // As 0 isnt a valid port } else { getSpinnerPort().setEnabled(true); getSpinnerPort().setValue(proxyParam.getPort()); } getTestURL().setText(ext.getTestUrl()); } @Override public void validateParam(Object obj) throws Exception { } @Override public void saveParam(Object obj) throws Exception { OptionsParam optionsParam = (OptionsParam) obj; CallbackParam proxyParam = optionsParam .getParamSet(CallbackParam.class); proxyParam.setLocalAddress((String)localAddress.getSelectedItem()); proxyParam.setRemoteAddress((String)remoteAddress.getSelectedItem()); if (getRandomPort().isSelected()) { proxyParam.setPort(0); } else { proxyParam.setPort(spinnerPort.getValue()); } } @Override public String getHelpIndex() { return "ui.dialogs.options.callback"; } }