Skip to content

Commit 0939395

Browse files
committed
tech detection: Add link with sites tree button
Signed-off-by: kingthorin <kingthorin@users.noreply.github.com>
1 parent dc03f38 commit 0939395

File tree

7 files changed

+62
-21
lines changed

7 files changed

+62
-21
lines changed

addOns/wappalyzer/CHANGELOG.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@ All notable changes to this add-on will be documented in this file.
44
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
55

66
## Unreleased
7-
7+
### Changed
8+
- The Tech Detection panel toolbar now includes a toggle button to link it's displayed content to the Sites Tree selection.
89

910
## [21.48.0] - 2025-09-02
1011
### Changed

addOns/wappalyzer/src/main/java/org/zaproxy/zap/extension/wappalyzer/ExtensionWappalyzer.java

Lines changed: 3 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -56,14 +56,9 @@
5656
import org.zaproxy.zap.extension.search.ExtensionSearch;
5757
import org.zaproxy.zap.utils.ThreadUtils;
5858
import org.zaproxy.zap.view.ScanPanel;
59-
import org.zaproxy.zap.view.SiteMapListener;
60-
import org.zaproxy.zap.view.SiteMapTreeCellRenderer;
6159

6260
public class ExtensionWappalyzer extends ExtensionAdaptor
63-
implements SessionChangedListener,
64-
SiteMapListener,
65-
ApplicationHolder,
66-
ExampleAlertProvider {
61+
implements SessionChangedListener, ApplicationHolder, ExampleAlertProvider {
6762

6863
public static final String NAME = "ExtensionWappalyzer";
6964

@@ -175,14 +170,15 @@ public void hook(ExtensionHook extensionHook) {
175170
super.hook(extensionHook);
176171

177172
extensionHook.addSessionListener(this);
178-
extensionHook.addSiteMapListener(this);
179173

180174
if (hasView()) {
181175
@SuppressWarnings("unused")
182176
ExtensionHookView pv = extensionHook.getHookView();
183177
extensionHook.getHookView().addStatusPanel(getTechPanel());
184178
extensionHook.getHookMenu().addPopupMenuItem(this.getPopupMenuEvidence());
185179
extensionHook.getHookView().addOptionPanel(new TechOptionsPanel());
180+
181+
extensionHook.addSiteMapListener(getTechPanel());
186182
}
187183

188184
extensionHook.addApiImplementor(new TechApi(this));
@@ -365,16 +361,6 @@ public void search(Pattern p, ExtensionSearch.Type type) {
365361
}
366362
}
367363

368-
@Override
369-
public void nodeSelected(SiteNode node) {
370-
// Event from SiteMapListenner
371-
this.getTechPanel().siteSelected(normalizeSite(node.getHistoryReference().getURI()));
372-
}
373-
374-
@Override
375-
public void onReturnNodeRendererComponent(
376-
SiteMapTreeCellRenderer arg0, boolean arg1, SiteNode arg2) {}
377-
378364
@Override
379365
public void sessionAboutToChange(Session arg0) {
380366
// Ignore

addOns/wappalyzer/src/main/java/org/zaproxy/zap/extension/wappalyzer/TechPanel.java

Lines changed: 49 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
import javax.swing.JLabel;
4040
import javax.swing.JPanel;
4141
import javax.swing.JScrollPane;
42+
import javax.swing.JToggleButton;
4243
import javax.swing.JToolBar;
4344
import javax.swing.SwingConstants;
4445
import javax.swing.SwingUtilities;
@@ -50,14 +51,17 @@
5051
import org.parosproxy.paros.Constant;
5152
import org.parosproxy.paros.control.Control;
5253
import org.parosproxy.paros.extension.AbstractPanel;
54+
import org.parosproxy.paros.model.SiteNode;
5355
import org.parosproxy.paros.view.View;
5456
import org.zaproxy.zap.utils.DisplayUtils;
5557
import org.zaproxy.zap.utils.SortedComboBoxModel;
5658
import org.zaproxy.zap.utils.TableExportButton;
59+
import org.zaproxy.zap.view.SiteMapListener;
60+
import org.zaproxy.zap.view.SiteMapTreeCellRenderer;
5761
import org.zaproxy.zap.view.ZapToggleButton;
5862

5963
@SuppressWarnings("serial")
60-
public class TechPanel extends AbstractPanel {
64+
public class TechPanel extends AbstractPanel implements SiteMapListener {
6165

6266
private static final long serialVersionUID = 1L;
6367

@@ -76,9 +80,12 @@ public class TechPanel extends AbstractPanel {
7680
private TechTableModel techModel = new TechTableModel();
7781

7882
private TableExportButton<JXTable> exportButton = null;
83+
private ZapToggleButton linkWithSitesTreeButton = null;
7984
private ZapToggleButton enableButton = null;
8085
private JButton optionsButton;
8186

87+
private boolean linkWithSitesTreeSelection;
88+
8289
private static final Icon TRANSPARENT_ICON =
8390
new Icon() {
8491

@@ -167,6 +174,7 @@ private JToolBar getPanelToolbar() {
167174
panelToolbar.add(
168175
new JLabel(Constant.messages.getString("wappalyzer.toolbar.site.label")));
169176
panelToolbar.add(getSiteSelect());
177+
panelToolbar.add(getLinkWithSitesTreeButton());
170178
panelToolbar.add(getExportButton());
171179
panelToolbar.add(getEnableToggleButton());
172180

@@ -386,4 +394,44 @@ private JButton getOptionsButton() {
386394
}
387395
return optionsButton;
388396
}
397+
398+
private JToggleButton getLinkWithSitesTreeButton() {
399+
if (linkWithSitesTreeButton == null) {
400+
linkWithSitesTreeButton = new ZapToggleButton();
401+
linkWithSitesTreeButton.setIcon(
402+
new ImageIcon(
403+
TechPanel.class.getResource(
404+
ExtensionWappalyzer.RESOURCE + "/earth-grey.png")));
405+
linkWithSitesTreeButton.setToolTipText(
406+
Constant.messages.getString(
407+
"wappalyzer.toolbar.toggle.site.link.disabled.tooltip"));
408+
linkWithSitesTreeButton.setSelectedIcon(
409+
new ImageIcon(
410+
TechPanel.class.getResource(
411+
ExtensionWappalyzer.RESOURCE + "/earth-colour.png")));
412+
linkWithSitesTreeButton.setSelectedToolTipText(
413+
Constant.messages.getString(
414+
"wappalyzer.toolbar.toggle.site.link.enabled.tooltip"));
415+
DisplayUtils.scaleIcon(linkWithSitesTreeButton);
416+
417+
linkWithSitesTreeButton.addActionListener(
418+
e -> linkWithSitesTreeSelection = linkWithSitesTreeButton.isSelected());
419+
linkWithSitesTreeButton.setSelected(true);
420+
}
421+
return linkWithSitesTreeButton;
422+
}
423+
424+
@Override
425+
public void nodeSelected(SiteNode node) {
426+
// Event from SiteMapListenner
427+
if (linkWithSitesTreeSelection) {
428+
siteSelected(ExtensionWappalyzer.normalizeSite(node.getHistoryReference().getURI()));
429+
}
430+
}
431+
432+
@Override
433+
public void onReturnNodeRendererComponent(
434+
SiteMapTreeCellRenderer component, boolean leaf, SiteNode value) {
435+
// Nothing to do
436+
}
389437
}

addOns/wappalyzer/src/main/javahelp/org/zaproxy/zap/extension/wappalyzer/resources/help/contents/wappalyzer.html

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,16 @@ <H2>The Technology Tab</H2>
2222
Selecting a regex will switch to the 'Search' tab and search through the history for that regex. Note: If multiple rows are selected
2323
the menu will not be displayed.
2424
<p>
25-
Beside the site selection drop down is an Export button which can be used to export a CSV (comma separated values) file based on the
25+
Beside the site selection drop down is a button (with a Globe icon) which controls whether or not the Technology tab's display is linked to the selection in the Sites Tree.
26+
<p>
27+
Next is an Export button which can be used to export a CSV (comma separated values) file based on the
2628
table information currently being displayed.
2729
<p>
2830
The toolbar also includes:
2931
<ul>
3032
<li>An enable/disable toggle button which controls whether the technology detection passive scan rule is functioning or not. This enabled state is persisted between ZAP sessions.</li>
31-
<ul>
33+
<li>A button (with a gear icon) which will open the add-on's Options panel when clicked.</li>
34+
</ul>
3235

3336
<H2>Reporting</H2>
3437

addOns/wappalyzer/src/main/resources/org/zaproxy/zap/extension/wappalyzer/resources/Messages.properties

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,9 @@ wappalyzer.toolbar.options.name = Options
8484
wappalyzer.toolbar.site.label = Site:
8585
wappalyzer.toolbar.site.select = -- Select Site --
8686

87+
wappalyzer.toolbar.toggle.site.link.disabled.tooltip = Click to Link with Sites Tree Selection
88+
wappalyzer.toolbar.toggle.site.link.enabled.tooltip = Click to Disable Linking with Sites Tree Selection
89+
8790
wappalyzer.toolbar.toggle.state.disabled = Disabled
8891
wappalyzer.toolbar.toggle.state.disabled.tooltip = Click to Enable Technology Detection
8992
wappalyzer.toolbar.toggle.state.enabled = Enabled
748 Bytes
Loading
792 Bytes
Loading

0 commit comments

Comments
 (0)