1
1
package com .nccgroup .loggerplusplus ;
2
2
3
- import burp .IContextMenuFactory ;
4
- import burp .IContextMenuInvocation ;
5
- import com .nccgroup .loggerplusplus .filter .colorfilter .ColorFilter ;
6
- import com .nccgroup .loggerplusplus .filter .logfilter .LogFilter ;
7
- import com .nccgroup .loggerplusplus .filter .parser .ParseException ;
3
+ import burp .api .montoya .core .Range ;
4
+ import burp .api .montoya .http .message .HttpMessage ;
5
+ import burp .api .montoya .ui .contextmenu .ContextMenuEvent ;
6
+ import burp .api .montoya .ui .contextmenu .ContextMenuItemsProvider ;
7
+ import burp .api .montoya .ui .contextmenu .MessageEditorHttpRequestResponse ;
8
+ import com .nccgroup .loggerplusplus .filter .colorfilter .TableColorRule ;
8
9
import com .nccgroup .loggerplusplus .logentry .LogEntryField ;
9
10
import com .nccgroup .loggerplusplus .logview .logtable .LogTable ;
10
11
import com .nccgroup .loggerplusplus .util .userinterface .dialog .ColorFilterDialog ;
11
12
import org .apache .commons .text .StringEscapeUtils ;
12
13
13
14
import javax .swing .*;
15
+ import java .awt .*;
14
16
import java .awt .event .ActionEvent ;
15
17
import java .util .Arrays ;
16
18
import java .util .HashMap ;
19
21
20
22
import static com .nccgroup .loggerplusplus .util .Globals .PREF_COLOR_FILTERS ;
21
23
22
- public class LoggerContextMenuFactory implements IContextMenuFactory {
23
-
24
- private final LoggerPlusPlus loggerPlusPlus ;
24
+ public class LoggerContextMenuFactory implements ContextMenuItemsProvider {
25
25
26
- public LoggerContextMenuFactory (LoggerPlusPlus loggerPlusPlus ){
27
- this .loggerPlusPlus = loggerPlusPlus ;
26
+ public LoggerContextMenuFactory (){
28
27
}
29
-
28
+
30
29
@ Override
31
- public List <JMenuItem > createMenuItems (IContextMenuInvocation invocation ) {
32
- if (invocation == null ) return null ;
30
+ public List <Component > provideMenuItems (ContextMenuEvent event ) {
33
31
JMenuItem filterMenu = new JMenu ("Logger++" );
34
32
35
- if (invocation .getSelectedMessages ().length == 0 ||
36
- invocation .getSelectionBounds ()[0 ] == invocation .getSelectionBounds ()[1 ]) {
37
- return null ;
38
- }
33
+ //We're handling a message editor context menu
34
+ //And we have a selection
35
+ MessageEditorHttpRequestResponse requestResponse = event .messageEditorRequestResponse ().orElseThrow ();
36
+ Range selectedRange = requestResponse .selectionOffsets ().orElseThrow ();
37
+ HttpMessage target ;
39
38
40
39
final LogEntryField context ;
41
40
final byte [] selectedBytes ;
42
- switch (invocation .getInvocationContext ()){
43
- case IContextMenuInvocation .CONTEXT_MESSAGE_EDITOR_REQUEST :
44
- case IContextMenuInvocation .CONTEXT_MESSAGE_VIEWER_REQUEST : {
41
+ switch (event .invocationType ()){
42
+ case MESSAGE_EDITOR_REQUEST :
43
+ case MESSAGE_VIEWER_REQUEST : {
44
+ target = requestResponse .requestResponse ().request ();
45
45
try {
46
- byte [] msg = invocation .getSelectedMessages ()[0 ].getRequest ();
47
- if (LoggerPlusPlus .callbacks .getHelpers ().analyzeRequest (msg ).getBodyOffset () > invocation .getSelectionBounds ()[0 ]) {
46
+ if (selectedRange .startIndexInclusive () <= target .bodyOffset ()) {
48
47
context = LogEntryField .REQUEST_HEADERS ;
49
48
} else {
50
49
context = LogEntryField .REQUEST_BODY ;
51
50
}
52
- selectedBytes = Arrays .copyOfRange (invocation . getSelectedMessages ()[ 0 ]. getRequest (),
53
- invocation . getSelectionBounds ()[ 0 ], invocation . getSelectionBounds ()[ 1 ] );
51
+ selectedBytes = Arrays .copyOfRange (target . toByteArray (). getBytes (), selectedRange . startIndexInclusive (),
52
+ selectedRange . endIndexExclusive () );
54
53
}catch (NullPointerException nPException ){ return null ; }
55
54
break ;
56
55
}
57
56
58
- case IContextMenuInvocation .CONTEXT_MESSAGE_EDITOR_RESPONSE :
59
- case IContextMenuInvocation .CONTEXT_MESSAGE_VIEWER_RESPONSE : {
57
+ case MESSAGE_EDITOR_RESPONSE :
58
+ case MESSAGE_VIEWER_RESPONSE : {
59
+ target = requestResponse .requestResponse ().response ();
60
60
try {
61
- byte [] msg = invocation .getSelectedMessages ()[0 ].getResponse ();
62
- if (LoggerPlusPlus .callbacks .getHelpers ().analyzeRequest (msg ).getBodyOffset () > invocation .getSelectionBounds ()[0 ]) {
61
+ if (selectedRange .startIndexInclusive () <= target .bodyOffset ()) {
63
62
context = LogEntryField .RESPONSE_HEADERS ;
64
63
} else {
65
64
context = LogEntryField .RESPONSE_BODY ;
66
65
}
67
- selectedBytes = Arrays .copyOfRange (invocation . getSelectedMessages ()[ 0 ]. getResponse (),
68
- invocation . getSelectionBounds ()[ 0 ], invocation . getSelectionBounds ()[ 1 ] );
66
+ selectedBytes = Arrays .copyOfRange (target . toByteArray (). getBytes (), selectedRange . startIndexInclusive (),
67
+ selectedRange . endIndexExclusive () );
69
68
} catch (NullPointerException nPException ) {
70
69
return null ;
71
70
}
@@ -75,15 +74,13 @@ public List<JMenuItem> createMenuItems(IContextMenuInvocation invocation) {
75
74
return null ;
76
75
}
77
76
78
- if (selectedBytes != null ) System .out .println (new String (selectedBytes ));
79
-
80
- final LogTable logTable = loggerPlusPlus .getLogViewController ().getLogTableController ().getLogTable ();
77
+ final LogTable logTable = LoggerPlusPlus .instance .getLogViewController ().getLogTableController ().getLogTable ();
81
78
String selectedText = StringEscapeUtils .escapeJava (new String (selectedBytes ));
82
79
83
80
JMenuItem useAsFilter = new JMenuItem (new AbstractAction ("Use Selection As LogFilter" ) {
84
81
@ Override
85
82
public void actionPerformed (ActionEvent actionEvent ) {
86
- loggerPlusPlus .getLogViewController ().getLogFilterController ().setFilter (context .getFullLabel () +
83
+ LoggerPlusPlus . instance .getLogViewController ().getLogFilterController ().setFilter (context .getFullLabel () +
87
84
" CONTAINS \" " + selectedText + "\" " );
88
85
}
89
86
});
@@ -95,23 +92,23 @@ public void actionPerformed(ActionEvent actionEvent) {
95
92
JMenuItem andFilter = new JMenuItem (new AbstractAction ("AND" ) {
96
93
@ Override
97
94
public void actionPerformed (ActionEvent actionEvent ) {
98
- loggerPlusPlus .getLogViewController ().getLogFilterController ().setFilter (logTable .getCurrentFilter ().toString () + " && "
95
+ LoggerPlusPlus . instance .getLogViewController ().getLogFilterController ().setFilter (logTable .getCurrentFilter ().toString () + " && "
99
96
+ "" + context .getFullLabel () + " CONTAINS \" " + selectedText + "\" " );
100
97
}
101
98
});
102
99
103
100
JMenuItem andNotFilter = new JMenuItem (new AbstractAction ("AND NOT" ) {
104
101
@ Override
105
102
public void actionPerformed (ActionEvent actionEvent ) {
106
- loggerPlusPlus .getLogViewController ().getLogFilterController ().setFilter (logTable .getCurrentFilter ().toString () + " && !("
103
+ LoggerPlusPlus . instance .getLogViewController ().getLogFilterController ().setFilter (logTable .getCurrentFilter ().toString () + " && !("
107
104
+ "" + context .getFullLabel () + " CONTAINS \" " + selectedText + "\" )" );
108
105
}
109
106
});
110
107
111
108
JMenuItem orFilter = new JMenuItem (new AbstractAction ("OR" ) {
112
109
@ Override
113
110
public void actionPerformed (ActionEvent actionEvent ) {
114
- loggerPlusPlus .getLogViewController ().getLogFilterController ().setFilter (logTable .getCurrentFilter ().toString () + " || "
111
+ LoggerPlusPlus . instance .getLogViewController ().getLogFilterController ().setFilter (logTable .getCurrentFilter ().toString () + " || "
115
112
+ context .getFullLabel () + " CONTAINS \" " + selectedText + "\" " );
116
113
}
117
114
});
@@ -121,19 +118,13 @@ public void actionPerformed(ActionEvent actionEvent) {
121
118
filterMenu .add (addToCurrentFilter );
122
119
}
123
120
124
- JMenuItem colorFilterItem = new JMenuItem (new AbstractAction ("Set Selection as Color LogFilter " ) {
121
+ JMenuItem colorFilterItem = new JMenuItem (new AbstractAction ("Set Selection as Color Filter " ) {
125
122
@ Override
126
123
public void actionPerformed (ActionEvent actionEvent ) {
127
- try {
128
- ColorFilter colorFilter = new ColorFilter ();
129
- colorFilter .setFilter (new LogFilter (loggerPlusPlus .getLibraryController (),
130
- context .getFullLabel () + " CONTAINS \" " + selectedText + "\" " ));
131
- HashMap <UUID ,ColorFilter > colorFilters = loggerPlusPlus .getPreferencesController ().getPreferences ().getSetting (PREF_COLOR_FILTERS );
132
- colorFilters .put (colorFilter .getUUID (), colorFilter );
133
- new ColorFilterDialog (loggerPlusPlus .getLibraryController ()).setVisible (true );
134
- } catch (ParseException e ) {
135
- return ;
136
- }
124
+ TableColorRule tableColorRule = new TableColorRule ("New Filter" , context .getFullLabel () + " CONTAINS \" " + selectedText + "\" " );
125
+ HashMap <UUID , TableColorRule > colorFilters = LoggerPlusPlus .instance .getPreferencesController ().getPreferences ().getSetting (PREF_COLOR_FILTERS );
126
+ colorFilters .put (tableColorRule .getUuid (), tableColorRule );
127
+ new ColorFilterDialog (LoggerPlusPlus .instance .getLibraryController ()).setVisible (true );
137
128
}
138
129
});
139
130
filterMenu .add (colorFilterItem );
0 commit comments