From 5fb9751c51c0be514d2715b07643e2ac698f9a4a Mon Sep 17 00:00:00 2001 From: Kelly Kelly Date: Tue, 22 Sep 2020 16:04:11 -0400 Subject: [PATCH 1/6] Add double quote to paths for varions ProcessBuilder commands --- .../autopsy/casemodule/LocalFilesDSProcessor.java | 6 +++--- .../casemodule/UnpackagePortableCaseProgressDialog.java | 4 ++-- .../ileappanalyzer/ILeappAnalyzerIngestModule.java | 4 ++-- .../photoreccarver/PhotoRecCarverFileIngestModule.java | 4 ++-- .../modules/pictureanalyzer/impls/HEICProcessor.java | 6 +++--- .../autopsy/modules/plaso/PlasoIngestModule.java | 8 ++++---- .../modules/portablecase/PortableCaseReportModule.java | 6 +++--- .../experimental/volatilityDSP/VolatilityProcessor.java | 4 ++-- .../org/sleuthkit/autopsy/recentactivity/ExtractEdge.java | 4 ++-- .../org/sleuthkit/autopsy/recentactivity/ExtractIE.java | 2 +- .../sleuthkit/autopsy/recentactivity/ExtractPrefetch.java | 6 +++--- .../sleuthkit/autopsy/recentactivity/ExtractRegistry.java | 2 +- .../org/sleuthkit/autopsy/recentactivity/ExtractSru.java | 4 ++-- 13 files changed, 30 insertions(+), 30 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/LocalFilesDSProcessor.java b/Core/src/org/sleuthkit/autopsy/casemodule/LocalFilesDSProcessor.java index 4d5e3eac36..a1629609ce 100644 --- a/Core/src/org/sleuthkit/autopsy/casemodule/LocalFilesDSProcessor.java +++ b/Core/src/org/sleuthkit/autopsy/casemodule/LocalFilesDSProcessor.java @@ -193,7 +193,7 @@ public class LocalFilesDSProcessor implements DataSourceProcessor, AutoIngestDat List command = new ArrayList<>(); for (final String l01Path : logicalEvidenceFilePaths) { command.clear(); - command.add(ewfexportPath.toAbsolutePath().toString()); + command.add(String.format("\"%s\"", ewfexportPath.toAbsolutePath().toString())); command.add("-f"); command.add("files"); command.add("-t"); @@ -203,8 +203,8 @@ public class LocalFilesDSProcessor implements DataSourceProcessor, AutoIngestDat } Path dirPath = Paths.get(FilenameUtils.getBaseName(l01Path) + UNIQUENESS_CONSTRAINT_SEPERATOR + System.currentTimeMillis()); - command.add(dirPath.toString()); - command.add(l01Path); + command.add(String.format("\"%s\"", dirPath.toString())); + command.add(String.format("\"%s\"", l01Path)); ProcessBuilder processBuilder = new ProcessBuilder(command); processBuilder.directory(l01Dir); try { diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/UnpackagePortableCaseProgressDialog.java b/Core/src/org/sleuthkit/autopsy/casemodule/UnpackagePortableCaseProgressDialog.java index b5f495806b..dd535b268d 100644 --- a/Core/src/org/sleuthkit/autopsy/casemodule/UnpackagePortableCaseProgressDialog.java +++ b/Core/src/org/sleuthkit/autopsy/casemodule/UnpackagePortableCaseProgressDialog.java @@ -173,10 +173,10 @@ class UnpackagePortableCaseProgressDialog extends javax.swing.JDialog implements throw new TskCoreException("Error finding 7-Zip executable"); // NON-NLS } - String outputFolderSwitch = "-o" + outputFolder; // NON-NLS + String outputFolderSwitch = "-o" + String.format("\"%s\"",outputFolder); // NON-NLS ProcessBuilder procBuilder = new ProcessBuilder(); procBuilder.command( - sevenZipExe.getAbsolutePath(), + String.format("\"%s\"",sevenZipExe.getAbsolutePath()), "x", // Extract packagedCase, outputFolderSwitch diff --git a/Core/src/org/sleuthkit/autopsy/modules/ileappanalyzer/ILeappAnalyzerIngestModule.java b/Core/src/org/sleuthkit/autopsy/modules/ileappanalyzer/ILeappAnalyzerIngestModule.java index 1651a32977..a0f18656c5 100644 --- a/Core/src/org/sleuthkit/autopsy/modules/ileappanalyzer/ILeappAnalyzerIngestModule.java +++ b/Core/src/org/sleuthkit/autopsy/modules/ileappanalyzer/ILeappAnalyzerIngestModule.java @@ -210,8 +210,8 @@ public class ILeappAnalyzerIngestModule implements DataSourceIngestModule { ProcessBuilder processBuilder = buildProcessWithRunAsInvoker( "\"" + iLeappExecutable + "\"", //NON-NLS "-t", iLeappFileSystemType, //NON-NLS - "-i", sourceFilePath, //NON-NLS - "-o", moduleOutputPath.toString() + "-i", String.format("\"%s\"",sourceFilePath), //NON-NLS + "-o", String.format("\"%s\"",moduleOutputPath.toString()) ); processBuilder.redirectError(moduleOutputPath.resolve("iLeapp_err.txt").toFile()); //NON-NLS processBuilder.redirectOutput(moduleOutputPath.resolve("iLeapp_out.txt").toFile()); //NON-NLS diff --git a/Core/src/org/sleuthkit/autopsy/modules/photoreccarver/PhotoRecCarverFileIngestModule.java b/Core/src/org/sleuthkit/autopsy/modules/photoreccarver/PhotoRecCarverFileIngestModule.java index 8052316ab8..040b7ce8b3 100644 --- a/Core/src/org/sleuthkit/autopsy/modules/photoreccarver/PhotoRecCarverFileIngestModule.java +++ b/Core/src/org/sleuthkit/autopsy/modules/photoreccarver/PhotoRecCarverFileIngestModule.java @@ -321,9 +321,9 @@ final class PhotoRecCarverFileIngestModule implements FileIngestModule { ProcessBuilder processAndSettings = new ProcessBuilder( executableFile.toString(), "/d", // NON-NLS - outputDirPath.toAbsolutePath().toString() + File.separator + PHOTOREC_RESULTS_BASE, + String.format("\"%s\"", Paths.get(outputDirPath.toAbsolutePath().toString(), PHOTOREC_RESULTS_BASE).toString()), "/cmd", // NON-NLS - tempFilePath.toFile().toString()); + String.format("\"%s\"",tempFilePath.toFile().toString())); processAndSettings.command().add(this.optionsString); diff --git a/Core/src/org/sleuthkit/autopsy/modules/pictureanalyzer/impls/HEICProcessor.java b/Core/src/org/sleuthkit/autopsy/modules/pictureanalyzer/impls/HEICProcessor.java index 8d4588aa98..25b76ee011 100755 --- a/Core/src/org/sleuthkit/autopsy/modules/pictureanalyzer/impls/HEICProcessor.java +++ b/Core/src/org/sleuthkit/autopsy/modules/pictureanalyzer/impls/HEICProcessor.java @@ -188,9 +188,9 @@ public class HEICProcessor implements PictureProcessor { // Any additional images found within the HEIC container will be // formatted as fileName-1.jpg, fileName-2.jpg, etc. final ProcessBuilder processBuilder = new ProcessBuilder() - .command(IMAGE_MAGICK_PATH.toString(), - localDiskCopy.toString(), - outputFile.toString()); + .command(String.format("\"%s\"",IMAGE_MAGICK_PATH.toString()), + String.format("\"%s\"",localDiskCopy.toString()), + String.format("\"%s\"",outputFile.toString())); processBuilder.redirectError(imageMagickErrorOutput.toFile()); diff --git a/Core/src/org/sleuthkit/autopsy/modules/plaso/PlasoIngestModule.java b/Core/src/org/sleuthkit/autopsy/modules/plaso/PlasoIngestModule.java index d359332f84..d1838c2798 100755 --- a/Core/src/org/sleuthkit/autopsy/modules/plaso/PlasoIngestModule.java +++ b/Core/src/org/sleuthkit/autopsy/modules/plaso/PlasoIngestModule.java @@ -235,8 +235,8 @@ public class PlasoIngestModule implements DataSourceIngestModule { "--parsers", "\"" + parsersString + "\"",//NON-NLS "--no_dependencies_check", //NON-NLS "--workers", String.valueOf(LOG2TIMELINE_WORKERS),//NON-NLS - moduleOutputPath.resolve(PLASO).toString(), - image.getPaths()[0] + String.format("\"%s\"",moduleOutputPath.resolve(PLASO).toString()), + String.format("\"%s\"",image.getPaths()[0]) ); processBuilder.redirectError(moduleOutputPath.resolve("log2timeline_err.txt").toFile()); //NON-NLS return processBuilder; @@ -256,8 +256,8 @@ public class PlasoIngestModule implements DataSourceIngestModule { ProcessBuilder processBuilder = buildProcessWithRunAsInvoker( "\"" + psortExecutable + "\"", //NON-NLS "-o", "4n6time_sqlite", //NON-NLS - "-w", moduleOutputPath.resolve("plasodb.db3").toString(), //NON-NLS - moduleOutputPath.resolve(PLASO).toString() + "-w", String.format("\"%s\"",moduleOutputPath.resolve("plasodb.db3").toString()), //NON-NLS + String.format("\"%s\"",moduleOutputPath.resolve(PLASO).toString()) ); processBuilder.redirectOutput(moduleOutputPath.resolve("psort_output.txt").toFile()); //NON-NLS diff --git a/Core/src/org/sleuthkit/autopsy/report/modules/portablecase/PortableCaseReportModule.java b/Core/src/org/sleuthkit/autopsy/report/modules/portablecase/PortableCaseReportModule.java index 83bfb2fdae..29dc530aa0 100644 --- a/Core/src/org/sleuthkit/autopsy/report/modules/portablecase/PortableCaseReportModule.java +++ b/Core/src/org/sleuthkit/autopsy/report/modules/portablecase/PortableCaseReportModule.java @@ -1329,10 +1329,10 @@ public class PortableCaseReportModule implements ReportModule { File zipFile = Paths.get(tempZipFolder.getAbsolutePath(), caseName + ".zip").toFile(); // NON-NLS ProcessBuilder procBuilder = new ProcessBuilder(); procBuilder.command( - sevenZipExe.getAbsolutePath(), + String.format("\"%s\"",sevenZipExe.getAbsolutePath()), "a", // Add to archive - zipFile.getAbsolutePath(), - dirToCompress.toAbsolutePath().toString(), + String.format("\"%s\"",zipFile.getAbsolutePath()), + String.format("\"%s\"",dirToCompress.toAbsolutePath().toString()), chunkOption ); diff --git a/Experimental/src/org/sleuthkit/autopsy/experimental/volatilityDSP/VolatilityProcessor.java b/Experimental/src/org/sleuthkit/autopsy/experimental/volatilityDSP/VolatilityProcessor.java index 9282362c1c..d68493e59a 100644 --- a/Experimental/src/org/sleuthkit/autopsy/experimental/volatilityDSP/VolatilityProcessor.java +++ b/Experimental/src/org/sleuthkit/autopsy/experimental/volatilityDSP/VolatilityProcessor.java @@ -196,7 +196,7 @@ class VolatilityProcessor { List commandLine = new ArrayList<>(); commandLine.add("\"" + executableFile + "\""); //NON-NLS File memoryImage = new File(memoryImagePath); - commandLine.add("--filename=" + memoryImage.getName()); //NON-NLS + commandLine.add("--filename=" + String.format("\"%s\"",memoryImage.getName())); //NON-NLS if (!profile.isEmpty()) { commandLine.add("--profile=" + profile); //NON-NLS } @@ -213,7 +213,7 @@ class VolatilityProcessor { if (!directory.exists()) { directory.mkdirs(); } - commandLine.add("--dump-dir=" + outputDir); //NON-NLS + commandLine.add("--dump-dir=" + String.format("\"%s\"",outputDir)); //NON-NLS break; default: break; diff --git a/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/ExtractEdge.java b/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/ExtractEdge.java index aeb2b27954..d9f8278a1b 100755 --- a/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/ExtractEdge.java +++ b/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/ExtractEdge.java @@ -575,10 +575,10 @@ final class ExtractEdge extends Extract { List commandLine = new ArrayList<>(); commandLine.add(dumperPath); commandLine.add("/table"); //NON-NLS - commandLine.add(inputFilePath); + commandLine.add(String.format("\"%s\"",inputFilePath)); commandLine.add("*"); //NON-NLS commandLine.add("/scomma"); //NON-NLS - commandLine.add(outputDir + "\\" + "*.csv"); //NON-NLS + commandLine.add(String.format("\"%s\"",outputDir + "\\" + "*.csv")); //NON-NLS ProcessBuilder processBuilder = new ProcessBuilder(commandLine); processBuilder.redirectOutput(outputFilePath.toFile()); diff --git a/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/ExtractIE.java b/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/ExtractIE.java index d128c09dc7..576a02a393 100644 --- a/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/ExtractIE.java +++ b/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/ExtractIE.java @@ -400,7 +400,7 @@ class ExtractIE extends Extract { List commandLine = new ArrayList<>(); commandLine.add(JAVA_PATH); commandLine.add("-cp"); //NON-NLS - commandLine.add(PASCO_LIB_PATH); + commandLine.add(String.format("\"%s\"",PASCO_LIB_PATH)); commandLine.add("isi.pasco2.Main"); //NON-NLS commandLine.add("-T"); //NON-NLS commandLine.add("history"); //NON-NLS diff --git a/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/ExtractPrefetch.java b/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/ExtractPrefetch.java index 4771b76223..88f0019209 100644 --- a/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/ExtractPrefetch.java +++ b/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/ExtractPrefetch.java @@ -177,9 +177,9 @@ final class ExtractPrefetch extends Extract { final Path errFilePath = Paths.get(tempOutPath, PREFETCH_ERROR_FILE_NAME); List commandLine = new ArrayList<>(); - commandLine.add(prefetchExePath); - commandLine.add(prefetchDir); //NON-NLS - commandLine.add(tempOutFile); + commandLine.add(String.format("\"%s\"",prefetchExePath)); + commandLine.add(String.format("\"%s\"",prefetchDir)); //NON-NLS + commandLine.add(String.format("\"%s\"",tempOutFile)); ProcessBuilder processBuilder = new ProcessBuilder(commandLine); processBuilder.redirectOutput(outputFilePath.toFile()); diff --git a/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/ExtractRegistry.java b/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/ExtractRegistry.java index 9d232cdc84..d4cf0e9c66 100644 --- a/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/ExtractRegistry.java +++ b/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/ExtractRegistry.java @@ -472,7 +472,7 @@ class ExtractRegistry extends Extract { commandLine.add(cmd); } commandLine.add("-r"); //NON-NLS - commandLine.add(hiveFilePath); + commandLine.add(String.format("\"%s\"",hiveFilePath)); commandLine.add("-f"); //NON-NLS commandLine.add(hiveFileType); diff --git a/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/ExtractSru.java b/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/ExtractSru.java index fb85593953..2f6cf0a303 100644 --- a/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/ExtractSru.java +++ b/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/ExtractSru.java @@ -247,10 +247,10 @@ final class ExtractSru extends Extract { final Path errFilePath = Paths.get(tempOutPath, SRU_ERROR_FILE_NAME); List commandLine = new ArrayList<>(); - commandLine.add(sruExePath); + commandLine.add(String.format("\"%s\"",sruExePath)); commandLine.add(sruFile); //NON-NLS commandLine.add(softwareHiveFile); - commandLine.add(tempOutFile); + commandLine.add(String.format("\"%s\"",tempOutFile)); ProcessBuilder processBuilder = new ProcessBuilder(commandLine); processBuilder.redirectOutput(outputFilePath.toFile()); From 46066168479f5065c2ae4b4468c579807d322743 Mon Sep 17 00:00:00 2001 From: Kelly Kelly Date: Wed, 23 Sep 2020 11:14:57 -0400 Subject: [PATCH 2/6] Modify timeout that HEICProcessor uses --- .../modules/pictureanalyzer/impls/HEICProcessor.java | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/modules/pictureanalyzer/impls/HEICProcessor.java b/Core/src/org/sleuthkit/autopsy/modules/pictureanalyzer/impls/HEICProcessor.java index 25b76ee011..0b3296be97 100755 --- a/Core/src/org/sleuthkit/autopsy/modules/pictureanalyzer/impls/HEICProcessor.java +++ b/Core/src/org/sleuthkit/autopsy/modules/pictureanalyzer/impls/HEICProcessor.java @@ -48,6 +48,7 @@ import org.sleuthkit.autopsy.coreutils.ExecUtil; import org.sleuthkit.autopsy.coreutils.FileUtil; import org.sleuthkit.autopsy.coreutils.Logger; import org.sleuthkit.autopsy.coreutils.PlatformUtil; +import org.sleuthkit.autopsy.ingest.FileIngestModuleProcessTerminator; import org.sleuthkit.autopsy.ingest.IngestJobContext; import org.sleuthkit.autopsy.ingest.IngestServices; import org.sleuthkit.autopsy.ingest.ModuleContentEvent; @@ -71,7 +72,7 @@ public class HEICProcessor implements PictureProcessor { private static final int EXIT_SUCCESS = 0; private static final String HEIC_MODULE_FOLDER = "HEIC"; - private static final long TIMEOUT_IN_MS = TimeUnit.MILLISECONDS.convert(2, TimeUnit.MINUTES); + private static final long TIMEOUT_IN_SEC = TimeUnit.SECONDS.convert(2, TimeUnit.MINUTES); // Windows location private static final String IMAGE_MAGICK_FOLDER = "ImageMagick-7.0.10-27-portable-Q16-x64"; @@ -194,10 +195,7 @@ public class HEICProcessor implements PictureProcessor { processBuilder.redirectError(imageMagickErrorOutput.toFile()); - final long startTime = System.currentTimeMillis(); - final int exitStatus = ExecUtil.execute(processBuilder, () -> { - return context.fileIngestIsCancelled() || System.currentTimeMillis() - startTime >= TIMEOUT_IN_MS; - }); + final int exitStatus = ExecUtil.execute(processBuilder, new FileIngestModuleProcessTerminator(context, TIMEOUT_IN_SEC)); if (context.fileIngestIsCancelled()) { return; From d51020f091493540954cf4b167b3117c89d92681 Mon Sep 17 00:00:00 2001 From: apriestman Date: Wed, 23 Sep 2020 13:26:45 -0400 Subject: [PATCH 3/6] Document option to include application in portable case. --- .../images/portable_case_open_bat.png | Bin 0 -> 17234 bytes .../images/portable_case_report_panel.png | Bin 21303 -> 33865 bytes docs/doxygen-user/portable_case.dox | 10 ++++++++-- 3 files changed, 8 insertions(+), 2 deletions(-) create mode 100644 docs/doxygen-user/images/portable_case_open_bat.png diff --git a/docs/doxygen-user/images/portable_case_open_bat.png b/docs/doxygen-user/images/portable_case_open_bat.png new file mode 100644 index 0000000000000000000000000000000000000000..57e0985562027710f1954ea4fc19a3fbc781f753 GIT binary patch literal 17234 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 Case. If your portable case was packaged, you'll need to use the unpack option to open it. Open the "Case" menu and then select "Unpack and Open Portable Case" option. This will bring up a dialog where you can browse to your packaged case and select where to extract it to. The case will also open. Note that any changes made to the case at this point will be saved to the unpacked location, and next time you open it you will need to browse to the unpacked folder. +If the Autopsy application was included in the portable case, it can be opened by double-clicking on the "open.bat" file. + +\image html portable_case_open_bat.png + +Otherwise, you'll start by opening the Autopsy application. Unpackaged portable cases can be opened like any other case through Case->Open Case. If your portable case was packaged, you'll need to use the unpack option to open it. Open the "Case" menu and then select "Unpack and Open Portable Case" option. This will bring up a dialog where you can browse to your packaged case and select where to extract it to. The case will also open. Note that any changes made to the case at this point will be saved to the unpacked location, and next time you open it you will need to browse to the unpacked folder. \image html portable_case_unpackage.png From 90901e74852871589c9f32622ef2d5a94e2fe520 Mon Sep 17 00:00:00 2001 From: "U-BASIS\\dsmyda" Date: Thu, 24 Sep 2020 10:54:59 -0400 Subject: [PATCH 4/6] Updated the interesting file set panel to remember last selection of imports --- .../interestingitems/FilesSetDefsPanel.java | 50 +++++++++++++++---- 1 file changed, 40 insertions(+), 10 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/modules/interestingitems/FilesSetDefsPanel.java b/Core/src/org/sleuthkit/autopsy/modules/interestingitems/FilesSetDefsPanel.java index 1033c60dda..c373be54ac 100644 --- a/Core/src/org/sleuthkit/autopsy/modules/interestingitems/FilesSetDefsPanel.java +++ b/Core/src/org/sleuthkit/autopsy/modules/interestingitems/FilesSetDefsPanel.java @@ -1,7 +1,7 @@ /* * Autopsy Forensic Browser * - * Copyright 2011-2018 Basis Technology Corp. + * Copyright 2011-2020 Basis Technology Corp. * Contact: carrier sleuthkit org * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -46,6 +46,7 @@ import org.openide.windows.WindowManager; import org.sleuthkit.autopsy.corecomponents.OptionsPanel; import org.sleuthkit.autopsy.coreutils.Logger; import org.sleuthkit.autopsy.coreutils.MessageNotifyUtil; +import org.sleuthkit.autopsy.coreutils.ModuleSettings; import org.sleuthkit.autopsy.guiutils.SimpleListCellRenderer; import org.sleuthkit.autopsy.ingest.IngestManager; import org.sleuthkit.autopsy.ingest.IngestModuleGlobalSettingsPanel; @@ -88,6 +89,9 @@ public final class FilesSetDefsPanel extends IngestModuleGlobalSettingsPanel imp private final String filterDialogTitle; private final String ruleDialogTitle; private boolean canBeEnabled = true; + + private final JFileChooser importFileChooser; + private final String LAST_IMPORT_PATH_KEY = "InterestingFilesLastImport"; // The following is a map of interesting files set names to interesting // files set definitions. It is a snapshot of the files set definitions @@ -146,6 +150,20 @@ public final class FilesSetDefsPanel extends IngestModuleGlobalSettingsPanel imp enableButtons(); }); canBeEnabled = !IngestManager.getInstance().isIngestRunning(); + + this.importFileChooser = new JFileChooser(); + configureImportFileChooser(); + } + + /** + * Configure the file chooser for rule set imports. + */ + private void configureImportFileChooser() { + FileNameExtensionFilter autopsyFilter = new FileNameExtensionFilter( + NbBundle.getMessage(this.getClass(), "FilesSetDefsPanel.interesting.fileExtensionFilterLbl"), "xml"); + importFileChooser.addChoosableFileFilter(autopsyFilter); + importFileChooser.setAcceptAllFileFilterUsed(false); + importFileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY); } @NbBundle.Messages({"FilesSetDefsPanel.Interesting.Title=Global Interesting Items Settings", @@ -1131,16 +1149,25 @@ public final class FilesSetDefsPanel extends IngestModuleGlobalSettingsPanel imp private void importSetButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_importSetButtonActionPerformed //save currently selected value as default value to select FilesSet selectedSet = this.setsList.getSelectedValue(); - JFileChooser chooser = new JFileChooser(); - final String EXTENSION = "xml"; //NON-NLS - FileNameExtensionFilter autopsyFilter = new FileNameExtensionFilter( - NbBundle.getMessage(this.getClass(), "FilesSetDefsPanel.interesting.fileExtensionFilterLbl"), EXTENSION); - chooser.addChoosableFileFilter(autopsyFilter); - chooser.setAcceptAllFileFilterUsed(false); - chooser.setFileSelectionMode(JFileChooser.FILES_ONLY); - int returnVal = chooser.showOpenDialog(this); + + File lastFolder = null; + if (ModuleSettings.settingExists(ModuleSettings.MAIN_SETTINGS, LAST_IMPORT_PATH_KEY)) { + final String lastDirectory = ModuleSettings.getConfigSetting(ModuleSettings.MAIN_SETTINGS, LAST_IMPORT_PATH_KEY); + File lastDirectoryFile = new File(lastDirectory); + // Only select it if it exists. + if (lastDirectoryFile.exists()) { + lastFolder = lastDirectoryFile; + } + } + + // Passing null to fileChooser will set it to the + // user's default directory, which is a good starting + // point if no selection setting exists yet. + importFileChooser.setCurrentDirectory(lastFolder); + + int returnVal = importFileChooser.showOpenDialog(this); if (returnVal == JFileChooser.APPROVE_OPTION) { - File selFile = chooser.getSelectedFile(); + File selFile = importFileChooser.getSelectedFile(); if (selFile == null) { JOptionPane.showMessageDialog(this, Bundle.FilesSetDefsPanel_importSetButtonActionPerformed_noFilesSelected(), @@ -1149,6 +1176,9 @@ public final class FilesSetDefsPanel extends IngestModuleGlobalSettingsPanel imp logger.warning("Selected file was null, when trying to import interesting files set definitions"); return; } + + ModuleSettings.setConfigSetting(ModuleSettings.MAIN_SETTINGS, LAST_IMPORT_PATH_KEY, selFile.getParent()); + Collection importedSets; try { importedSets = InterestingItemsFilesSetSettings.readDefinitionsXML(selFile).values(); //read the xml from that path From c3625cd4ec9b4f3460522f3aeb68b9081a081a5b Mon Sep 17 00:00:00 2001 From: "U-BASIS\\dsmyda" Date: Thu, 24 Sep 2020 11:27:39 -0400 Subject: [PATCH 5/6] Added last selection persistence for exports as well --- .../interestingitems/FilesSetDefsPanel.java | 81 +++++++++++-------- 1 file changed, 49 insertions(+), 32 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/modules/interestingitems/FilesSetDefsPanel.java b/Core/src/org/sleuthkit/autopsy/modules/interestingitems/FilesSetDefsPanel.java index c373be54ac..b8eb24e669 100644 --- a/Core/src/org/sleuthkit/autopsy/modules/interestingitems/FilesSetDefsPanel.java +++ b/Core/src/org/sleuthkit/autopsy/modules/interestingitems/FilesSetDefsPanel.java @@ -90,8 +90,13 @@ public final class FilesSetDefsPanel extends IngestModuleGlobalSettingsPanel imp private final String ruleDialogTitle; private boolean canBeEnabled = true; + private static final String XML_EXTENSION = "xml"; + private final JFileChooser importFileChooser; - private final String LAST_IMPORT_PATH_KEY = "InterestingFilesLastImport"; + private final String LAST_IMPORT_PATH_KEY = "InterestingFilesRuleSetLastImport"; + + private final JFileChooser exportFileChooser; + private final String LAST_EXPORT_PATH_KEY = "InterestingFilesRuleSetLastExport"; // The following is a map of interesting files set names to interesting // files set definitions. It is a snapshot of the files set definitions @@ -152,18 +157,20 @@ public final class FilesSetDefsPanel extends IngestModuleGlobalSettingsPanel imp canBeEnabled = !IngestManager.getInstance().isIngestRunning(); this.importFileChooser = new JFileChooser(); - configureImportFileChooser(); + this.exportFileChooser = new JFileChooser(); + configureFileChooser(importFileChooser); + configureFileChooser(exportFileChooser); } /** - * Configure the file chooser for rule set imports. + * Configure the file chooser for rule set imports and exports. */ - private void configureImportFileChooser() { + private void configureFileChooser(JFileChooser fileChooser) { FileNameExtensionFilter autopsyFilter = new FileNameExtensionFilter( - NbBundle.getMessage(this.getClass(), "FilesSetDefsPanel.interesting.fileExtensionFilterLbl"), "xml"); - importFileChooser.addChoosableFileFilter(autopsyFilter); - importFileChooser.setAcceptAllFileFilterUsed(false); - importFileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY); + NbBundle.getMessage(this.getClass(), "FilesSetDefsPanel.interesting.fileExtensionFilterLbl"), XML_EXTENSION); + fileChooser.addChoosableFileFilter(autopsyFilter); + fileChooser.setAcceptAllFileFilterUsed(false); + fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY); } @NbBundle.Messages({"FilesSetDefsPanel.Interesting.Title=Global Interesting Items Settings", @@ -1150,19 +1157,7 @@ public final class FilesSetDefsPanel extends IngestModuleGlobalSettingsPanel imp //save currently selected value as default value to select FilesSet selectedSet = this.setsList.getSelectedValue(); - File lastFolder = null; - if (ModuleSettings.settingExists(ModuleSettings.MAIN_SETTINGS, LAST_IMPORT_PATH_KEY)) { - final String lastDirectory = ModuleSettings.getConfigSetting(ModuleSettings.MAIN_SETTINGS, LAST_IMPORT_PATH_KEY); - File lastDirectoryFile = new File(lastDirectory); - // Only select it if it exists. - if (lastDirectoryFile.exists()) { - lastFolder = lastDirectoryFile; - } - } - - // Passing null to fileChooser will set it to the - // user's default directory, which is a good starting - // point if no selection setting exists yet. + File lastFolder = getLastUsedDirectory(LAST_IMPORT_PATH_KEY); importFileChooser.setCurrentDirectory(lastFolder); int returnVal = importFileChooser.showOpenDialog(this); @@ -1221,6 +1216,27 @@ public final class FilesSetDefsPanel extends IngestModuleGlobalSettingsPanel imp }//GEN-LAST:event_importSetButtonActionPerformed + /** + * Get the last used directory from ModuleSettings, using the value + * associated with the input key as the directory path. + * + * @param key The input key to search in module settings. + * @return A directory instance if a value was found and the path is still + * valid, or null otherwise. + */ + private File getLastUsedDirectory(String key) { + File lastFolder = null; + if (ModuleSettings.settingExists(ModuleSettings.MAIN_SETTINGS, key)) { + final String lastDirectory = ModuleSettings.getConfigSetting(ModuleSettings.MAIN_SETTINGS, key); + File lastDirectoryFile = new File(lastDirectory); + // Only select it if it exists. + if (lastDirectoryFile.exists()) { + lastFolder = lastDirectoryFile; + } + } + return lastFolder; + } + /** * From the files sets that can be imported, this method rectifies any * conflicts that may occur. @@ -1450,18 +1466,16 @@ public final class FilesSetDefsPanel extends IngestModuleGlobalSettingsPanel imp private void exportSetButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_exportSetButtonActionPerformed //display warning that existing filessets with duplicate names will be overwritten //create file chooser to get xml filefinal String FEATURE_NAME = NbBundle.getMessage(this.getClass(), - JFileChooser chooser = new JFileChooser(); - final String EXTENSION = "xml"; //NON-NLS - FileNameExtensionFilter autopsyFilter = new FileNameExtensionFilter( - NbBundle.getMessage(this.getClass(), "FilesSetDefsPanel.interesting.fileExtensionFilterLbl"), EXTENSION); - chooser.addChoosableFileFilter(autopsyFilter); - chooser.setSelectedFile(new File(this.setsList.getSelectedValue().getName())); - chooser.setFileSelectionMode(JFileChooser.FILES_ONLY); - int returnVal = chooser.showSaveDialog(this); + exportFileChooser.setSelectedFile(new File(this.setsList.getSelectedValue().getName())); + + final File lastDirectory = getLastUsedDirectory(LAST_EXPORT_PATH_KEY); + exportFileChooser.setCurrentDirectory(lastDirectory); + + int returnVal = exportFileChooser.showSaveDialog(this); if (returnVal == JFileChooser.APPROVE_OPTION) { final String FEATURE_NAME = NbBundle.getMessage(this.getClass(), "FilesSetDefsPanel.interesting.exportButtonAction.featureName"); - File selFile = chooser.getSelectedFile(); + File selFile = exportFileChooser.getSelectedFile(); if (selFile == null) { JOptionPane.showMessageDialog(this, NbBundle.getMessage(this.getClass(), "FilesSetDefsPanel.interesting.failExportMsg"), @@ -1470,10 +1484,13 @@ public final class FilesSetDefsPanel extends IngestModuleGlobalSettingsPanel imp logger.warning("Selected file was null, when trying to export interesting files set definitions"); return; } + + ModuleSettings.setConfigSetting(ModuleSettings.MAIN_SETTINGS, LAST_EXPORT_PATH_KEY, selFile.getParent()); + //force append extension if not given String fileAbs = selFile.getAbsolutePath(); - if (!fileAbs.endsWith("." + EXTENSION)) { - fileAbs = fileAbs + "." + EXTENSION; + if (!fileAbs.endsWith("." + XML_EXTENSION)) { + fileAbs = fileAbs + "." + XML_EXTENSION; selFile = new File(fileAbs); } if (selFile.exists()) { From edfd6f55271538e3138c1a5e3563f9cec92f3ce9 Mon Sep 17 00:00:00 2001 From: "U-BASIS\\dsmyda" Date: Thu, 24 Sep 2020 11:49:20 -0400 Subject: [PATCH 6/6] Codacy --- .../autopsy/modules/interestingitems/FilesSetDefsPanel.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/modules/interestingitems/FilesSetDefsPanel.java b/Core/src/org/sleuthkit/autopsy/modules/interestingitems/FilesSetDefsPanel.java index b8eb24e669..7b518da9c4 100644 --- a/Core/src/org/sleuthkit/autopsy/modules/interestingitems/FilesSetDefsPanel.java +++ b/Core/src/org/sleuthkit/autopsy/modules/interestingitems/FilesSetDefsPanel.java @@ -93,10 +93,10 @@ public final class FilesSetDefsPanel extends IngestModuleGlobalSettingsPanel imp private static final String XML_EXTENSION = "xml"; private final JFileChooser importFileChooser; - private final String LAST_IMPORT_PATH_KEY = "InterestingFilesRuleSetLastImport"; + private static final String LAST_IMPORT_PATH_KEY = "InterestingFilesRuleSetLastImport"; private final JFileChooser exportFileChooser; - private final String LAST_EXPORT_PATH_KEY = "InterestingFilesRuleSetLastExport"; + private static final String LAST_EXPORT_PATH_KEY = "InterestingFilesRuleSetLastExport"; // The following is a map of interesting files set names to interesting // files set definitions. It is a snapshot of the files set definitions