Version: 4.0.4 Update
This commit is contained in:
@@ -20,7 +20,7 @@ public class HaE implements BurpExtension {
|
|||||||
public void initialize(MontoyaApi api) {
|
public void initialize(MontoyaApi api) {
|
||||||
// 设置扩展名称
|
// 设置扩展名称
|
||||||
api.extension().setName("HaE - Highlighter and Extractor");
|
api.extension().setName("HaE - Highlighter and Extractor");
|
||||||
String version = "4.0.3";
|
String version = "4.0.4";
|
||||||
|
|
||||||
// 加载扩展后输出的项目信息
|
// 加载扩展后输出的项目信息
|
||||||
Logging logging = api.logging();
|
Logging logging = api.logging();
|
||||||
|
|||||||
@@ -30,6 +30,7 @@ public class Datatable extends JPanel {
|
|||||||
private final JTextField secondSearchField;
|
private final JTextField secondSearchField;
|
||||||
private final TableRowSorter<DefaultTableModel> sorter;
|
private final TableRowSorter<DefaultTableModel> sorter;
|
||||||
private final JCheckBox searchMode = new JCheckBox("Reverse search");
|
private final JCheckBox searchMode = new JCheckBox("Reverse search");
|
||||||
|
private final JCheckBox regexMode = new JCheckBox("Regex mode");
|
||||||
private final String tabName;
|
private final String tabName;
|
||||||
private final JPanel footerPanel;
|
private final JPanel footerPanel;
|
||||||
|
|
||||||
@@ -52,7 +53,7 @@ public class Datatable extends JPanel {
|
|||||||
|
|
||||||
private void initComponents(List<String> dataList) {
|
private void initComponents(List<String> dataList) {
|
||||||
dataTable.setRowSorter(sorter);
|
dataTable.setRowSorter(sorter);
|
||||||
|
|
||||||
// 设置ID排序
|
// 设置ID排序
|
||||||
sorter.setComparator(0, new Comparator<Integer>() {
|
sorter.setComparator(0, new Comparator<Integer>() {
|
||||||
@Override
|
@Override
|
||||||
@@ -119,10 +120,12 @@ public class Datatable extends JPanel {
|
|||||||
optionsPanel.setLayout(new BoxLayout(optionsPanel, BoxLayout.X_AXIS));
|
optionsPanel.setLayout(new BoxLayout(optionsPanel, BoxLayout.X_AXIS));
|
||||||
|
|
||||||
// Settings按钮
|
// Settings按钮
|
||||||
JPanel settingMenuPanel = new JPanel(new GridLayout(1, 1));
|
JPanel settingMenuPanel = new JPanel(new GridLayout(2, 1));
|
||||||
settingMenuPanel.setBorder(BorderFactory.createEmptyBorder(3, 3, 3, 3));
|
settingMenuPanel.setBorder(BorderFactory.createEmptyBorder(3, 3, 3, 3));
|
||||||
JPopupMenu settingMenu = new JPopupMenu();
|
JPopupMenu settingMenu = new JPopupMenu();
|
||||||
settingMenuPanel.add(searchMode);
|
settingMenuPanel.add(searchMode);
|
||||||
|
settingMenuPanel.add(regexMode);
|
||||||
|
regexMode.setSelected(true);
|
||||||
searchMode.addItemListener(e -> performSearch());
|
searchMode.addItemListener(e -> performSearch());
|
||||||
settingMenu.add(settingMenuPanel);
|
settingMenu.add(settingMenuPanel);
|
||||||
|
|
||||||
@@ -163,8 +166,8 @@ public class Datatable extends JPanel {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void performSearch() {
|
private void performSearch() {
|
||||||
RowFilter<Object, Object> firstRowFilter = getObjectObjectRowFilter(searchField);
|
RowFilter<Object, Object> firstRowFilter = getObjectObjectRowFilter(searchField, true);
|
||||||
RowFilter<Object, Object> secondRowFilter = getObjectObjectRowFilter(secondSearchField);
|
RowFilter<Object, Object> secondRowFilter = getObjectObjectRowFilter(secondSearchField, false);
|
||||||
if (searchField.getForeground().equals(Color.BLACK)) {
|
if (searchField.getForeground().equals(Color.BLACK)) {
|
||||||
sorter.setRowFilter(firstRowFilter);
|
sorter.setRowFilter(firstRowFilter);
|
||||||
if (secondSearchField.getForeground().equals(Color.BLACK)) {
|
if (secondSearchField.getForeground().equals(Color.BLACK)) {
|
||||||
@@ -176,24 +179,29 @@ public class Datatable extends JPanel {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private RowFilter<Object, Object> getObjectObjectRowFilter(JTextField searchField) {
|
private RowFilter<Object, Object> getObjectObjectRowFilter(JTextField searchField, boolean firstFlag) {
|
||||||
return new RowFilter<Object, Object>() {
|
return new RowFilter<Object, Object>() {
|
||||||
public boolean include(Entry<?, ?> entry) {
|
public boolean include(Entry<?, ?> entry) {
|
||||||
String searchFieldTextText = searchField.getText();
|
String searchFieldTextText = searchField.getText();
|
||||||
Pattern pattern = null;
|
|
||||||
try {
|
|
||||||
pattern = Pattern.compile(searchFieldTextText, Pattern.CASE_INSENSITIVE);
|
|
||||||
} catch (Exception ignored) {
|
|
||||||
}
|
|
||||||
|
|
||||||
String entryValue = ((String) entry.getValue(1)).toLowerCase();
|
|
||||||
searchFieldTextText = searchFieldTextText.toLowerCase();
|
searchFieldTextText = searchFieldTextText.toLowerCase();
|
||||||
|
String entryValue = ((String) entry.getValue(1)).toLowerCase();
|
||||||
boolean filterReturn = searchFieldTextText.isEmpty();
|
boolean filterReturn = searchFieldTextText.isEmpty();
|
||||||
if (pattern != null) {
|
boolean firstFlagReturn = searchMode.isSelected() && firstFlag;
|
||||||
filterReturn = filterReturn || pattern.matcher(entryValue).find() != searchMode.isSelected();
|
if (regexMode.isSelected()) {
|
||||||
|
Pattern pattern = null;
|
||||||
|
try {
|
||||||
|
pattern = Pattern.compile(searchFieldTextText, Pattern.CASE_INSENSITIVE);
|
||||||
|
} catch (Exception ignored) {
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pattern != null) {
|
||||||
|
filterReturn = filterReturn || pattern.matcher(entryValue).find() != firstFlagReturn;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
filterReturn = filterReturn || entryValue.contains(searchFieldTextText) != firstFlagReturn;
|
||||||
}
|
}
|
||||||
|
|
||||||
return filterReturn || entryValue.contains(searchFieldTextText) != searchMode.isSelected();
|
return filterReturn;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -62,7 +62,7 @@ public class DataManager {
|
|||||||
RegularMatcher.putDataToGlobalMap(api, index, dataKey, dataObj.getStringList(dataKey).stream().toList(), false);
|
RegularMatcher.putDataToGlobalMap(api, index, dataKey, dataObj.getStringList(dataKey).stream().toList(), false);
|
||||||
});
|
});
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
api.logging().logToOutput("loadHaEData:" + e.getMessage());
|
// api.logging().logToOutput("loadHaEData:" + e.getMessage());
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user