diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/AddImageWizardDataSourceSettingsVisual.java b/Core/src/org/sleuthkit/autopsy/casemodule/AddImageWizardDataSourceSettingsVisual.java index d44b3ed522..320a2200f7 100644 --- a/Core/src/org/sleuthkit/autopsy/casemodule/AddImageWizardDataSourceSettingsVisual.java +++ b/Core/src/org/sleuthkit/autopsy/casemodule/AddImageWizardDataSourceSettingsVisual.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"); @@ -33,6 +33,7 @@ import org.openide.util.Lookup; import org.openide.util.NbBundle; import org.sleuthkit.autopsy.corecomponentinterfaces.DataSourceProcessor; import org.sleuthkit.autopsy.coreutils.Logger; +import org.sleuthkit.autopsy.python.JythonModuleLoader; /** * visual component for the first panel of add image wizard. Allows the user to @@ -76,6 +77,14 @@ final class AddImageWizardDataSourceSettingsVisual extends JPanel { logger.log(Level.SEVERE, "discoverDataSourceProcessors(): A DataSourceProcessor already exists for type = {0}", dsProcessor.getDataSourceType()); //NON-NLS } } + + for (DataSourceProcessor dsProcessor : JythonModuleLoader.getDataSourceProcessorModules()) { + if (!datasourceProcessorsMap.containsKey(dsProcessor.getDataSourceType())) { + datasourceProcessorsMap.put(dsProcessor.getDataSourceType(), dsProcessor); + } else { + logger.log(Level.SEVERE, "discoverDataSourceProcessors(): A DataSourceProcessor already exists for type = {0}", dsProcessor.getDataSourceType()); //NON-NLS + } + } } /** diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/AddImageWizardSelectDspVisual.java b/Core/src/org/sleuthkit/autopsy/casemodule/AddImageWizardSelectDspVisual.java index acad42a56b..bfcac9d78e 100644 --- a/Core/src/org/sleuthkit/autopsy/casemodule/AddImageWizardSelectDspVisual.java +++ b/Core/src/org/sleuthkit/autopsy/casemodule/AddImageWizardSelectDspVisual.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"); @@ -42,6 +42,7 @@ import org.sleuthkit.autopsy.corecomponentinterfaces.DataSourceProcessor; import org.sleuthkit.autopsy.coreutils.Logger; import org.sleuthkit.autopsy.datasourceprocessors.RawDSProcessor; import org.sleuthkit.autopsy.logicalimager.dsp.LogicalImagerDSProcessor; +import org.sleuthkit.autopsy.python.JythonModuleLoader; /** * Panel which displays the available DataSourceProcessors and allows selection @@ -196,6 +197,15 @@ final class AddImageWizardSelectDspVisual extends JPanel { logger.log(Level.SEVERE, "discoverDataSourceProcessors(): A DataSourceProcessor already exists for type = {0}", dsProcessor.getDataSourceType()); //NON-NLS } } + + for (DataSourceProcessor dsProcessor : JythonModuleLoader.getDataSourceProcessorModules()) { + if (!datasourceProcessorsMap.containsKey(dsProcessor.getDataSourceType())) { + datasourceProcessorsMap.put(dsProcessor.getDataSourceType(), dsProcessor); + } else { + logger.log(Level.SEVERE, "discoverDataSourceProcessors(): A DataSourceProcessor already exists for type = {0}", dsProcessor.getDataSourceType()); //NON-NLS + } + } + dspList.add(ImageDSProcessor.getType()); dspList.add(LocalDiskDSProcessor.getType()); dspList.add(LocalFilesDSProcessor.getType()); diff --git a/Core/src/org/sleuthkit/autopsy/core/Installer.java b/Core/src/org/sleuthkit/autopsy/core/Installer.java index ce30e56526..095cb7c6ff 100644 --- a/Core/src/org/sleuthkit/autopsy/core/Installer.java +++ b/Core/src/org/sleuthkit/autopsy/core/Installer.java @@ -407,6 +407,7 @@ public class Installer extends ModuleInstall { try { JythonModuleLoader.getIngestModuleFactories(); JythonModuleLoader.getGeneralReportModules(); + JythonModuleLoader.getDataSourceProcessorModules(); } catch (Exception ex) { // This is a firewall exception to ensure that any possible exception caused // by this initial load of the Jython modules are caught and logged. diff --git a/Core/src/org/sleuthkit/autopsy/datasourceprocessors/DataSourceProcessorAdapter.java b/Core/src/org/sleuthkit/autopsy/datasourceprocessors/DataSourceProcessorAdapter.java new file mode 100644 index 0000000000..d0991eb9a6 --- /dev/null +++ b/Core/src/org/sleuthkit/autopsy/datasourceprocessors/DataSourceProcessorAdapter.java @@ -0,0 +1,51 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2014-2022 Basis Technology Corp. + * Contact: carrier sleuthkit org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.sleuthkit.autopsy.datasourceprocessors; + +import javax.swing.JPanel; + +import org.sleuthkit.autopsy.corecomponentinterfaces.DataSourceProcessor; +import org.sleuthkit.autopsy.corecomponentinterfaces.DataSourceProcessorCallback; +import org.sleuthkit.autopsy.corecomponentinterfaces.DataSourceProcessorProgressMonitor; + +import org.sleuthkit.datamodel.Host; + +/** + * An adapter that provides no-op implementations of various DataSourceProcessor + * methods. + */ + +public abstract class DataSourceProcessorAdapter implements DataSourceProcessor { + @Override + public abstract String getDataSourceType(); + + @Override + public JPanel getPanel() { + return null; + } + + @Override + public boolean isPanelValid() { + return false; + } + + @Override + public void run(Host host, DataSourceProcessorProgressMonitor progressMonitor, DataSourceProcessorCallback callback) { + } +} diff --git a/Core/src/org/sleuthkit/autopsy/python/JythonModuleLoader.java b/Core/src/org/sleuthkit/autopsy/python/JythonModuleLoader.java index beb3e71207..00de5a6657 100644 --- a/Core/src/org/sleuthkit/autopsy/python/JythonModuleLoader.java +++ b/Core/src/org/sleuthkit/autopsy/python/JythonModuleLoader.java @@ -1,7 +1,7 @@ /* * Autopsy Forensic Browser * - * Copyright 2014 Basis Technology Corp. + * Copyright 2014-2020 Basis Technology Corp. * Contact: carrier sleuthkit org * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -41,6 +41,7 @@ import org.sleuthkit.autopsy.coreutils.MessageNotifyUtil; import org.sleuthkit.autopsy.coreutils.PlatformUtil; import org.sleuthkit.autopsy.ingest.IngestModuleFactory; import org.sleuthkit.autopsy.report.GeneralReportModule; +import org.sleuthkit.autopsy.corecomponentinterfaces.DataSourceProcessor; import java.io.BufferedReader; import java.io.FileReader; import java.util.Comparator; @@ -72,6 +73,17 @@ public final class JythonModuleLoader { public static synchronized List getGeneralReportModules() { return getInterfaceImplementations(new GeneralReportModuleDefFilter(), GeneralReportModule.class); } + + /** + * Get data source processors modules implemented using Jython. + * + * @return A list of objects that implement the DataSourceProcessor + * interface. + */ + public static synchronized List getDataSourceProcessorModules() { + return getInterfaceImplementations(new DataSourceProcessorDefFilter(), DataSourceProcessor.class); + } + @Messages({"JythonModuleLoader.pythonInterpreterError.title=Python Modules", "JythonModuleLoader.pythonInterpreterError.msg=Failed to load python modules, See log for more details"}) private static List getInterfaceImplementations(LineFilter filter, Class interfaceClass) { @@ -169,6 +181,9 @@ public final class JythonModuleLoader { boolean accept(String line); } + /** + * Filter IngestModule interface implementations + */ private static class IngestModuleFactoryDefFilter implements LineFilter { @Override @@ -177,6 +192,9 @@ public final class JythonModuleLoader { } } + /** + * Filter GeneralReportModule interface implementations + */ private static class GeneralReportModuleDefFilter implements LineFilter { @Override @@ -184,4 +202,15 @@ public final class JythonModuleLoader { return (line.contains("GeneralReportModuleAdapter") || line.contains("GeneralReportModule")); //NON-NLS } } + + /** + * Filter DataSourceProcessor interface implementations + */ + private static class DataSourceProcessorDefFilter implements LineFilter { + + @Override + public boolean accept(String line) { + return (line.contains("DataSourceProcessorAdapter") || line.contains("DataSourceProcessor")); //NON-NLS + } + } }