Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance. Project price only 1 $
You can buy this project and download/modify it how often you want.
/*
* Zed Attack Proxy (ZAP) and its related class files.
*
* ZAP is an HTTP/HTTPS proxy for assessing web application security.
*
* Copyright 2015 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.autoupdate;
import java.awt.BorderLayout;
import java.awt.Component;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.SwingConstants;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.TableModel;
import org.apache.commons.collections.CollectionUtils;
import org.jdesktop.swingx.JXTable;
import org.parosproxy.paros.Constant;
import org.parosproxy.paros.extension.Extension;
import org.zaproxy.zap.control.AddOn;
import org.zaproxy.zap.control.AddOnCollection;
/**
* Helper class that checks the dependency changes when an add-on, or several add-ons, are
* installed, uninstalled or updated.
*
*
It also allows to confirm with the user the resulting changes.
*
* @since 2.4.0
*/
class AddOnDependencyChecker {
private final AddOnCollection installedAddOns;
private final AddOnCollection availableAddOns;
public AddOnDependencyChecker(
AddOnCollection installedAddOns, AddOnCollection availableAddOns) {
this.installedAddOns = installedAddOns;
this.availableAddOns = availableAddOns;
}
private static boolean contains(Collection addOns, AddOn addOn) {
for (AddOn ao : addOns) {
if (addOn.isSameAddOn(ao)) {
return true;
}
}
return false;
}
/**
* Calculates the changes required to install the given add-on.
*
*
It might require updating, installing or uninstalling other add-ons depending on the
* dependencies of the affected add-ons.
*
* @param addOn the add-on that would be installed
* @return the resulting changes with the add-ons that need to be updated, installed or
* uninstalled
*/
public AddOnChangesResult calculateInstallChanges(AddOn addOn) {
Set addOns = new HashSet<>();
addOns.add(addOn);
return calculateInstallChanges(addOns);
}
/**
* Calculates the changes required to install the given add-ons.
*
*
It might require updating, installing or uninstalling other add-ons depending on the
* dependencies of the affected add-ons.
*
* @param selectedAddOns the add-ons that would be installed
* @return the resulting changes with the add-ons that need to be updated, installed or
* uninstalled
*/
public AddOnChangesResult calculateInstallChanges(Set selectedAddOns) {
return calculateChanges(selectedAddOns, false);
}
/**
* Asks the user for confirmation of install changes.
*
* @param parent the parent component of the confirmation dialogue
* @param changes the changes of the installation
* @return {@code true} if the user accept the changes, {@code false} otherwise
*/
public boolean confirmInstallChanges(Component parent, AddOnChangesResult changes) {
return confirmChanges(parent, changes, false);
}
private boolean addDependencies(
AddOn addOn,
Set selectedAddOns,
Set oldVersions,
Set newVersions,
Set installs) {
AddOn.AddOnRunRequirements requirements =
addOn.calculateInstallRequirements(availableAddOns.getAddOns());
for (AddOn dep : requirements.getDependencies()) {
if (selectedAddOns.contains(dep)) {
continue;
}
AddOn installed = installedAddOns.getAddOn(dep.getId());
if (installed == null) {
if (AddOn.InstallationStatus.AVAILABLE
== availableAddOns.getAddOn(dep.getId()).getInstallationStatus()) {
installs.add(dep);
}
} else if (dep.isUpdateTo(installed)) {
if (AddOn.InstallationStatus.AVAILABLE
== availableAddOns.getAddOn(dep.getId()).getInstallationStatus()) {
oldVersions.add(installed);
newVersions.add(dep);
}
}
}
return requirements.isNewerJavaVersionRequired();
}
private boolean confirmChanges(
Component parent, AddOnChangesResult changesResult, boolean updating) {
Set selectedAddOnsJavaIssue = new HashSet<>();
for (AddOn addOn : changesResult.getSelectedAddOns()) {
if (!addOn.canRunInCurrentJavaVersion()) {
selectedAddOnsJavaIssue.add(addOn);
}
}
String question;
Set installs = new HashSet<>(changesResult.getInstalls());
Set updates = new HashSet<>(changesResult.getNewVersions());
Set dependents = getDependents(updates, changesResult.getUninstalls());
if (updating) {
question =
Constant.messages.getString(
"cfu.confirmation.dialogue.message.continueWithUpdate");
updates.removeAll(changesResult.getSelectedAddOns());
} else {
question =
Constant.messages.getString(
"cfu.confirmation.dialogue.message.continueWithInstallation");
installs.removeAll(changesResult.getSelectedAddOns());
}
if (changesResult.getUninstalls().isEmpty()
&& updates.isEmpty()
&& installs.isEmpty()
&& dependents.isEmpty()
&& changesResult.getOptionalAddOns().isEmpty()
&& changesResult.getSoftUnloadExtensions().isEmpty()
&& changesResult.getUnloadExtensions().isEmpty()) {
// No other changes required.
if (selectedAddOnsJavaIssue.isEmpty()) {
// No need to ask for confirmation.
return true;
}
int size = changesResult.getSelectedAddOns().size();
if (size == 1) {
String baseMessage =
Constant.messages.getString(
"cfu.confirmation.dialogue.message.selectedAddOnNewerJavaVersion",
changesResult
.getSelectedAddOns()
.iterator()
.next()
.getMinimumJavaVersion());
return JOptionPane.showConfirmDialog(
parent,
baseMessage + question,
Constant.PROGRAM_NAME,
JOptionPane.YES_NO_OPTION)
== JOptionPane.YES_OPTION;
}
String mainMessage;
if (selectedAddOnsJavaIssue.size() == size) {
mainMessage =
Constant.messages.getString(
"cfu.confirmation.dialogue.message.addOnsNewerJavaVersion");
} else {
mainMessage =
Constant.messages.getString(
"cfu.confirmation.dialogue.message.someSelectedAddOnsNewerJavaVersion");
}
JLabel label =
new JLabel(
Constant.messages.getString(
"cfu.confirmation.dialogue.message.warnAddOnsNotRunJavaVersion"),
ManageAddOnsDialog.ICON_ADD_ON_ISSUES,
SwingConstants.LEADING);
Object[] msgs = {
mainMessage,
createScrollableTable(
new AddOnTableModel(
selectedAddOnsJavaIssue, selectedAddOnsJavaIssue.size())),
label,
question
};
return JOptionPane.showConfirmDialog(
parent, msgs, Constant.PROGRAM_NAME, JOptionPane.YES_NO_OPTION)
== JOptionPane.YES_OPTION;
}
JPanel panel = new JPanel(new BorderLayout());
JTabbedPane tabs = new JTabbedPane();
panel.add(tabs);
int issues = selectedAddOnsJavaIssue.size();
if (!selectedAddOnsJavaIssue.isEmpty()) {
tabs.add(
Constant.messages.getString(
"cfu.confirmation.dialogue.tab.header.selectedAddOns"),
createScrollableTable(
new AddOnTableModel(
selectedAddOnsJavaIssue, selectedAddOnsJavaIssue.size())));
}
if (!changesResult.getUninstalls().isEmpty()) {
tabs.add(
Constant.messages.getString(
"cfu.confirmation.dialogue.tab.header.uninstallations"),
createScrollableTable(
new AddOnTableModel(changesResult.getUninstalls(), false)));
}
if (!updates.isEmpty()) {
AddOnTableModel model = new AddOnTableModel(updates);
issues += model.getMinimumJavaVersionIssues();
tabs.add(
Constant.messages.getString("cfu.confirmation.dialogue.tab.header.updates"),
createScrollableTable(model));
}
if (!installs.isEmpty()) {
AddOnTableModel model = new AddOnTableModel(installs);
issues += model.getMinimumJavaVersionIssues();
tabs.add(
Constant.messages.getString(
"cfu.confirmation.dialogue.tab.header.installations"),
createScrollableTable(model));
}
if (!dependents.isEmpty()) {
AddOnTableModel model = new AddOnTableModel(dependents);
issues += model.getMinimumJavaVersionIssues();
tabs.add(
Constant.messages.getString(
"cfu.confirmation.dialogue.tab.header.softUninstalls"),
createScrollableTable(model));
}
SelectableAddOnTableModel optionalAddOnsTableModel = null;
if (!changesResult.getOptionalAddOns().isEmpty()) {
optionalAddOnsTableModel =
new SelectableAddOnTableModel(
Constant.messages.getString("cfu.generic.table.header.selectInstall"),
changesResult.getOptionalAddOns());
issues += optionalAddOnsTableModel.getMinimumJavaVersionIssues();
tabs.add(
Constant.messages.getString(
"cfu.confirmation.dialogue.tab.header.optionalAddOns"),
createScrollableTable(optionalAddOnsTableModel));
}
if (!changesResult.getUnloadExtensions().isEmpty()) {
ExtensionsTableModel model =
new ExtensionsTableModel(changesResult.getUnloadExtensions());
tabs.add(
Constant.messages.getString(
"cfu.confirmation.dialogue.tab.header.extensionUnloads"),
createScrollableTable(model));
}
if (!changesResult.getSoftUnloadExtensions().isEmpty()) {
ExtensionsTableModel model =
new ExtensionsTableModel(changesResult.getSoftUnloadExtensions());
tabs.add(
Constant.messages.getString(
"cfu.confirmation.dialogue.tab.header.extensionSoftUnloads"),
createScrollableTable(model));
}
List