From f37812f50724c387bfa355cd5c1d93a894cd632f Mon Sep 17 00:00:00 2001 From: Akshath Kothari <akshath.kothari@levo.ai> Date: Thu, 18 Jul 2024 10:57:26 +0530 Subject: [PATCH] Fix issue with sending response headers (#34) The request headers were being sent for both the request as well as the response headers while exporting. Signed-off-by: Akshath Kothari <akshath.kothari@levo.ai> --- build.gradle | 2 +- src/main/java/ai/levo/HttpMessagePublisher.java | 16 +++++++--------- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/build.gradle b/build.gradle index 369ccc5..d17e28f 100644 --- a/build.gradle +++ b/build.gradle @@ -11,7 +11,7 @@ apply plugin: 'java' apply plugin: 'maven-publish' group 'ai.levo' -version '0.1.12' +version '0.1.13' def burpExtensionHomepage = 'https://github.com/levoai/levoai-burp-extension' def burpExtensionJarName = 'LevoAiBurpExtension.jar' diff --git a/src/main/java/ai/levo/HttpMessagePublisher.java b/src/main/java/ai/levo/HttpMessagePublisher.java index b80252f..803f464 100644 --- a/src/main/java/ai/levo/HttpMessagePublisher.java +++ b/src/main/java/ai/levo/HttpMessagePublisher.java @@ -131,19 +131,19 @@ private HttpMessage convertToHttpMessage(IRequestInfo reqInfo, byte[] reqContent request.getHeaders().put(":path", reqInfo.getUrl().getPath()); } - String requestBody = callbacks.getHelpers().bytesToString(reqContent); - String[] parts = requestBody.split(TWO_LINES_PATTERN); - if (parts.length > 1 && parts[1].length() > 0) { + String[] requestParts = callbacks.getHelpers().bytesToString(reqContent).split(TWO_LINES_PATTERN); + if (requestParts.length > 1 && !requestParts[1].isEmpty()) { // Base64 encode the body. - request.setBody(callbacks.getHelpers().base64Encode(parts[1])); + request.setBody(callbacks.getHelpers().base64Encode(requestParts[1])); } else { request.setBody(""); } HttpMessage.Response response = new HttpMessage.Response(); + String[] responseParts = callbacks.getHelpers().bytesToString(resContent).split(TWO_LINES_PATTERN); // Create response headers from the first part of the response. Ignore the status line. - String[] responseHeaders = parts[0].split(NEW_LINE_PATTERN); + String[] responseHeaders = responseParts[0].split(NEW_LINE_PATTERN); if (responseHeaders.length > 1) { // Create a list from an array and remove the first element since that's status line. List<String> headers = java.util.Arrays.asList(responseHeaders); @@ -161,11 +161,9 @@ private HttpMessage convertToHttpMessage(IRequestInfo reqInfo, byte[] reqContent alertWriter.writeAlert("Not sending response body for content-type: " + contentType + " to Levo."); response.setBody(""); } else { - String responseBody = callbacks.getHelpers().bytesToString(resContent); - parts = responseBody.split(TWO_LINES_PATTERN); - if (parts.length > 1 && parts[1].length() > 0) { + if (responseParts.length > 1 && !responseParts[1].isEmpty()) { // Base64 encode the response body. - response.setBody(callbacks.getHelpers().base64Encode(parts[1])); + response.setBody(callbacks.getHelpers().base64Encode(responseParts[1])); } else { // Don't drop the message if the response body is empty. response.setBody("");