diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/ImageDSProcessor.java b/Core/src/org/sleuthkit/autopsy/casemodule/ImageDSProcessor.java index 92335e75b1..07a88ee07f 100644 --- a/Core/src/org/sleuthkit/autopsy/casemodule/ImageDSProcessor.java +++ b/Core/src/org/sleuthkit/autopsy/casemodule/ImageDSProcessor.java @@ -1,7 +1,7 @@ /* * Autopsy Forensic Browser * - * Copyright 2013-2018 Basis Technology Corp. + * Copyright 2013-2021 Basis Technology Corp. * Contact: carrier sleuthkit org * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -51,8 +51,7 @@ import org.sleuthkit.datamodel.TskCoreException; * independently of the wizard. */ @ServiceProviders(value = { - @ServiceProvider(service = DataSourceProcessor.class) - , + @ServiceProvider(service = DataSourceProcessor.class), @ServiceProvider(service = AutoIngestDataSourceProcessor.class)} ) public class ImageDSProcessor implements DataSourceProcessor, AutoIngestDataSourceProcessor { @@ -83,7 +82,6 @@ public class ImageDSProcessor implements DataSourceProcessor, AutoIngestDataSour private String sha1; private String sha256; private Host host = null; - private boolean setDataSourceOptionsCalled; static { filtersList.add(allFilter); @@ -184,8 +182,8 @@ public class ImageDSProcessor implements DataSourceProcessor, AutoIngestDataSour @Override public void run(DataSourceProcessorProgressMonitor progressMonitor, DataSourceProcessorCallback callback) { run(null, progressMonitor, callback); - } - + } + /** * Adds a data source to the case database using a background task in a * separate thread and the settings provided by the selection and @@ -208,71 +206,71 @@ public class ImageDSProcessor implements DataSourceProcessor, AutoIngestDataSour this.host = host; try { image = SleuthkitJNI.addImageToDatabase(Case.getCurrentCase().getSleuthkitCase(), - new String[]{imagePath}, sectorSize, timeZone, md5, sha1, sha256, deviceId, this.host); + new String[]{imagePath}, sectorSize, timeZone, md5, sha1, sha256, deviceId, this.host); } catch (TskCoreException ex) { logger.log(Level.SEVERE, "Error adding data source with path " + imagePath + " to database", ex); final List errors = new ArrayList<>(); - errors.add(ex.getMessage()); + errors.add(ex.getMessage()); callback.done(DataSourceProcessorCallback.DataSourceProcessorResult.CRITICAL_ERRORS, errors, new ArrayList<>()); return; } - + doAddImageProcess(deviceId, imagePath, sectorSize, timeZone, ignoreFatOrphanFiles, md5, sha1, sha256, progressMonitor, callback); } - + /** * Adds a data source to the case database using a background task in a * separate thread and the settings provided by the selection and - * configuration panel. Files found during ingest will be sent directly to the - * IngestStream provided. Returns as soon as the background task is started. - * The background task uses a callback object to signal task completion and - * return results. + * configuration panel. Files found during ingest will be sent directly to + * the IngestStream provided. Returns as soon as the background task is + * started. The background task uses a callback object to signal task + * completion and return results. * - * This method should not be called unless isPanelValid returns true, and + * This method should not be called unless isPanelValid returns true, and * should only be called for DSPs that support ingest streams. - * - * @param settings The ingest job settings. - * @param progress Progress monitor that will be used by the - * background task to report progress. - * @param callBack Callback that will be used by the background task - * to return results. + * + * @param settings The ingest job settings. + * @param progress Progress monitor that will be used by the background task + * to report progress. + * @param callBack Callback that will be used by the background task to + * return results. */ @Override - public void runWithIngestStream(IngestJobSettings settings, DataSourceProcessorProgressMonitor progress, + public void runWithIngestStream(IngestJobSettings settings, DataSourceProcessorProgressMonitor progress, DataSourceProcessorCallback callBack) { runWithIngestStream(null, settings, progress, callBack); - } - + } + /** * Adds a data source to the case database using a background task in a * separate thread and the settings provided by the selection and - * configuration panel. Files found during ingest will be sent directly to the - * IngestStream provided. Returns as soon as the background task is started. - * The background task uses a callback object to signal task completion and - * return results. + * configuration panel. Files found during ingest will be sent directly to + * the IngestStream provided. Returns as soon as the background task is + * started. The background task uses a callback object to signal task + * completion and return results. * - * This method should not be called unless isPanelValid returns true, and + * This method should not be called unless isPanelValid returns true, and * should only be called for DSPs that support ingest streams. - * - * @param host The host for this data source. - * @param settings The ingest job settings. - * @param progress Progress monitor that will be used by the - * background task to report progress. - * @param callBack Callback that will be used by the background task - * to return results. + * + * @param host The host for this data source. + * @param settings The ingest job settings. + * @param progress Progress monitor that will be used by the background task + * to report progress. + * @param callBack Callback that will be used by the background task to + * return results. */ @Override - public void runWithIngestStream(Host host, IngestJobSettings settings, DataSourceProcessorProgressMonitor progress, + public void runWithIngestStream(Host host, IngestJobSettings settings, DataSourceProcessorProgressMonitor progress, DataSourceProcessorCallback callBack) { - + // Read the settings from the wizard readConfigSettings(); this.host = host; - + // Set up the data source before creating the ingest stream try { image = SleuthkitJNI.addImageToDatabase(Case.getCurrentCase().getSleuthkitCase(), - new String[]{imagePath}, sectorSize, timeZone, md5, sha1, sha256, deviceId, this.host); + new String[]{imagePath}, sectorSize, timeZone, md5, sha1, sha256, deviceId, this.host); } catch (TskCoreException ex) { logger.log(Level.SEVERE, "Error adding data source with path " + imagePath + " to database", ex); final List errors = new ArrayList<>(); @@ -291,46 +289,43 @@ public class ImageDSProcessor implements DataSourceProcessor, AutoIngestDataSour callBack.done(DataSourceProcessorCallback.DataSourceProcessorResult.CRITICAL_ERRORS, errors, new ArrayList<>()); return; } - doAddImageProcess(deviceId, imagePath, sectorSize, timeZone, ignoreFatOrphanFiles, md5, sha1, sha256, progress, callBack); } - + /** * Store the options from the config panel. */ private void readConfigSettings() { - if (!setDataSourceOptionsCalled) { - configPanel.storeSettings(); - deviceId = UUID.randomUUID().toString(); - imagePath = configPanel.getContentPaths(); - sectorSize = configPanel.getSectorSize(); - timeZone = configPanel.getTimeZone(); - ignoreFatOrphanFiles = configPanel.getNoFatOrphans(); - md5 = configPanel.getMd5(); - if (md5.isEmpty()) { - md5 = null; - } - sha1 = configPanel.getSha1(); - if (sha1.isEmpty()) { - sha1 = null; - } - sha256 = configPanel.getSha256(); - if (sha256.isEmpty()) { - sha256 = null; - } + configPanel.storeSettings(); + deviceId = UUID.randomUUID().toString(); + imagePath = configPanel.getContentPaths(); + sectorSize = configPanel.getSectorSize(); + timeZone = configPanel.getTimeZone(); + ignoreFatOrphanFiles = configPanel.getNoFatOrphans(); + md5 = configPanel.getMd5(); + if (md5.isEmpty()) { + md5 = null; + } + sha1 = configPanel.getSha1(); + if (sha1.isEmpty()) { + sha1 = null; + } + sha256 = configPanel.getSha256(); + if (sha256.isEmpty()) { + sha256 = null; } } - + /** * Check if this DSP supports ingest streams. - * + * * @return True if this DSP supports an ingest stream, false otherwise. */ @Override public boolean supportsIngestStream() { return true; - } + } /** * Adds a data source to the case database using a background task in a @@ -357,11 +352,11 @@ public class ImageDSProcessor implements DataSourceProcessor, AutoIngestDataSour ingestStream = new DefaultIngestStream(); try { image = SleuthkitJNI.addImageToDatabase(Case.getCurrentCase().getSleuthkitCase(), - new String[]{imagePath}, sectorSize, timeZone, "", "", "", deviceId); + new String[]{imagePath}, sectorSize, timeZone, "", "", "", deviceId); } catch (TskCoreException ex) { logger.log(Level.SEVERE, "Error adding data source with path " + imagePath + " to database", ex); final List errors = new ArrayList<>(); - errors.add(ex.getMessage()); + errors.add(ex.getMessage()); callback.done(DataSourceProcessorCallback.DataSourceProcessorResult.CRITICAL_ERRORS, errors, new ArrayList<>()); return; } @@ -375,10 +370,10 @@ public class ImageDSProcessor implements DataSourceProcessor, AutoIngestDataSour * selection and configuration panel. Returns as soon as the background task * is started and uses the callback object to signal task completion and * return results. - * - * The image should be loaded in the database and stored in "image" - * before calling this method. Additionally, an ingest stream should be initialized - * and stored in "ingestStream". + * + * The image should be loaded in the database and stored in "image" before + * calling this method. Additionally, an ingest stream should be initialized + * and stored in "ingestStream". * * @param deviceId An ASCII-printable identifier for the device * associated with the data source that is @@ -400,28 +395,28 @@ public class ImageDSProcessor implements DataSourceProcessor, AutoIngestDataSour */ private void doAddImageProcess(String deviceId, String imagePath, int sectorSize, String timeZone, boolean ignoreFatOrphanFiles, String md5, String sha1, String sha256, DataSourceProcessorProgressMonitor progressMonitor, DataSourceProcessorCallback callback) { - // If the data source or ingest stream haven't been initialized, stop processing - if (ingestStream == null) { - String message = "Ingest stream was not initialized before running the add image process on " + imagePath; - logger.log(Level.SEVERE, message); - final List errors = new ArrayList<>(); - errors.add(message); - callback.done(DataSourceProcessorCallback.DataSourceProcessorResult.CRITICAL_ERRORS, errors, new ArrayList<>()); - return; - } - if (image == null) { - String message = "Image was not added to database before running the add image process on " + imagePath; - logger.log(Level.SEVERE, message); - final List errors = new ArrayList<>(); - errors.add(message); - callback.done(DataSourceProcessorCallback.DataSourceProcessorResult.CRITICAL_ERRORS, errors, new ArrayList<>()); - return; - } + // If the data source or ingest stream haven't been initialized, stop processing + if (ingestStream == null) { + String message = "Ingest stream was not initialized before running the add image process on " + imagePath; + logger.log(Level.SEVERE, message); + final List errors = new ArrayList<>(); + errors.add(message); + callback.done(DataSourceProcessorCallback.DataSourceProcessorResult.CRITICAL_ERRORS, errors, new ArrayList<>()); + return; + } + if (image == null) { + String message = "Image was not added to database before running the add image process on " + imagePath; + logger.log(Level.SEVERE, message); + final List errors = new ArrayList<>(); + errors.add(message); + callback.done(DataSourceProcessorCallback.DataSourceProcessorResult.CRITICAL_ERRORS, errors, new ArrayList<>()); + return; + } - AddImageTask.ImageDetails imageDetails = new AddImageTask.ImageDetails(deviceId, image, sectorSize, timeZone, ignoreFatOrphanFiles, md5, sha1, sha256, null); - addImageTask = new AddImageTask(imageDetails, - progressMonitor, - new StreamingAddDataSourceCallbacks(ingestStream), + AddImageTask.ImageDetails imageDetails = new AddImageTask.ImageDetails(deviceId, image, sectorSize, timeZone, ignoreFatOrphanFiles, md5, sha1, sha256, null); + addImageTask = new AddImageTask(imageDetails, + progressMonitor, + new StreamingAddDataSourceCallbacks(ingestStream), new StreamingAddImageTaskCallback(ingestStream, callback)); new Thread(addImageTask).start(); } @@ -455,7 +450,6 @@ public class ImageDSProcessor implements DataSourceProcessor, AutoIngestDataSour ignoreFatOrphanFiles = false; host = null; configPanel.reset(); - setDataSourceOptionsCalled = false; } private static boolean isAcceptedByFiler(File file, List filters) { @@ -488,56 +482,56 @@ public class ImageDSProcessor implements DataSourceProcessor, AutoIngestDataSour // able to process the data source return 100; } - + @Override public void process(String deviceId, Path dataSourcePath, DataSourceProcessorProgressMonitor progressMonitor, DataSourceProcessorCallback callBack) { process(deviceId, dataSourcePath, null, progressMonitor, callBack); } - + @Override public void process(String deviceId, Path dataSourcePath, Host host, DataSourceProcessorProgressMonitor progressMonitor, DataSourceProcessorCallback callBack) { + // this method does not use the config panel this.deviceId = deviceId; this.imagePath = dataSourcePath.toString(); this.sectorSize = 0; this.timeZone = Calendar.getInstance().getTimeZone().getID(); this.host = host; this.ignoreFatOrphanFiles = false; - setDataSourceOptionsCalled = true; - + ingestStream = new DefaultIngestStream(); try { image = SleuthkitJNI.addImageToDatabase(Case.getCurrentCase().getSleuthkitCase(), - new String[]{imagePath}, sectorSize, timeZone, "", "", "", deviceId, host); + new String[]{imagePath}, sectorSize, timeZone, "", "", "", deviceId, host); } catch (TskCoreException ex) { logger.log(Level.SEVERE, "Error adding data source with path " + imagePath + " to database", ex); final List errors = new ArrayList<>(); - errors.add(ex.getMessage()); + errors.add(ex.getMessage()); callBack.done(DataSourceProcessorCallback.DataSourceProcessorResult.CRITICAL_ERRORS, errors, new ArrayList<>()); return; } - + doAddImageProcess(deviceId, dataSourcePath.toString(), sectorSize, timeZone, ignoreFatOrphanFiles, null, null, null, progressMonitor, callBack); } - + @Override public IngestStream processWithIngestStream(String deviceId, Path dataSourcePath, IngestJobSettings settings, DataSourceProcessorProgressMonitor progressMonitor, DataSourceProcessorCallback callBack) { return processWithIngestStream(deviceId, dataSourcePath, null, settings, progressMonitor, callBack); } - + @Override public IngestStream processWithIngestStream(String deviceId, Path dataSourcePath, Host host, IngestJobSettings settings, DataSourceProcessorProgressMonitor progressMonitor, DataSourceProcessorCallback callBack) { + // this method does not use the config panel this.deviceId = deviceId; this.imagePath = dataSourcePath.toString(); this.sectorSize = 0; this.timeZone = Calendar.getInstance().getTimeZone().getID(); this.host = host; this.ignoreFatOrphanFiles = false; - setDataSourceOptionsCalled = true; - + // Set up the data source before creating the ingest stream try { image = SleuthkitJNI.addImageToDatabase(Case.getCurrentCase().getSleuthkitCase(), - new String[]{imagePath}, sectorSize, timeZone, md5, sha1, sha256, deviceId, host); + new String[]{imagePath}, sectorSize, timeZone, md5, sha1, sha256, deviceId, host); } catch (TskCoreException ex) { logger.log(Level.SEVERE, "Error adding data source with path " + imagePath + " to database", ex); final List errors = new ArrayList<>(); @@ -555,34 +549,10 @@ public class ImageDSProcessor implements DataSourceProcessor, AutoIngestDataSour errors.add(ex.getMessage()); callBack.done(DataSourceProcessorCallback.DataSourceProcessorResult.CRITICAL_ERRORS, errors, new ArrayList<>()); return null; - } - + } + doAddImageProcess(deviceId, dataSourcePath.toString(), sectorSize, timeZone, ignoreFatOrphanFiles, null, null, null, progressMonitor, callBack); + return ingestStream; } - - /** - * Sets the configuration of the data source processor without using the - * selection and configuration panel. - * - * @param imagePath Path to the image file. - * @param timeZone The time zone to use when processing dates - * and times for the image, obtained from - * java.util.TimeZone.getID. - * @param ignoreFatOrphanFiles Whether to parse orphans if the image has a - * FAT filesystem. - * - * @deprecated Use the provided overload of the run method instead. - */ - @Deprecated - public void setDataSourceOptions(String imagePath, String timeZone, boolean ignoreFatOrphanFiles) { - this.deviceId = UUID.randomUUID().toString(); - this.imagePath = imagePath; - this.sectorSize = 0; - this.timeZone = Calendar.getInstance().getTimeZone().getID(); - this.ignoreFatOrphanFiles = ignoreFatOrphanFiles; - this.host = null; - setDataSourceOptionsCalled = true; - } - } diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/LocalDiskDSProcessor.java b/Core/src/org/sleuthkit/autopsy/casemodule/LocalDiskDSProcessor.java index 6cf15c54f7..c659727d74 100644 --- a/Core/src/org/sleuthkit/autopsy/casemodule/LocalDiskDSProcessor.java +++ b/Core/src/org/sleuthkit/autopsy/casemodule/LocalDiskDSProcessor.java @@ -1,7 +1,7 @@ /* * Autopsy Forensic Browser * - * Copyright 2013-2018 Basis Technology Corp. + * Copyright 2013-2021 Basis Technology Corp. * Contact: carrier sleuthkit org * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -19,7 +19,6 @@ package org.sleuthkit.autopsy.casemodule; import java.util.ArrayList; -import java.util.Calendar; import java.util.List; import java.util.UUID; import java.util.logging.Level; @@ -60,7 +59,6 @@ public class LocalDiskDSProcessor implements DataSourceProcessor { private Host host; private ImageWriterSettings imageWriterSettings; private boolean ignoreFatOrphanFiles; - private boolean setDataSourceOptionsCalled; /** * Constructs a local drive data source processor that implements the @@ -139,7 +137,7 @@ public class LocalDiskDSProcessor implements DataSourceProcessor { public void run(DataSourceProcessorProgressMonitor progressMonitor, DataSourceProcessorCallback callback) { run(null, progressMonitor, callback); } - + /** * Adds a data source to the case database using a background task in a * separate thread and the settings provided by the selection and @@ -157,38 +155,36 @@ public class LocalDiskDSProcessor implements DataSourceProcessor { */ @Override public void run(Host host, DataSourceProcessorProgressMonitor progressMonitor, DataSourceProcessorCallback callback) { - if (!setDataSourceOptionsCalled) { - deviceId = UUID.randomUUID().toString(); - drivePath = configPanel.getContentPath(); - sectorSize = configPanel.getSectorSize(); - timeZone = configPanel.getTimeZone(); - ignoreFatOrphanFiles = configPanel.getNoFatOrphans(); - if (configPanel.getImageWriterEnabled()) { - imageWriterSettings = configPanel.getImageWriterSettings(); - } else { - imageWriterSettings = null; - } + deviceId = UUID.randomUUID().toString(); + drivePath = configPanel.getContentPath(); + sectorSize = configPanel.getSectorSize(); + timeZone = configPanel.getTimeZone(); + ignoreFatOrphanFiles = configPanel.getNoFatOrphans(); + if (configPanel.getImageWriterEnabled()) { + imageWriterSettings = configPanel.getImageWriterSettings(); + } else { + imageWriterSettings = null; } - + this.host = host; Image image; try { image = SleuthkitJNI.addImageToDatabase(Case.getCurrentCase().getSleuthkitCase(), - new String[]{drivePath}, sectorSize, - timeZone, null, null, null, deviceId, this.host); + new String[]{drivePath}, sectorSize, + timeZone, null, null, null, deviceId, this.host); } catch (TskCoreException ex) { logger.log(Level.SEVERE, "Error adding local disk with path " + drivePath + " to database", ex); final List errors = new ArrayList<>(); errors.add(ex.getMessage()); callback.done(DataSourceProcessorCallback.DataSourceProcessorResult.CRITICAL_ERRORS, errors, new ArrayList<>()); return; - } + } addDiskTask = new AddImageTask( - new AddImageTask.ImageDetails(deviceId, image, sectorSize, timeZone, ignoreFatOrphanFiles, null, null, null, imageWriterSettings), + new AddImageTask.ImageDetails(deviceId, image, sectorSize, timeZone, ignoreFatOrphanFiles, null, null, null, imageWriterSettings), progressMonitor, - new StreamingAddDataSourceCallbacks(new DefaultIngestStream()), + new StreamingAddDataSourceCallbacks(new DefaultIngestStream()), new StreamingAddImageTaskCallback(new DefaultIngestStream(), callback)); new Thread(addDiskTask).start(); } @@ -244,19 +240,19 @@ public class LocalDiskDSProcessor implements DataSourceProcessor { Image image; try { image = SleuthkitJNI.addImageToDatabase(Case.getCurrentCase().getSleuthkitCase(), - new String[]{drivePath}, sectorSize, - timeZone, null, null, null, deviceId); + new String[]{drivePath}, sectorSize, + timeZone, null, null, null, deviceId); } catch (TskCoreException ex) { logger.log(Level.SEVERE, "Error adding local disk with path " + drivePath + " to database", ex); final List errors = new ArrayList<>(); errors.add(ex.getMessage()); callback.done(DataSourceProcessorCallback.DataSourceProcessorResult.CRITICAL_ERRORS, errors, new ArrayList<>()); return; - } - - addDiskTask = new AddImageTask(new AddImageTask.ImageDetails(deviceId, image, sectorSize, timeZone, ignoreFatOrphanFiles, null, null, null, imageWriterSettings), - progressMonitor, - new StreamingAddDataSourceCallbacks(new DefaultIngestStream()), + } + + addDiskTask = new AddImageTask(new AddImageTask.ImageDetails(deviceId, image, sectorSize, timeZone, ignoreFatOrphanFiles, null, null, null, imageWriterSettings), + progressMonitor, + new StreamingAddDataSourceCallbacks(new DefaultIngestStream()), new StreamingAddImageTaskCallback(new DefaultIngestStream(), callback)); new Thread(addDiskTask).start(); } @@ -285,30 +281,5 @@ public class LocalDiskDSProcessor implements DataSourceProcessor { drivePath = null; timeZone = null; ignoreFatOrphanFiles = false; - setDataSourceOptionsCalled = false; } - - /** - * Sets the configuration of the data source processor without using the - * configuration panel. - * - * @param drivePath Path to the local drive. - * @param timeZone The time zone to use when processing dates - * and times for the local drive, obtained from - * java.util.TimeZone.getID. - * @param ignoreFatOrphanFiles Whether to parse orphans if the image has a - * FAT filesystem. - * - * @deprecated Use the provided overload of the run method instead. - */ - @Deprecated - public void setDataSourceOptions(String drivePath, String timeZone, boolean ignoreFatOrphanFiles) { - this.deviceId = UUID.randomUUID().toString(); - this.drivePath = drivePath; - this.sectorSize = 0; - this.timeZone = Calendar.getInstance().getTimeZone().getID(); - this.ignoreFatOrphanFiles = ignoreFatOrphanFiles; - setDataSourceOptionsCalled = true; - } - } diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/LocalFilesDSProcessor.java b/Core/src/org/sleuthkit/autopsy/casemodule/LocalFilesDSProcessor.java index dab8ea19ec..d75fabbae9 100644 --- a/Core/src/org/sleuthkit/autopsy/casemodule/LocalFilesDSProcessor.java +++ b/Core/src/org/sleuthkit/autopsy/casemodule/LocalFilesDSProcessor.java @@ -1,7 +1,7 @@ /* * Autopsy Forensic Browser * - * Copyright 2011-2018 Basis Technology Corp. + * Copyright 2011-2021 Basis Technology Corp. * Contact: carrier sleuthkit org * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -78,7 +78,6 @@ public class LocalFilesDSProcessor implements DataSourceProcessor, AutoIngestDat * when the deprecated method setDataSourceOptions is removed. */ private List localFilePaths; - private boolean setDataSourceOptionsCalled; /** * Constructs a local/logical files and/or directories data source processor @@ -139,7 +138,7 @@ public class LocalFilesDSProcessor implements DataSourceProcessor, AutoIngestDat return configPanel.validatePanel(); } - /** + /** * Adds a data source to the case database using a background task in a * separate thread and the settings provided by the selection and * configuration panel. Returns as soon as the background task is started. @@ -156,8 +155,8 @@ public class LocalFilesDSProcessor implements DataSourceProcessor, AutoIngestDat @Override public void run(DataSourceProcessorProgressMonitor progressMonitor, DataSourceProcessorCallback callback) { run(null, progressMonitor, callback); - } - + } + /** * Adds a data source to the case database using a background task in a * separate thread and the settings provided by the selection and @@ -175,23 +174,21 @@ public class LocalFilesDSProcessor implements DataSourceProcessor, AutoIngestDat */ @Override public void run(Host host, DataSourceProcessorProgressMonitor progressMonitor, DataSourceProcessorCallback callback) { - if (!setDataSourceOptionsCalled) { - - localFilePaths = configPanel.getContentPaths(); - if (configPanel.subTypeIsLogicalEvidencePanel()) { - try { - //if the L01 option was chosen - localFilePaths = extractLogicalEvidenceFileContents(localFilePaths); - } catch (L01Exception ex) { - //contents of l01 could not be extracted don't add data source or run ingest - final List errors = new ArrayList<>(); - errors.add(ex.getMessage()); - callback.done(DataSourceProcessorCallback.DataSourceProcessorResult.CRITICAL_ERRORS, errors, new ArrayList<>()); - return; - } catch (NoCurrentCaseException ex) { - logger.log(Level.WARNING, "Exception while getting open case.", ex); - return; - } + + localFilePaths = configPanel.getContentPaths(); + if (configPanel.subTypeIsLogicalEvidencePanel()) { + try { + //if the L01 option was chosen + localFilePaths = extractLogicalEvidenceFileContents(localFilePaths); + } catch (L01Exception ex) { + //contents of l01 could not be extracted don't add data source or run ingest + final List errors = new ArrayList<>(); + errors.add(ex.getMessage()); + callback.done(DataSourceProcessorCallback.DataSourceProcessorResult.CRITICAL_ERRORS, errors, new ArrayList<>()); + return; + } catch (NoCurrentCaseException ex) { + logger.log(Level.WARNING, "Exception while getting open case.", ex); + return; } } run(UUID.randomUUID().toString(), configPanel.getFileSetName(), localFilePaths, host, progressMonitor, callback); @@ -220,7 +217,7 @@ public class LocalFilesDSProcessor implements DataSourceProcessor, AutoIngestDat command.add("-f"); command.add("files"); command.add("-t"); - File l01Dir = new File(Case.getCurrentCaseThrows().getModuleDirectory(), L01_EXTRACTION_DIR); + File l01Dir = new File(Case.getCurrentCaseThrows().getModuleDirectory(), L01_EXTRACTION_DIR); if (!l01Dir.exists()) { l01Dir.mkdirs(); } @@ -307,7 +304,7 @@ public class LocalFilesDSProcessor implements DataSourceProcessor, AutoIngestDat return executablePath; } - + /** * Adds a data source to the case database using a background task in a * separate thread and the given settings instead of those provided by the @@ -385,7 +382,6 @@ public class LocalFilesDSProcessor implements DataSourceProcessor, AutoIngestDat public void reset() { configPanel.select(); localFilePaths = null; - setDataSourceOptionsCalled = false; } @Override @@ -421,34 +417,13 @@ public class LocalFilesDSProcessor implements DataSourceProcessor, AutoIngestDat public void process(String deviceId, Path dataSourcePath, DataSourceProcessorProgressMonitor progressMonitor, DataSourceProcessorCallback callBack) { process(deviceId, dataSourcePath, null, progressMonitor, callBack); } - + @Override public void process(String deviceId, Path dataSourcePath, Host host, DataSourceProcessorProgressMonitor progressMonitor, DataSourceProcessorCallback callBack) { List filePaths = Arrays.asList(new String[]{dataSourcePath.toString()}); run(deviceId, "", filePaths, host, progressMonitor, callBack); } - /** - * Sets the configuration of the data source processor without using the - * configuration panel. The data source processor will assign a UUID to the - * data source and will use the time zone of the machine executing this code - * when when processing dates and times for the image. - * - * @param paths A list of local/logical file and/or directory - * localFilePaths. - * - * @deprecated Use the provided overload of the run method instead. - */ - @Deprecated - public void setDataSourceOptions(String paths) { - // The LocalFilesPanel used to separate file paths with a comma and pass - // them as a string, but because file names are allowed to contain - // commas, this approach was buggy and replaced. We now pass a list of - // String paths. - this.localFilePaths = Arrays.asList(paths.split(",")); - setDataSourceOptionsCalled = true; - } - /** * A custom exception for the L01 processing. */ diff --git a/Core/src/org/sleuthkit/autopsy/datasourceprocessors/RawDSProcessor.java b/Core/src/org/sleuthkit/autopsy/datasourceprocessors/RawDSProcessor.java index 7c38dedcf8..61b6df93b6 100644 --- a/Core/src/org/sleuthkit/autopsy/datasourceprocessors/RawDSProcessor.java +++ b/Core/src/org/sleuthkit/autopsy/datasourceprocessors/RawDSProcessor.java @@ -29,7 +29,6 @@ import javax.swing.filechooser.FileFilter; import org.openide.util.NbBundle.Messages; import org.openide.util.lookup.ServiceProvider; import org.openide.util.lookup.ServiceProviders; -import org.sleuthkit.autopsy.casemodule.Case; import org.sleuthkit.autopsy.casemodule.GeneralFilter; import org.sleuthkit.autopsy.corecomponentinterfaces.DataSourceProcessorProgressMonitor; import org.sleuthkit.autopsy.corecomponentinterfaces.DataSourceProcessorCallback; diff --git a/Core/src/org/sleuthkit/autopsy/discovery/ui/DomainSummaryViewer.java b/Core/src/org/sleuthkit/autopsy/discovery/ui/DomainSummaryViewer.java index ef3c7d6ad6..1560b276c1 100644 --- a/Core/src/org/sleuthkit/autopsy/discovery/ui/DomainSummaryViewer.java +++ b/Core/src/org/sleuthkit/autopsy/discovery/ui/DomainSummaryViewer.java @@ -93,16 +93,12 @@ public class DomainSummaryViewer extends javax.swing.JPanel { * reflect the currently selected domain. Will populate the list with * nothing when a domain is not used. * - * @param useDomain If the currently selected domain should be used to - * retrieve a list. */ @ThreadConfined(type = ThreadConfined.ThreadType.AWT) - void sendPopulateEvent(boolean useDomain) { + void sendPopulateEvent() { String domain = ""; - if (useDomain) { - if (domainList.getSelectedIndex() != -1) { - domain = domainListModel.getElementAt(domainList.getSelectedIndex()).getResultDomain().getDomain(); - } + if (domainList.getSelectedIndex() != -1) { + domain = domainListModel.getElementAt(domainList.getSelectedIndex()).getResultDomain().getDomain(); } //send populateMesage DiscoveryEventUtils.getDiscoveryEventBus().post(new DiscoveryEventUtils.PopulateDomainTabsEvent(domain)); diff --git a/Core/src/org/sleuthkit/autopsy/discovery/ui/ResultsPanel.java b/Core/src/org/sleuthkit/autopsy/discovery/ui/ResultsPanel.java index e1219889a8..5cbb632e57 100644 --- a/Core/src/org/sleuthkit/autopsy/discovery/ui/ResultsPanel.java +++ b/Core/src/org/sleuthkit/autopsy/discovery/ui/ResultsPanel.java @@ -128,8 +128,8 @@ final class ResultsPanel extends javax.swing.JPanel { } }); domainSummaryViewer.addListSelectionListener((e) -> { - if (resultType == SearchData.Type.DOMAIN) { - domainSummaryViewer.sendPopulateEvent(!e.getValueIsAdjusting()); + if (resultType == SearchData.Type.DOMAIN && !e.getValueIsAdjusting()) { + domainSummaryViewer.sendPopulateEvent(); } }); } diff --git a/Core/test/unit/src/org/sleuthkit/autopsy/discovery/search/DomainSearchTestUtils.java b/Core/test/unit/src/org/sleuthkit/autopsy/discovery/search/DomainSearchTestUtils.java index b87d0044a2..f6e003c7b0 100755 --- a/Core/test/unit/src/org/sleuthkit/autopsy/discovery/search/DomainSearchTestUtils.java +++ b/Core/test/unit/src/org/sleuthkit/autopsy/discovery/search/DomainSearchTestUtils.java @@ -34,7 +34,7 @@ public class DomainSearchTestUtils { long totalVisits, long visits, long filesDownloaded, long dataSourceId) { Content dataSource = TskMockUtils.getDataSource(dataSourceId); return new ResultDomain(domain, start, end, totalVisits, - visits, filesDownloaded, 0L, dataSource); + visits, filesDownloaded, 0L, "", dataSource); } public static ResultDomain mockDomainResult(String domain) {