Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit 3133fb6

Browse files
committedJan 12, 2020
Context menu entries can now be executed when at least one of the selected messages is valid.
Added text into context menu entry which shows how may of the selected messages are valid (e.g. 2/5).
1 parent 7b1d82b commit 3133fb6

File tree

2 files changed

+23
-8
lines changed

2 files changed

+23
-8
lines changed
 

‎burp-send-to-extension/src/main/java/net/bytebutcher/burpsendtoextension/gui/SendToContextMenu.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,13 @@ public CommandObjectMenuItem(Action a, CommandObject commandObject) {
4242
}
4343

4444
public void refreshStatus(List<Map<String, IPlaceholder>> placeholders) {
45-
setEnabled(commandObject.isValid(placeholders));
45+
List<Map<String, IPlaceholder>> validEntries = commandObject.getValid(placeholders);
46+
if (placeholders.size() > 1) {
47+
setText(commandObject.getName() + " (" + validEntries.size() + "/" + placeholders.size() + ")");
48+
} else {
49+
setText(commandObject.getName());
50+
}
51+
setEnabled(validEntries.size() > 0);
4652
}
4753
}
4854

‎burp-send-to-extension/src/main/java/net/bytebutcher/burpsendtoextension/models/CommandObject.java

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package net.bytebutcher.burpsendtoextension.models;
22

3+
import com.google.common.collect.Lists;
34
import com.google.common.collect.Sets;
45
import net.bytebutcher.burpsendtoextension.models.placeholder.IPlaceholder;
56
import net.bytebutcher.burpsendtoextension.utils.StringUtils;
@@ -94,13 +95,21 @@ public int hashCode() {
9495
return Objects.hash(id);
9596
}
9697

97-
public boolean isValid(List<Map<String, IPlaceholder>> placeholders) {
98+
public List<Map<String, IPlaceholder>> getValid(List<Map<String, IPlaceholder>> placeholders) {
99+
List<Map<String, IPlaceholder>> validItems = Lists.newArrayList();
98100
for (Map<String, IPlaceholder> placeholderMap : placeholders) {
99-
for (String placeholder : getInternalPlaceHolders()) {
100-
if (placeholderMap.containsKey(placeholder)) {
101-
if (!placeholderMap.get(placeholder).isValid()) {
102-
return false;
103-
}
101+
if (isValid(placeholderMap)) {
102+
validItems.add(placeholderMap);
103+
}
104+
}
105+
return validItems;
106+
}
107+
108+
private boolean isValid(Map<String, IPlaceholder> placeholderMap) {
109+
for (String placeholder : getInternalPlaceHolders()) {
110+
if (placeholderMap.containsKey(placeholder)) {
111+
if (!placeholderMap.get(placeholder).isValid()) {
112+
return false;
104113
}
105114
}
106115
}
@@ -115,7 +124,7 @@ public String getFormattedCommand(List<Map<String, IPlaceholder>> placeholderMap
115124
try {
116125
String originalCommand = getCommand();
117126
for (String internalPlaceHolder : getInternalPlaceHolders()) {
118-
String value = placeholderMap.stream().map(m -> m.get(internalPlaceHolder)).map(iPlaceholder -> iPlaceholder.getValue(internalPlaceHolder)).collect(Collectors.joining(","));
127+
String value = getValid(placeholderMap).stream().map(m -> m.get(internalPlaceHolder)).map(iPlaceholder -> iPlaceholder.getValue(internalPlaceHolder)).collect(Collectors.joining(","));
119128
boolean doesRequireShellEscape = placeholderMap.get(0).get(internalPlaceHolder).doesRequireShellEscape();
120129
originalCommand = originalCommand.replace(internalPlaceHolder, doesRequireShellEscape ? "'" + StringUtils.shellEscape(value) + "'" : value);
121130
}

0 commit comments

Comments
 (0)
Please sign in to comment.