diff --git a/Core/autopsy-updates.xml b/Core/autopsy-updates.xml
new file mode 100644
index 0000000000..48a2898d70
--- /dev/null
+++ b/Core/autopsy-updates.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+ Visit http://sleuthkit.org/autopsy to download the latest version of Autopsy.
+
+
+
+
+
\ No newline at end of file
diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/AddImageAction.java b/Core/src/org/sleuthkit/autopsy/casemodule/AddImageAction.java
index cdfb561ae0..469b600ac2 100644
--- a/Core/src/org/sleuthkit/autopsy/casemodule/AddImageAction.java
+++ b/Core/src/org/sleuthkit/autopsy/casemodule/AddImageAction.java
@@ -19,6 +19,7 @@
package org.sleuthkit.autopsy.casemodule;
+import org.sleuthkit.autopsy.ingest.IngestConfigurator;
import java.awt.Component;
import java.awt.Dialog;
import java.awt.event.ActionEvent;
diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/AddImageWizardPanel3.java b/Core/src/org/sleuthkit/autopsy/casemodule/AddImageWizardPanel3.java
index 98aa035b8a..f8d2529fbf 100644
--- a/Core/src/org/sleuthkit/autopsy/casemodule/AddImageWizardPanel3.java
+++ b/Core/src/org/sleuthkit/autopsy/casemodule/AddImageWizardPanel3.java
@@ -18,6 +18,7 @@
*/
package org.sleuthkit.autopsy.casemodule;
+import org.sleuthkit.autopsy.ingest.IngestConfigurator;
import java.awt.Color;
import java.awt.Component;
import java.awt.EventQueue;
@@ -28,6 +29,7 @@ import java.util.Collections;
import java.util.List;
import java.util.logging.Level;
import javax.swing.JButton;
+import javax.swing.JOptionPane;
import javax.swing.JProgressBar;
import javax.swing.SwingUtilities;
import javax.swing.SwingWorker;
@@ -39,6 +41,7 @@ import org.sleuthkit.autopsy.casemodule.ContentTypePanel.ContentType;
import org.sleuthkit.autopsy.casemodule.services.FileManager;
import org.sleuthkit.autopsy.coreutils.Logger;
import org.sleuthkit.autopsy.coreutils.PlatformUtil;
+import org.sleuthkit.autopsy.ingest.IngestDialog;
import org.sleuthkit.datamodel.AbstractFile;
import org.sleuthkit.datamodel.Content;
import org.sleuthkit.datamodel.Image;
@@ -86,7 +89,14 @@ class AddImageWizardPanel3 implements WizardDescriptor.Panel {
this.action = action;
this.wizPanel = wizPanel;
ingestConfig = Lookup.getDefault().lookup(IngestConfigurator.class);
- ingestConfig.setContext(AddImageWizardPanel3.class.getCanonicalName());
+ List messages = ingestConfig.setContext(AddImageWizardPanel3.class.getCanonicalName());
+ if (messages.isEmpty() == false) {
+ StringBuilder warning = new StringBuilder();
+ for (String message : messages) {
+ warning.append(message).append("\n");
+ }
+ JOptionPane.showMessageDialog(null, warning.toString());
+ }
}
/**
diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/IngestConfigurator.java b/Core/src/org/sleuthkit/autopsy/casemodule/IngestConfigurator.java
deleted file mode 100644
index 3b585b2167..0000000000
--- a/Core/src/org/sleuthkit/autopsy/casemodule/IngestConfigurator.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Autopsy Forensic Browser
- *
- * Copyright 2011-2013 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.casemodule;
-
-import java.util.List;
-import javax.swing.JPanel;
-import org.sleuthkit.datamodel.Content;
-
-/**
- * Lookup interface for ingest configuration dialog
- */
-public interface IngestConfigurator {
- /**
- * get JPanel container with the configurator
- * @return
- */
- JPanel getIngestConfigPanel();
-
- /**
- * set input Content to be configured for ingest
- * @param inputContent content to be configured for ingest
- */
- void setContent(List inputContent);
-
- /**
- * start ingest enqueing previously set image
- */
- void start();
-
- /**
- * save configuration of lastly selected service
- */
- void save();
-
- /**
- * reload the simple panel
- */
- void reload();
-
- /**
- * find out if ingest is currently running
- *
- * @return true if ingest process is running, false otherwise
- */
- boolean isIngestRunning();
-
- /**
- * Set the context for the configuration.
- * @param context
- */
- public void setContext(String context);
-
-}
diff --git a/Core/src/org/sleuthkit/autopsy/core/Bundle.properties b/Core/src/org/sleuthkit/autopsy/core/Bundle.properties
index b049fd4d82..1bc91ef607 100644
--- a/Core/src/org/sleuthkit/autopsy/core/Bundle.properties
+++ b/Core/src/org/sleuthkit/autopsy/core/Bundle.properties
@@ -8,3 +8,5 @@ OpenIDE-Module-Long-Description=\
For more information, see http://www.sleuthkit.org/autopsy/
OpenIDE-Module-Name=Autopsy-Core
OpenIDE-Module-Short-Description=Autopsy Core Module
+org_sleuthkit_autopsy_core_update_center=http://sleuthkit.org/autopsy/updates.xml
+Services/AutoupdateType/org_sleuthkit_autopsy_core_update_center.settings=Autopsy Update Center
diff --git a/Core/src/org/sleuthkit/autopsy/core/layer.xml b/Core/src/org/sleuthkit/autopsy/core/layer.xml
index 3b5b8b481e..f43b8285d6 100644
--- a/Core/src/org/sleuthkit/autopsy/core/layer.xml
+++ b/Core/src/org/sleuthkit/autopsy/core/layer.xml
@@ -270,6 +270,13 @@
Services
====================================================== -->
+
+
+
+
+
+
+
diff --git a/Core/src/org/sleuthkit/autopsy/core/org_sleuthkit_autopsy_core_update_centerSettings.xml b/Core/src/org/sleuthkit/autopsy/core/org_sleuthkit_autopsy_core_update_centerSettings.xml
new file mode 100644
index 0000000000..c1dbc1e41e
--- /dev/null
+++ b/Core/src/org/sleuthkit/autopsy/core/org_sleuthkit_autopsy_core_update_centerSettings.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/GeneralIngestConfigurator.java b/Core/src/org/sleuthkit/autopsy/ingest/GeneralIngestConfigurator.java
similarity index 55%
rename from Core/src/org/sleuthkit/autopsy/casemodule/GeneralIngestConfigurator.java
rename to Core/src/org/sleuthkit/autopsy/ingest/GeneralIngestConfigurator.java
index ba486f33a6..696fe12d02 100644
--- a/Core/src/org/sleuthkit/autopsy/casemodule/GeneralIngestConfigurator.java
+++ b/Core/src/org/sleuthkit/autopsy/ingest/GeneralIngestConfigurator.java
@@ -16,8 +16,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-
-package org.sleuthkit.autopsy.casemodule;
+package org.sleuthkit.autopsy.ingest;
import java.util.ArrayList;
import java.util.List;
@@ -25,87 +24,103 @@ import javax.swing.JPanel;
import org.openide.util.lookup.ServiceProvider;
import org.sleuthkit.autopsy.coreutils.ModuleSettings;
import org.sleuthkit.autopsy.ingest.IngestDialogPanel;
-import static org.sleuthkit.autopsy.ingest.IngestDialogPanel.DISABLED_MOD;
-import static org.sleuthkit.autopsy.ingest.IngestDialogPanel.PARSE_UNALLOC;
import org.sleuthkit.autopsy.ingest.IngestManager;
import org.sleuthkit.autopsy.ingest.IngestModuleAbstract;
import org.sleuthkit.datamodel.Content;
@ServiceProvider(service = IngestConfigurator.class)
-public class GeneralIngestConfigurator implements IngestConfigurator {
+public class GeneralIngestConfigurator implements IngestConfigurator {
+
+ public static final String ENABLED_INGEST_MODULES_KEY = "Enabled_Ingest_Modules";
+ public static final String PARSE_UNALLOC_SPACE_KEY = "Process_Unallocated_Space";
private List contentToIngest;
private IngestManager manager;
private IngestDialogPanel ingestDialogPanel;
private String moduleContext;
public GeneralIngestConfigurator() {
- this.moduleContext = IngestManager.MODULE_PROPERTIES; // Hard-code this for now.
+ this.moduleContext = IngestManager.MODULE_PROPERTIES;
ingestDialogPanel = new IngestDialogPanel();
ingestDialogPanel.setContext(moduleContext);
manager = IngestManager.getDefault();
- loadSettings();
}
@Override
- public void setContext(String context) {
+ public List setContext(String context) {
moduleContext = context;
ingestDialogPanel.setContext(moduleContext);
- reload();
+ return loadSettingsForContext();
}
+
+ private List loadSettingsForContext() {
+ List messages = new ArrayList<>();
+
+ // If there is no enabled ingest modules setting for this user, default to enabling all
+ // of the ingest modules the IngestManager has loaded.
+ if (ModuleSettings.settingExists(moduleContext, ENABLED_INGEST_MODULES_KEY) == false) {
+ String defaultSetting = moduleListToCsv(IngestManager.getDefault().enumerateAllModules());
+ ModuleSettings.setConfigSetting(moduleContext, ENABLED_INGEST_MODULES_KEY, defaultSetting);
+ }
+
+ // Get the enabled ingest modules setting, check for missing modules, and pass the setting to
+ // the UI component.
+ List allModules = IngestManager.getDefault().enumerateAllModules();
+ String[] enabledModuleNames = ModuleSettings.getConfigSetting(moduleContext, ENABLED_INGEST_MODULES_KEY).split(", ");
+ List enabledModules = new ArrayList<>();
+ for (String moduleName : enabledModuleNames) {
+ IngestModuleAbstract moduleFound = null;
+ for (IngestModuleAbstract module : allModules) {
+ if (moduleName.equals(module.getName())) {
+ moduleFound = module;
+ break;
+ }
+ }
+ if (moduleFound != null) {
+ enabledModules.add(moduleFound);
+ }
+ else {
+ messages.add("Unable to load " + moduleName + " module");
+ }
+ }
+ ingestDialogPanel.setEnabledIngestModules(enabledModules);
+
+ // If there is no process unallocated space flag setting, default it to false.
+ if (ModuleSettings.settingExists(moduleContext, PARSE_UNALLOC_SPACE_KEY) == false) {
+ ModuleSettings.setConfigSetting(moduleContext, PARSE_UNALLOC_SPACE_KEY, "false");
+ }
+
+ // Get the process unallocated space flag setting and pass it to the UI component.
+ boolean processUnalloc = Boolean.parseBoolean(ModuleSettings.getConfigSetting(moduleContext, PARSE_UNALLOC_SPACE_KEY));
+ ingestDialogPanel.setProcessUnallocSpaceEnabled(processUnalloc);
+
+ return messages;
+ }
+
+ @Override
+ public JPanel getIngestConfigPanel() {
+ // Note that this panel allows for selecting modules for the ingest process,
+ // specifying the process unallocated space flag, and also specifying settings
+ // for a selected ingest module.
+ return ingestDialogPanel;
+ }
@Override
- public JPanel getIngestConfigPanel() {
- return ingestDialogPanel;
- }
-
- @Override
- public void setContent(List inputContent) {
- this.contentToIngest = inputContent;
- }
-
- @Override
- public void start() {
- // Get the list of ingest modules selected by the user.
- List modulesToStart = ingestDialogPanel.getModulesToStart();
+ public void save() {
+ // Save the user's configuration of the set of enabled ingest modules.
+ String enabledModulesCsvList = moduleListToCsv(ingestDialogPanel.getModulesToStart());
+ ModuleSettings.setConfigSetting(moduleContext, ENABLED_INGEST_MODULES_KEY, enabledModulesCsvList);
- // Get the user's selection of whether or not to process unallocated space.
- manager.setProcessUnallocSpace(ingestDialogPanel.processUnallocSpaceEnabled());
-
- // Start the ingest.
- if (!modulesToStart.isEmpty()) {
- manager.execute(modulesToStart, contentToIngest);
- }
- }
-
- @Override
- public void save() {
- // Save the user's configuration of the currently selected module.
+ // Save the user's setting for the process unallocated space flag.
+ String processUnalloc = Boolean.toString(ingestDialogPanel.processUnallocSpaceEnabled());
+ ModuleSettings.setConfigSetting(moduleContext, PARSE_UNALLOC_SPACE_KEY, processUnalloc);
+
+ // Save the user's configuration of the currently selected ingest module.
IngestModuleAbstract currentModule = ingestDialogPanel.getCurrentIngestModule();
if (currentModule != null && currentModule.hasSimpleConfiguration()) {
currentModule.saveSimpleConfiguration();
- }
-
- // Create a list of the modules the user wants to be disabled.
- List disabledModules = IngestManager.getDefault().enumerateAllModules();
- disabledModules.removeAll(ingestDialogPanel.getModulesToStart());
- String disabledModulesCsv = moduleListToCsv(disabledModules);
-
- // Save the user's general ingest configuration.
- ModuleSettings.setConfigSetting(moduleContext, DISABLED_MOD, disabledModulesCsv);
- String processUnalloc = Boolean.toString(ingestDialogPanel.processUnallocSpaceEnabled());
- ModuleSettings.setConfigSetting(moduleContext, PARSE_UNALLOC, processUnalloc);
+ }
}
- @Override
- public void reload() {
- loadSettings();
- }
-
- @Override
- public boolean isIngestRunning() {
- return manager.isIngestRunning();
- }
-
private static String moduleListToCsv(List lst) {
if (lst == null || lst.isEmpty()) {
return "";
@@ -121,39 +136,28 @@ public class GeneralIngestConfigurator implements IngestConfigurator {
return sb.toString();
}
-
- private static List csvToModuleList(String csv) {
- List modules = new ArrayList<>();
- if (csv == null || csv.isEmpty()) {
- return modules;
- }
-
- String[] moduleNames = csv.split(", ");
- List allModules = IngestManager.getDefault().enumerateAllModules();
- for (String moduleName : moduleNames) {
- for (IngestModuleAbstract module : allModules) {
- if (moduleName.equals(module.getName())) {
- modules.add(module);
- break;
- }
- }
- }
-
- return modules;
+ @Override
+ public void setContent(List inputContent) {
+ this.contentToIngest = inputContent;
}
- private void loadSettings() {
- // get the csv list of disabled modules
- String disabledModulesCsv = ModuleSettings.getConfigSetting(moduleContext, DISABLED_MOD);
+ @Override
+ public void start() {
+ // Get the list of ingest modules selected by the user.
+ List modulesToStart = ingestDialogPanel.getModulesToStart();
- // create a list of modules from it
- List disabledModules = csvToModuleList(disabledModulesCsv);
-
- // tell the ingestDialogPanel to unselect these modules
- ingestDialogPanel.setDisabledModules(disabledModules);
-
- boolean processUnalloc = Boolean.parseBoolean(ModuleSettings.getConfigSetting(moduleContext, PARSE_UNALLOC));
- ingestDialogPanel.setProcessUnallocSpaceEnabled(processUnalloc);
+ // Get the user's selection of whether or not to process unallocated space.
+ manager.setProcessUnallocSpace(ingestDialogPanel.processUnallocSpaceEnabled());
+
+ if (!modulesToStart.isEmpty() && contentToIngest != null) {
+ // Queue the ingest process.
+ manager.execute(modulesToStart, contentToIngest);
+ }
}
+
+ @Override
+ public boolean isIngestRunning() {
+ return manager.isIngestRunning();
+ }
}
diff --git a/Core/src/org/sleuthkit/autopsy/ingest/IngestConfigurator.java b/Core/src/org/sleuthkit/autopsy/ingest/IngestConfigurator.java
new file mode 100644
index 0000000000..94ef6924b9
--- /dev/null
+++ b/Core/src/org/sleuthkit/autopsy/ingest/IngestConfigurator.java
@@ -0,0 +1,84 @@
+/*
+ * Autopsy Forensic Browser
+ *
+ * Copyright 2011-2013 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.ingest;
+
+import java.util.List;
+import javax.swing.JPanel;
+import org.sleuthkit.datamodel.Content;
+
+/**
+ * Instances of this class provide the following services:
+ * 1. A way to save and load the ingest process configuration settings for a
+ * given ingest process context.
+ * 2. A UI component for configuring ingest process settings.
+ * 3. A way to specify input content and start the ingest process for a
+ * given ingest process context.
+ */
+// @@@ This interface needs to be re-designed. An interface for allowing the
+// authors of ingest modules to expose context sensitive module configuration
+// settings needs to be provided; there also needs to be a way for users to
+// configure the ingest process that uses those modules. These are separate
+// concerns; likewise, kicking off an ingest process for particular content in
+// a particular context is a separate concern.
+public interface IngestConfigurator {
+ /**
+ * Specifies the ingest process context for the purpose of choosing, saving,
+ * and loading ingest process configuration settings; also determines what
+ * configuration settings will be in effect if the setContent() and start()
+ * methods are called to start the ingest process for some content specified
+ * using the setContent() method.
+ * @return A list, possibly empty, of messages describing errors that
+ * occurred when loading the configuration settings.
+ */
+ public List setContext(String contextName);
+
+ /**
+ * Provides a UI component for choosing ingest process configuration
+ * settings for the ingest process context specified using the setContext()
+ * method.
+ */
+ JPanel getIngestConfigPanel();
+
+ /**
+ * Saves the ingest process configuration settings for the ingest process
+ * context specified using the setContext() method.
+ */
+ void save();
+
+ /**
+ * Sets the input content for an ingest process prior to calling start() to
+ * run the process using the process configuration settings for the context
+ * specified using setContext().
+ */
+ void setContent(List inputContent);
+
+ /**
+ * Starts (queues) the ingest process for the content specified using the
+ * setContent() method, using the configuration settings corresponding to
+ * the ingest process context specified using the setContext() method.
+ */
+ void start();
+
+ /**
+ * Returns true if any ingest process is running, false otherwise.
+ * Note that the running process may or may not be the process started
+ * (queued) by an invocation of the start() method.
+ */
+ boolean isIngestRunning();
+}
diff --git a/Core/src/org/sleuthkit/autopsy/ingest/IngestDialog.java b/Core/src/org/sleuthkit/autopsy/ingest/IngestDialog.java
index 5305700839..fb68c15a5e 100644
--- a/Core/src/org/sleuthkit/autopsy/ingest/IngestDialog.java
+++ b/Core/src/org/sleuthkit/autopsy/ingest/IngestDialog.java
@@ -30,11 +30,9 @@ import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
+import javax.swing.JOptionPane;
import javax.swing.JPanel;
-import org.openide.util.Lookup;
-import org.sleuthkit.autopsy.casemodule.GeneralIngestConfigurator;
import org.sleuthkit.datamodel.Content;
-import org.sleuthkit.autopsy.casemodule.IngestConfigurator;
/**
* Dialog box that allows ingest modules to be run on an image.
@@ -49,8 +47,14 @@ public class IngestDialog extends JDialog {
public IngestDialog(JFrame frame, String title, boolean modal) {
super(frame, title, modal);
ingestConfigurator = new GeneralIngestConfigurator();
- ingestConfigurator.setContext(IngestDialog.class.getCanonicalName());
- ingestConfigurator.reload();
+ List messages = ingestConfigurator.setContext(IngestDialog.class.getCanonicalName());
+ if (messages.isEmpty() == false) {
+ StringBuilder warning = new StringBuilder();
+ for (String message : messages) {
+ warning.append(message).append("\n");
+ }
+ JOptionPane.showMessageDialog(null, warning.toString());
+ }
}
public IngestDialog(){
diff --git a/Core/src/org/sleuthkit/autopsy/ingest/IngestDialogPanel.java b/Core/src/org/sleuthkit/autopsy/ingest/IngestDialogPanel.java
index b5308da4ce..331c727576 100644
--- a/Core/src/org/sleuthkit/autopsy/ingest/IngestDialogPanel.java
+++ b/Core/src/org/sleuthkit/autopsy/ingest/IngestDialogPanel.java
@@ -44,8 +44,6 @@ public class IngestDialogPanel extends javax.swing.JPanel {
private IngestModuleAbstract currentModule;
private ModulesTableModel tableModel;
- public static final String DISABLED_MOD = "Disabled_Ingest_Modules";
- public static final String PARSE_UNALLOC = "Process_Unallocated_Space";
private String context;
/**
@@ -123,8 +121,8 @@ public class IngestDialogPanel extends javax.swing.JPanel {
processUnallocCheckbox.setSelected(enabled);
}
- public void setDisabledModules(List disabledModules) {
- tableModel.setUnselectedModules(disabledModules);
+ public void setEnabledIngestModules(List enabledModules) {
+ tableModel.setSelectedModules(enabledModules);
}
/**
@@ -407,7 +405,7 @@ public class IngestDialogPanel extends javax.swing.JPanel {
}
/**
- * Custom cell renderer for tooltips with module description
+ * Custom cell renderer for tool tips with module description
*/
private class ModulesTableRenderer extends DefaultTableCellRenderer {
diff --git a/Timeline/build.xml b/Timeline/build.xml
index 0b43f629cf..15db18b5b7 100644
--- a/Timeline/build.xml
+++ b/Timeline/build.xml
@@ -28,6 +28,6 @@
-
+