From 0497c5545134a1e57260397d9bfe89d42e81e8dd Mon Sep 17 00:00:00 2001 From: William Lam <13148377+blackphreak@users.noreply.github.com> Date: Wed, 18 Oct 2023 12:42:42 +0800 Subject: [PATCH 1/2] Add import from exported json button & the import function logic --- .../loggerplusplus/imports/LoggerImport.java | 54 +++++++++++++++++++ .../preferences/PreferencesPanel.java | 16 ++++++ 2 files changed, 70 insertions(+) diff --git a/src/main/java/com/nccgroup/loggerplusplus/imports/LoggerImport.java b/src/main/java/com/nccgroup/loggerplusplus/imports/LoggerImport.java index 1aa9f4dc..95afdc99 100644 --- a/src/main/java/com/nccgroup/loggerplusplus/imports/LoggerImport.java +++ b/src/main/java/com/nccgroup/loggerplusplus/imports/LoggerImport.java @@ -25,6 +25,8 @@ import com.nccgroup.loggerplusplus.logview.processor.EntryImportWorker; import lombok.extern.log4j.Log4j2; import org.apache.logging.log4j.util.Base64Util; +import com.google.gson.Gson; +import com.google.gson.JsonElement; import javax.swing.*; import java.io.BufferedReader; @@ -199,6 +201,58 @@ public static ArrayList importZAP() { return requests; } + public static ArrayList importFromExportedJson() { + ArrayList requests = new ArrayList<>(); + + String filename = getLoadFile(); + if ( filename.length() == 0 ) { // exit if no file selected + return new ArrayList<>(); + } + + try { + BufferedReader reader = new BufferedReader(new FileReader(filename)); + } catch (FileNotFoundException e) { + log.error("LoggerImport-readFile: Error Opening File " + filename); + return new ArrayList<>(); + } + + // declare all required variables for re-use in runtime + JsonArray arr = gson.fromJson(reader, JsonElement.class).getAsJsonArray(); + Base64Utils b64Decoder = LoggerPlusPlus.montoya.utilities().base64Utils(); + JsonObject obj, req, res; + HttpService httpService; + HttpRequest httpRequest; + HttpResponse httpResponse; + HttpRequestResponse requestResponse; + String url; + String[] v = new String[2]; + + Iterator i = arr.iterator(); + while (i.hasNext()) { + obj = i.next().getAsJsonObject(); + req = obj.getAsJsonObject("Request"); + res = obj.getAsJsonObject("Response"); + + url = req.getAsString("URL"); + v[0] = req.getAsString("AsBase64"); + v[1] = res.getAsString("AsBase64"); + + try { + httpService = HttpService.httpService(url); + httpRequest = HttpRequest.httpRequest(httpService, b64Decoder.decode(v[0], Base64DecodingOptions.URL)); + httpResponse = HttpResponse.httpResponse(b64Decoder.decode(v[1], Base64DecodingOptions.URL)); + requestResponse = HttpRequestResponse.httpRequestResponse(httpRequest, httpResponse); + + requests.add(requestResponse); + } catch (Exception e) { + log.error("LoggerImport-importWStalker: Error Parsing Content"); + return new ArrayList<>(); + } + } + + return requests; + } + public static boolean loadImported(ArrayList requests, Boolean sendToAutoExporters) { EntryImportWorker importWorker = LoggerPlusPlus.instance.getLogProcessor().createEntryImportBuilder() .setOriginatingTool(ToolType.EXTENSIONS) diff --git a/src/main/java/com/nccgroup/loggerplusplus/preferences/PreferencesPanel.java b/src/main/java/com/nccgroup/loggerplusplus/preferences/PreferencesPanel.java index 9549819a..2433e3d6 100644 --- a/src/main/java/com/nccgroup/loggerplusplus/preferences/PreferencesPanel.java +++ b/src/main/java/com/nccgroup/loggerplusplus/preferences/PreferencesPanel.java @@ -215,6 +215,22 @@ public void actionPerformed(ActionEvent e) { } })); + importGroup.add(new JButton(new AbstractAction("Import From Exported JSON") { + @Override + public void actionPerformed(ActionEvent e) { + ArrayList requests = LoggerImport.importFromExportedJson(); + if (LoggerPlusPlus.instance.getExportController().getEnabledExporters().size() > 0) { + int res = JOptionPane.showConfirmDialog(LoggerPlusPlus.instance.getLoggerFrame(), + "One or more auto-exporters are currently enabled. " + + "Do you want the imported entries to also be sent to the auto-exporters?", + "Auto-exporters Enabled", JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE); + LoggerImport.loadImported(requests, res == JOptionPane.YES_OPTION); + } else { + LoggerImport.loadImported(requests, false); + } + } + })); + ComponentGroup exportGroup = new ComponentGroup(Orientation.HORIZONTAL); HashMap, LogExporter> exporters = LoggerPlusPlus.instance .getExportController().getExporters(); From 3dcf9a41dbf1dc692c7a9f460e8c81dd183ddcab Mon Sep 17 00:00:00 2001 From: William Lam <13148377+blackphreak@users.noreply.github.com> Date: Wed, 18 Oct 2023 12:51:32 +0800 Subject: [PATCH 2/2] Fix typo --- .../com/nccgroup/loggerplusplus/imports/LoggerImport.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/nccgroup/loggerplusplus/imports/LoggerImport.java b/src/main/java/com/nccgroup/loggerplusplus/imports/LoggerImport.java index 95afdc99..e92e193b 100644 --- a/src/main/java/com/nccgroup/loggerplusplus/imports/LoggerImport.java +++ b/src/main/java/com/nccgroup/loggerplusplus/imports/LoggerImport.java @@ -245,7 +245,7 @@ public static ArrayList importFromExportedJson() { requests.add(requestResponse); } catch (Exception e) { - log.error("LoggerImport-importWStalker: Error Parsing Content"); + log.error("LoggerImport-importFromExportedJson: Error Parsing Content"); return new ArrayList<>(); } } @@ -270,4 +270,4 @@ public static boolean loadImported(ArrayList requests, Bool return true; } -} \ No newline at end of file +}