Files
HaE/src/main/java/hae/instances/editor/ResponseEditor.java

127 lines
4.4 KiB
Java
Raw Normal View History

2024-05-06 12:56:56 +08:00
package hae.instances.editor;
import burp.api.montoya.MontoyaApi;
2024-05-09 13:32:22 +08:00
import burp.api.montoya.core.ByteArray;
import burp.api.montoya.core.Range;
2024-05-06 12:56:56 +08:00
import burp.api.montoya.http.message.HttpRequestResponse;
2024-05-23 12:00:13 +08:00
import burp.api.montoya.http.message.requests.HttpRequest;
2024-05-06 12:56:56 +08:00
import burp.api.montoya.http.message.responses.HttpResponse;
2024-05-12 19:02:38 +08:00
import burp.api.montoya.ui.Selection;
2024-05-06 12:56:56 +08:00
import burp.api.montoya.ui.editor.extension.EditorCreationContext;
import burp.api.montoya.ui.editor.extension.ExtensionProvidedHttpResponseEditor;
import burp.api.montoya.ui.editor.extension.HttpResponseEditorProvider;
2024-07-23 09:21:30 +08:00
import hae.component.board.table.Datatable;
2024-05-06 12:56:56 +08:00
import hae.instances.http.utils.MessageProcessor;
2024-05-24 15:00:49 +08:00
import hae.utils.ConfigLoader;
2024-08-12 10:34:26 +08:00
import hae.utils.http.HttpUtils;
2024-05-23 12:00:13 +08:00
import hae.utils.string.StringProcessor;
2024-05-06 12:56:56 +08:00
import javax.swing.*;
import java.awt.*;
import java.util.List;
import java.util.Map;
public class ResponseEditor implements HttpResponseEditorProvider {
private final MontoyaApi api;
2024-05-23 12:00:13 +08:00
private final ConfigLoader configLoader;
2024-05-06 12:56:56 +08:00
2024-05-23 12:00:13 +08:00
public ResponseEditor(MontoyaApi api, ConfigLoader configLoader) {
2024-05-06 12:56:56 +08:00
this.api = api;
2024-05-23 12:00:13 +08:00
this.configLoader = configLoader;
2024-05-06 12:56:56 +08:00
}
@Override
public ExtensionProvidedHttpResponseEditor provideHttpResponseEditor(EditorCreationContext editorCreationContext) {
2024-05-23 12:00:13 +08:00
return new Editor(api, configLoader, editorCreationContext);
2024-05-06 12:56:56 +08:00
}
private static class Editor implements ExtensionProvidedHttpResponseEditor {
private final MontoyaApi api;
2024-05-23 12:00:13 +08:00
private final ConfigLoader configLoader;
2024-08-12 10:34:26 +08:00
private final HttpUtils httpUtils;
2024-05-06 12:56:56 +08:00
private final EditorCreationContext creationContext;
private final MessageProcessor messageProcessor;
2025-03-21 21:22:11 +08:00
private final JTabbedPane jTabbedPane = new JTabbedPane();
2024-05-06 12:56:56 +08:00
private HttpRequestResponse requestResponse;
2024-05-23 12:00:13 +08:00
private List<Map<String, String>> dataList;
2024-05-06 12:56:56 +08:00
2024-05-23 12:00:13 +08:00
public Editor(MontoyaApi api, ConfigLoader configLoader, EditorCreationContext creationContext) {
2024-05-06 12:56:56 +08:00
this.api = api;
2024-05-23 12:00:13 +08:00
this.configLoader = configLoader;
2024-08-12 10:34:26 +08:00
this.httpUtils = new HttpUtils(api, configLoader);
2024-05-06 12:56:56 +08:00
this.creationContext = creationContext;
this.messageProcessor = new MessageProcessor(api, configLoader);
2024-05-06 12:56:56 +08:00
}
@Override
public HttpResponse getResponse() {
return requestResponse.response();
}
@Override
public void setRequestResponse(HttpRequestResponse requestResponse) {
this.requestResponse = requestResponse;
2024-07-23 09:21:30 +08:00
RequestEditor.generateTabbedPaneFromResultMap(api, configLoader, jTabbedPane, this.dataList);
2024-05-06 12:56:56 +08:00
}
@Override
public synchronized boolean isEnabledFor(HttpRequestResponse requestResponse) {
2024-05-23 12:00:13 +08:00
HttpResponse response = requestResponse.response();
if (response != null) {
HttpRequest request = requestResponse.request();
boolean matches = false;
if (request != null) {
try {
String host = StringProcessor.getHostByUrl(request.url());
if (!host.isEmpty()) {
2024-07-23 09:21:30 +08:00
String toolType = creationContext.toolSource().toolType().toolName();
2024-08-12 10:34:26 +08:00
matches = httpUtils.verifyHttpRequestResponse(requestResponse, toolType);
2024-05-23 12:00:13 +08:00
}
} catch (Exception ignored) {
}
}
2024-08-12 10:34:26 +08:00
if (!matches) {
2024-05-23 12:00:13 +08:00
this.dataList = messageProcessor.processResponse("", response, false);
return RequestEditor.isListHasData(this.dataList);
}
2024-05-06 12:56:56 +08:00
}
2024-05-23 12:00:13 +08:00
2024-05-06 12:56:56 +08:00
return false;
}
@Override
public String caption() {
return "MarkInfo";
}
@Override
public Component uiComponent() {
return jTabbedPane;
}
@Override
public Selection selectedData() {
return new Selection() {
@Override
public ByteArray contents() {
2024-05-09 13:32:22 +08:00
Datatable dataTable = (Datatable) jTabbedPane.getSelectedComponent();
return ByteArray.byteArray(dataTable.getSelectedDataAtTable(dataTable.getDataTable()));
2024-05-06 12:56:56 +08:00
}
@Override
public Range offsets() {
return null;
}
};
}
@Override
public boolean isModified() {
return false;
}
}
}