/*
* Zed Attack Proxy (ZAP) and its related class files.
*
* ZAP is an HTTP/HTTPS proxy for assessing web application security.
*
* Copyright 2010 psiinon@gmail.com
*
* 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.autoupdate;
import java.awt.CardLayout;
import java.awt.GridBagLayout;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.io.File;
import javax.swing.BorderFactory;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JFileChooser;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.SortOrder;
import javax.swing.border.TitledBorder;
import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;
import org.parosproxy.paros.Constant;
import org.parosproxy.paros.model.OptionsParam;
import org.parosproxy.paros.view.AbstractParamPanel;
import org.parosproxy.paros.view.View;
import org.zaproxy.zap.utils.FontUtils;
import org.zaproxy.zap.view.AbstractMultipleOptionsBaseTablePanel;
import org.zaproxy.zap.view.LayoutHelper;
public class OptionsCheckForUpdatesPanel extends AbstractParamPanel {
private static final long serialVersionUID = 1L;
private JPanel panelMisc = null;
private JCheckBox chkCheckOnStart = null;
private JCheckBox chkDownloadNewRelease = null;
private JCheckBox chkCheckAddonUpdates = null;
private JCheckBox chkInstallAddonUpdates = null;
private JCheckBox chkInstallScannerRules = null;
private JCheckBox chkReportReleaseAddons = null;
private JCheckBox chkReportBetaAddons = null;
private JCheckBox chkReportAlphaAddons = null;
private OptionsAutoupdateDirsTableModel scriptDirModel = null;
private JComboBox<String> downloadDir = null;
public OptionsCheckForUpdatesPanel() {
super();
initialize();
}
/**
* This method initializes this
*/
private void initialize() {
this.setLayout(new CardLayout());
this.setName(Constant.messages.getString("cfu.options.title"));
this.add(getPanelMisc(), getPanelMisc().getName());
}
/**
* This method initializes panelMisc
*
* @return javax.swing.JPanel
*/
private JPanel getPanelMisc() {
if (panelMisc == null) {
panelMisc = new JPanel();
panelMisc.setLayout(new GridBagLayout());
JPanel zapPanel = new JPanel();
zapPanel.setLayout(new GridBagLayout());
zapPanel.setBorder(
BorderFactory.createTitledBorder(
null, Constant.messages.getString("cfu.options.zap.border"), TitledBorder.DEFAULT_JUSTIFICATION,
javax.swing.border.TitledBorder.DEFAULT_POSITION,
FontUtils.getFont(FontUtils.Size.standard),
java.awt.Color.black));
zapPanel.add(getChkDownloadNewRelease(), LayoutHelper.getGBC(0, 1, 1, 1.0D));
JPanel updPanel = new JPanel();
updPanel.setLayout(new GridBagLayout());
updPanel.setBorder(
BorderFactory.createTitledBorder(
null, Constant.messages.getString("cfu.options.updates.border"), TitledBorder.DEFAULT_JUSTIFICATION,
javax.swing.border.TitledBorder.DEFAULT_POSITION,
FontUtils.getFont(FontUtils.Size.standard),
java.awt.Color.black));
updPanel.add(getChkCheckAddonUpdates(), LayoutHelper.getGBC(0, 0, 1, 1.0D));
updPanel.add(getChkInstallAddonUpdates(), LayoutHelper.getGBC(0, 1, 1, 1.0D));
updPanel.add(getChkInstallScannerRules(), LayoutHelper.getGBC(0, 2, 1, 1.0D));
JPanel newPanel = new JPanel();
newPanel.setLayout(new GridBagLayout());
newPanel.setBorder(
BorderFactory.createTitledBorder(
null, Constant.messages.getString("cfu.options.new.border"), TitledBorder.DEFAULT_JUSTIFICATION,
javax.swing.border.TitledBorder.DEFAULT_POSITION,
FontUtils.getFont(FontUtils.Size.standard),
java.awt.Color.black));
newPanel.add(getChkReportReleaseAddons(), LayoutHelper.getGBC(0, 0, 1, 1.0D));
newPanel.add(getChkReportBetaAddons(), LayoutHelper.getGBC(0, 1, 1, 1.0D));
newPanel.add(getChkReportAlphaAddons(), LayoutHelper.getGBC(0, 2, 1, 1.0D));
JPanel dirsPanel = new JPanel();
dirsPanel.setLayout(new GridBagLayout());
dirsPanel.setBorder(
BorderFactory.createTitledBorder(
null, Constant.messages.getString("cfu.options.dir.border"), TitledBorder.DEFAULT_JUSTIFICATION,
javax.swing.border.TitledBorder.DEFAULT_POSITION,
FontUtils.getFont(FontUtils.Size.standard),
java.awt.Color.black));
dirsPanel.add(new CfuDirsOptionsPanel(getScriptDirModel()), LayoutHelper.getGBC(0, 0, 2, 1.0D, 1.0D));
JLabel downloadDirLabel = new JLabel(Constant.messages.getString("cfu.options.downloaddir.label"));
downloadDirLabel.setLabelFor(getDownloadDirCombo());
dirsPanel.add(downloadDirLabel, LayoutHelper.getGBC(0, 1, 1, 0.5D));
dirsPanel.add(getDownloadDirCombo(), LayoutHelper.getGBC(1, 1, 1, 0.5D));
panelMisc.add(getChkCheckOnStart(), LayoutHelper.getGBC(0, 0, 1, 1.0D));
panelMisc.add(zapPanel, LayoutHelper.getGBC(0, 1, 1, 1.0D));
panelMisc.add(updPanel, LayoutHelper.getGBC(0, 2, 1, 1.0D));
panelMisc.add(newPanel, LayoutHelper.getGBC(0, 3, 1, 1.0D));
panelMisc.add(dirsPanel, LayoutHelper.getGBC(0, 4, 1, 1.0D, 1.0D));
}
return panelMisc;
}
private void setCheckBoxStates() {
if (chkCheckOnStart.isSelected()) {
getChkDownloadNewRelease().setEnabled(!Constant.isKali());
getChkCheckAddonUpdates().setEnabled(true);
getChkInstallAddonUpdates().setEnabled(this.getChkCheckAddonUpdates().isSelected());
getChkInstallScannerRules().setEnabled(this.getChkCheckAddonUpdates().isSelected());
getChkReportReleaseAddons().setEnabled(true);
getChkReportBetaAddons().setEnabled(this.getChkReportReleaseAddons().isSelected());
getChkReportAlphaAddons().setEnabled(
this.getChkReportReleaseAddons().isSelected() && this.getChkReportBetaAddons().isSelected());
} else {
// Disable everything
getChkDownloadNewRelease().setEnabled(false);
getChkCheckAddonUpdates().setEnabled(false);
getChkInstallAddonUpdates().setEnabled(false);
getChkInstallScannerRules().setEnabled(false);
getChkReportReleaseAddons().setEnabled(false);
getChkReportBetaAddons().setEnabled(false);
getChkReportAlphaAddons().setEnabled(false);
}
}
/**
* This method initializes chkProcessImages
*
* @return javax.swing.JCheckBox
*/
private JCheckBox getChkCheckOnStart() {
if (chkCheckOnStart == null) {
chkCheckOnStart = new JCheckBox();
chkCheckOnStart.setText(Constant.messages.getString("cfu.options.startUp"));
chkCheckOnStart.setVerticalAlignment(javax.swing.SwingConstants.TOP);
chkCheckOnStart.setVerticalTextPosition(javax.swing.SwingConstants.TOP);
chkCheckOnStart.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
setCheckBoxStates();
}
});
}
return chkCheckOnStart;
}
private JCheckBox getChkDownloadNewRelease() {
if (chkDownloadNewRelease == null) {
chkDownloadNewRelease = new JCheckBox();
chkDownloadNewRelease.setText(Constant.messages.getString("cfu.options.downloadNewRelease"));
chkDownloadNewRelease.setVerticalAlignment(javax.swing.SwingConstants.TOP);
chkDownloadNewRelease.setVerticalTextPosition(javax.swing.SwingConstants.TOP);
if (Constant.isKali()) {
chkDownloadNewRelease.setText(Constant.messages.getString("cfu.options.downloadNewRelease.kali"));
}
}
return chkDownloadNewRelease;
}
private JCheckBox getChkCheckAddonUpdates() {
if (chkCheckAddonUpdates == null) {
chkCheckAddonUpdates = new JCheckBox();
chkCheckAddonUpdates.setText(Constant.messages.getString("cfu.options.checkAddonUpdates"));
chkCheckAddonUpdates.setVerticalAlignment(javax.swing.SwingConstants.TOP);
chkCheckAddonUpdates.setVerticalTextPosition(javax.swing.SwingConstants.TOP);
chkCheckAddonUpdates.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
setCheckBoxStates();
}
});
}
return chkCheckAddonUpdates;
}
private JCheckBox getChkInstallAddonUpdates() {
if (chkInstallAddonUpdates == null) {
chkInstallAddonUpdates = new JCheckBox();
chkInstallAddonUpdates.setText(Constant.messages.getString("cfu.options.installAddonUpdates"));
chkInstallAddonUpdates.setVerticalAlignment(javax.swing.SwingConstants.TOP);
chkInstallAddonUpdates.setVerticalTextPosition(javax.swing.SwingConstants.TOP);
}
return chkInstallAddonUpdates;
}
private JCheckBox getChkInstallScannerRules() {
if (chkInstallScannerRules == null) {
chkInstallScannerRules = new JCheckBox();
chkInstallScannerRules.setText(Constant.messages.getString("cfu.options.installScannerRules"));
chkInstallScannerRules.setVerticalAlignment(javax.swing.SwingConstants.TOP);
chkInstallScannerRules.setVerticalTextPosition(javax.swing.SwingConstants.TOP);
}
return chkInstallScannerRules;
}
private JCheckBox getChkReportReleaseAddons() {
if (chkReportReleaseAddons == null) {
chkReportReleaseAddons = new JCheckBox();
chkReportReleaseAddons.setText(Constant.messages.getString("cfu.options.reportReleaseAddons"));
chkReportReleaseAddons.setVerticalAlignment(javax.swing.SwingConstants.TOP);
chkReportReleaseAddons.setVerticalTextPosition(javax.swing.SwingConstants.TOP);
chkReportReleaseAddons.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
setCheckBoxStates();
}
});
}
return chkReportReleaseAddons;
}
private JCheckBox getChkReportBetaAddons() {
if (chkReportBetaAddons == null) {
chkReportBetaAddons = new JCheckBox();
chkReportBetaAddons.setText(Constant.messages.getString("cfu.options.reportBetaAddons"));
chkReportBetaAddons.setVerticalAlignment(javax.swing.SwingConstants.TOP);
chkReportBetaAddons.setVerticalTextPosition(javax.swing.SwingConstants.TOP);
chkReportBetaAddons.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
setCheckBoxStates();
}
});
}
return chkReportBetaAddons;
}
private JCheckBox getChkReportAlphaAddons() {
if (chkReportAlphaAddons == null) {
chkReportAlphaAddons = new JCheckBox();
chkReportAlphaAddons.setText(Constant.messages.getString("cfu.options.reportAlphaAddons"));
chkReportAlphaAddons.setVerticalAlignment(javax.swing.SwingConstants.TOP);
chkReportAlphaAddons.setVerticalTextPosition(javax.swing.SwingConstants.TOP);
}
return chkReportAlphaAddons;
}
private OptionsAutoupdateDirsTableModel getScriptDirModel() {
if (scriptDirModel == null) {
scriptDirModel = new OptionsAutoupdateDirsTableModel();
scriptDirModel.addTableModelListener(new TableModelListener(){
@Override
public void tableChanged(TableModelEvent e) {
repopulatDownloadDirs();
}});
}
return scriptDirModel;
}
private JComboBox<String> getDownloadDirCombo() {
if (downloadDir == null) {
downloadDir = new JComboBox<String>();
repopulatDownloadDirs();
}
return downloadDir;
}
private void repopulatDownloadDirs() {
// Save for later
Object selectedItem = getDownloadDirCombo().getSelectedItem();
getDownloadDirCombo().removeAllItems();
downloadDir.addItem(Constant.FOLDER_LOCAL_PLUGIN);
for (File f : this.getScriptDirModel().getElements()) {
if (f.canWrite()) {
downloadDir.addItem(f.getAbsolutePath());
}
}
// The selected item may no longer exist, but thats ok as it will correctly default to the first one
getDownloadDirCombo().setSelectedItem(selectedItem);
}
@Override
public void initParam(Object obj) {
OptionsParam options = (OptionsParam) obj;
getChkCheckOnStart().setSelected(options.getCheckForUpdatesParam().isCheckOnStart());
getChkDownloadNewRelease().setSelected(options.getCheckForUpdatesParam().isDownloadNewRelease());
getChkCheckAddonUpdates().setSelected(options.getCheckForUpdatesParam().isCheckAddonUpdates());
getChkInstallAddonUpdates().setSelected(options.getCheckForUpdatesParam().isInstallAddonUpdates());
getChkInstallScannerRules().setSelected(options.getCheckForUpdatesParam().isInstallScannerRules());
getChkReportReleaseAddons().setSelected(options.getCheckForUpdatesParam().isReportReleaseAddons());
getChkReportBetaAddons().setSelected(options.getCheckForUpdatesParam().isReportBetaAddons());
getChkReportAlphaAddons().setSelected(options.getCheckForUpdatesParam().isReportAlphaAddons());
getScriptDirModel().setFiles(options.getCheckForUpdatesParam().getAddonDirectories());
getDownloadDirCombo().setSelectedItem(options.getCheckForUpdatesParam().getDownloadDirectory().getAbsolutePath());
setCheckBoxStates();
}
@Override
public void saveParam (Object obj) throws Exception {
OptionsParam options = (OptionsParam) obj;
options.getCheckForUpdatesParam().setCheckOnStart(getChkCheckOnStart().isSelected());
options.getCheckForUpdatesParam().setDownloadNewRelease(getChkDownloadNewRelease().isSelected());
options.getCheckForUpdatesParam().setCheckAddonUpdates(getChkCheckAddonUpdates().isSelected());
options.getCheckForUpdatesParam().setInstallAddonUpdates(getChkInstallAddonUpdates().isSelected());
options.getCheckForUpdatesParam().setInstallScannerRules(getChkInstallScannerRules().isSelected());
options.getCheckForUpdatesParam().setReportReleaseAddons(getChkReportReleaseAddons().isSelected());
options.getCheckForUpdatesParam().setReportBetaAddons(getChkReportBetaAddons().isSelected());
options.getCheckForUpdatesParam().setReportAlphaAddons(getChkReportAlphaAddons().isSelected());
options.getCheckForUpdatesParam().setAddonDirectories(getScriptDirModel().getElements());
options.getCheckForUpdatesParam().setDownloadDirectory(new File(getDownloadDirCombo().getSelectedItem().toString()));
}
@Override
public String getHelpIndex() {
return "ui.dialogs.options.checkforupdates";
}
private static class CfuDirsOptionsPanel extends AbstractMultipleOptionsBaseTablePanel<File> {
private static final long serialVersionUID = 1L;
private static final String REMOVE_DIALOG_TITLE = Constant.messages.getString("cfu.options.dialog.dirs.remove.title");
private static final String REMOVE_DIALOG_TEXT = Constant.messages.getString("cfu.options.dialog.dirs.remove.text");
private static final String REMOVE_DIALOG_CONFIRM_BUTTON_LABEL = Constant.messages.getString("cfu.options.dialog.dirs.remove.button.confirm");
private static final String REMOVE_DIALOG_CANCEL_BUTTON_LABEL = Constant.messages.getString("cfu.options.dialog.dirs.remove.button.cancel");
private static final String REMOVE_DIALOG_CHECKBOX_LABEL = Constant.messages.getString("cfu.options.dialog.dirs.remove.checkbox.label");
public CfuDirsOptionsPanel(OptionsAutoupdateDirsTableModel model) {
super(model);
getTable().setSortOrder(0, SortOrder.ASCENDING);
}
@Override
public File showAddDialogue() {
return showDirSelectDialog(null);
}
@Override
public File showModifyDialogue(File dir) {
return showDirSelectDialog(dir);
}
private File showDirSelectDialog(File dir) {
JFileChooser fc = new JFileChooser();
fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
if (fc.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) {
return fc.getSelectedFile();
}
return null;
}
@Override
public boolean showRemoveDialogue(File f) {
JCheckBox removeWithoutConfirmationCheckBox = new JCheckBox(REMOVE_DIALOG_CHECKBOX_LABEL);
Object[] messages = {REMOVE_DIALOG_TEXT, " ", removeWithoutConfirmationCheckBox};
int option = JOptionPane.showOptionDialog(View.getSingleton().getMainFrame(), messages, REMOVE_DIALOG_TITLE,
JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE,
null, new String[] { REMOVE_DIALOG_CONFIRM_BUTTON_LABEL, REMOVE_DIALOG_CANCEL_BUTTON_LABEL }, null);
if (option == JOptionPane.OK_OPTION) {
setRemoveWithoutConfirmation(removeWithoutConfirmationCheckBox.isSelected());
return true;
}
return false;
}
}
}