Skip to content

Commit

Permalink
Added notification when search filter is working, filtering optimization
Browse files Browse the repository at this point in the history
  • Loading branch information
hvqzao committed Nov 3, 2017
1 parent 83a25c4 commit 8b19a50
Showing 1 changed file with 37 additions and 29 deletions.
66 changes: 37 additions & 29 deletions src/hvqzao/flow/FlowExtension.java
Original file line number Diff line number Diff line change
Expand Up @@ -76,9 +76,11 @@

public class FlowExtension implements IBurpExtender, ITab, IHttpListener, IScopeChangeListener, IExtensionStateListener {

private final String version = "Flow v1.19 (2017-10-27)";
// Changes in v1.19:
// - row highlight now follows sort order
private final String version = "Flow v1.20 (2017-11-03)";
// Changes in v1.20:
// - Added notification when search filter is working
// - FIX: Pattern.compile inside loop
//
//private final String versionFull = "<html>" + version + ", <a href=\"https://github.com/hvqzao/burp-flow\">https://github.com/hvqzao/burp-flow</a>, MIT license</html>";
private static IBurpExtenderCallbacks callbacks;
private static IExtensionHelpers helpers;
Expand Down Expand Up @@ -179,6 +181,7 @@ public class FlowExtension implements IBurpExtender, ITab, IHttpListener, IScope
private PrintWriter stderr;
private FilterWorker flowFilterWorker;
private static int sortOrder;
private String flowFilterText = "";

@Override
public void registerExtenderCallbacks(final IBurpExtenderCallbacks callbacks) {
Expand Down Expand Up @@ -249,7 +252,7 @@ public void actionPerformed(ActionEvent e) {
flowFilterCaptureSourceIntruderOnlyOrig = flowFilterCaptureSourceIntruder.isSelected();
flowFilterCaptureSourceExtenderOnlyOrig = flowFilterCaptureSourceExtender.isSelected();
}
flowFilterUpdateDescription();
flowFilterUpdateDescription(true);
}
};
// layout
Expand Down Expand Up @@ -1146,7 +1149,7 @@ void flowFilterCaptureSourceOnly(JCheckBox which) {
flowFilterCaptureSourceExtender.setEnabled(true);
}

flowFilterUpdateDescription();
flowFilterUpdateDescription(true);
}

void flowFilterSourceOnly(JCheckBox which) {
Expand Down Expand Up @@ -1392,8 +1395,8 @@ private void flowFilterSetDefaults() {
flowFilterUpdate();
}

// flow filter update description
private void flowFilterUpdateDescription() {
// flow filter description update
private void flowFilterUpdateDescription(boolean show) {
StringBuilder filterDescription = new StringBuilder("Filter: ");
// filter
boolean filterAll = true;
Expand Down Expand Up @@ -1562,14 +1565,36 @@ private void flowFilterUpdateDescription() {
filterDescription.append("None");
}
}
flowFilter.setText(filterDescription.toString());
flowFilterText = filterDescription.toString();
if (show && (flowFilterWorker == null || flowFilterWorker.isDone())) {
flowFilter.setText(flowFilterText);
} else {
flowFilter.setText(flowFilterText + " (Please wait...)");
}
}

// flow filter update
private void flowFilterUpdate() {
final ArrayList<RowFilter<FlowTableModel, Number>> mergedFilter = new ArrayList<>();
// manual filter
RowFilter<FlowTableModel, Number> manualFilter;
// filter logic
final String text = flowFilterSearchField.getText();
final Pattern pattern;
if (flowFilterSearchRegex.isSelected()) {
if (flowFilterSearchCaseSensitive.isSelected()) {
pattern = Pattern.compile(text);
} else {
pattern = Pattern.compile(text, Pattern.CASE_INSENSITIVE);
}
} else {
if (flowFilterSearchCaseSensitive.isSelected()) {
pattern = Pattern.compile(Pattern.quote(text));
} else {
pattern = Pattern.compile(Pattern.quote(text), Pattern.CASE_INSENSITIVE);
}
}
// process
manualFilter = new RowFilter<FlowTableModel, Number>() {
@Override
public boolean include(javax.swing.RowFilter.Entry<? extends FlowTableModel, ? extends Number> entry) {
Expand All @@ -1591,9 +1616,6 @@ public boolean include(javax.swing.RowFilter.Entry<? extends FlowTableModel, ? e
// search
if (result && flowFilterSearchField.getText().length() != 0) {
boolean found;
boolean foundInReq;
boolean foundInResp;
String text = flowFilterSearchField.getText();
String req = new String(flowEntry.messageInfoPersisted.getRequest());
byte[] response = flowEntry.messageInfoPersisted.getResponse();
String resp;
Expand All @@ -1602,23 +1624,8 @@ public boolean include(javax.swing.RowFilter.Entry<? extends FlowTableModel, ? e
} else {
resp = "";
}
if (flowFilterSearchRegex.isSelected()) {
if (flowFilterSearchCaseSensitive.isSelected()) {
foundInReq = Pattern.compile(text).matcher(req).find();
foundInResp = Pattern.compile(text).matcher(resp).find();
} else {
foundInReq = Pattern.compile(text, Pattern.CASE_INSENSITIVE).matcher(req).find();
foundInResp = Pattern.compile(text, Pattern.CASE_INSENSITIVE).matcher(resp).find();
}
} else {
if (flowFilterSearchCaseSensitive.isSelected()) {
foundInReq = Pattern.compile(Pattern.quote(text)).matcher(req).find();
foundInResp = Pattern.compile(Pattern.quote(text)).matcher(resp).find();
} else {
foundInReq = Pattern.compile(Pattern.quote(text), Pattern.CASE_INSENSITIVE).matcher(req).find();
foundInResp = Pattern.compile(Pattern.quote(text), Pattern.CASE_INSENSITIVE).matcher(resp).find();
}
}
boolean foundInReq = pattern.matcher(req).find();
boolean foundInResp = pattern.matcher(resp).find();
if (flowFilterSearchRequest.isSelected() && flowFilterSearchResponse.isSelected()) {
found = foundInReq && foundInResp;
} else if (flowFilterSearchRequest.isSelected()) {
Expand Down Expand Up @@ -1671,7 +1678,7 @@ public boolean include(javax.swing.RowFilter.Entry<? extends FlowTableModel, ? e
// flowTableSorter.setRowFilter(RowFilter.andFilter(mergedFilter));
// }
//});
flowFilterUpdateDescription();
flowFilterUpdateDescription(false);
if (flowFilterWorker != null) {
try {
flowFilterWorker.cancel(true);
Expand All @@ -1698,6 +1705,7 @@ protected Object doInBackground() throws Exception {

@Override
protected void done() {
flowFilter.setText(flowFilterText);
flowTable.repaint();
}
}
Expand Down

0 comments on commit 8b19a50

Please sign in to comment.