■ ■ ■ ■ ■ ■ ■
src/main/java/com/nccgroup/loggerplusplus/grepper/GrepperPanel.java
1 1 package com.nccgroup.loggerplusplus.grepper; 2 2 3 - import burp.BurpExtender; 3 + import burp.IHttpRequestResponse; 4 + import burp.IHttpRequestResponseWithMarkers; 4 5 import com.coreyd97.BurpExtenderUtilities.Alignment; 5 6 import com.coreyd97.BurpExtenderUtilities.HistoryField; 6 7 import com.coreyd97.BurpExtenderUtilities.PanelBuilder; 7 8 import com.coreyd97.BurpExtenderUtilities.Preferences; 9 + import com.nccgroup.loggerplusplus.logview.entryviewer.RequestViewerController; 8 10 import com.nccgroup.loggerplusplus.util.Globals; 9 11 10 12 import javax.swing.*; 13 + import javax.swing.tree.TreePath; 11 14 import java.awt.*; 12 15 import java.awt.event.ActionEvent; 13 16 import java.awt.event.KeyAdapter; 14 17 import java.awt.event.KeyEvent; 18 + import java.util.Collections; 19 + import java.util.List; 15 20 import java.util.regex.Pattern; 16 21 import java.util.regex.PatternSyntaxException; 17 22 skipped 8 lines 26 31 private final JCheckBox inScopeOnly; 27 32 private final JTabbedPane resultsPane; 28 33 private final GrepResultsTable grepResultsTable; 34 + private final RequestViewerController requestViewerController; 29 35 private final UniquePatternMatchTable uniqueTable; 30 36 31 37 GrepperPanel(GrepperController controller, Preferences preferences){ skipped 32 lines 64 70 }); 65 71 66 72 this.grepResultsTable = new GrepResultsTable(controller); 73 + this.requestViewerController = new RequestViewerController(preferences, false, false); 74 + 75 + grepResultsTable.addTreeSelectionListener(treeSelectionEvent -> { 76 + TreePath selectedPath = treeSelectionEvent.getPath(); 77 + GrepResults grepResultEntry = (GrepResults) selectedPath.getPath()[1]; 78 + GrepResults.Match selectedMatch = null; 79 + if (selectedPath.getPath().length > 2) { 80 + selectedMatch = (GrepResults.Match) selectedPath.getPath()[2]; 81 + } 82 + 83 + IHttpRequestResponse requestResponse = grepResultEntry.getLogEntry().getRequestResponse(); 84 + List<GrepResults.Match> matches; 85 + 86 + if (selectedMatch != null) { 87 + matches = Collections.singletonList(selectedMatch); 88 + } else { 89 + matches = grepResultEntry.getMatches(); 90 + } 91 + 92 + IHttpRequestResponseWithMarkers markedRequestResponse = controller.addMarkers(requestResponse, matches); 93 + requestViewerController.setDisplayedEntity(markedRequestResponse); 94 + 95 + //TODO Setup message editor to support highlighting. Code is ready, waiting on API support. 96 + //https://forum.portswigger.net/thread/eeditor-custom-highlighting-991b1a7e?CategoryId=burp-extensions 97 + }); 98 + 99 + JSplitPane resultsSplitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT, new JScrollPane(grepResultsTable), requestViewerController.getRequestViewerPanel()); 67 100 this.uniqueTable = new UniquePatternMatchTable(controller); 68 101 69 102 this.resultsPane = new JTabbedPane(); 70 - this.resultsPane.addTab("Results", new JScrollPane ( grepResultsTable ) ); 103 + this.resultsPane.addTab("Results", resultsSplitPane ); 71 104 this.resultsPane.addTab("Unique Results", new JScrollPane(uniqueTable)); 72 105 73 106 JPanel wrapperPanel = PanelBuilder.build(new JComponent[][]{ skipped 79 lines