");
detailsSb.append(db.getName());
detailsSb.append(" | ");
@@ -141,6 +148,8 @@ public class HashDbIngestService implements IngestServiceFsContent {
detailsSb.append("");
managerProxy.postMessage(IngestMessage.createMessage(++messageId, IngestMessage.MessageType.INFO, this, "Hash Ingest Complete", detailsSb.toString()));
+
+ HashDbMgmtPanel.getDefault().setIngestRunning(false);
}
/**
@@ -149,6 +158,7 @@ public class HashDbIngestService implements IngestServiceFsContent {
@Override
public void stop() {
//manager.postMessage(IngestMessage.createMessage(++messageId, IngestMessage.MessageType.INFO, this, "STOP"));
+ HashDbMgmtPanel.getDefault().setIngestRunning(false);
}
/**
@@ -184,46 +194,24 @@ public class HashDbIngestService implements IngestServiceFsContent {
String name = fsContent.getName();
try {
String md5Hash = Hash.calculateMd5(fsContent);
- Map results = skCase.lookupMd5(md5Hash);
- for (Map.Entry entry : results.entrySet()) {
- String hashSetName = entry.getKey();
- TskData.FileKnown status = entry.getValue();
- boolean changed = skCase.setKnown(fsContent, status);
+ TskData.FileKnown status = TskData.FileKnown.UKNOWN;
+ boolean foundBad = false;
+ for (Map.Entry entry : knownBadSets.entrySet()) {
+ status = skCase.knownBadLookupMd5(md5Hash, entry.getKey());
if (status.equals(TskData.FileKnown.BAD)) {
+ foundBad = true;
count += 1;
- BlackboardArtifact badFile = fsContent.newArtifact(ARTIFACT_TYPE.TSK_HASHSET_HIT);
- BlackboardAttribute att2 = new BlackboardAttribute(ATTRIBUTE_TYPE.TSK_HASHSET_NAME.getTypeID(), MODULE_NAME, "Known Bad", hashSetName);
- badFile.addAttribute(att2);
- BlackboardAttribute att3 = new BlackboardAttribute(ATTRIBUTE_TYPE.TSK_HASH_MD5.getTypeID(), MODULE_NAME, "", md5Hash);
- badFile.addAttribute(att3);
- StringBuilder detailsSb = new StringBuilder();
- //details
- detailsSb.append("");
- //hit
- detailsSb.append("");
- detailsSb.append("File Name | ");
- detailsSb.append("").append(name).append(" | ");
- detailsSb.append(" ");
-
- detailsSb.append("");
- detailsSb.append("MD5 Hash | ");
- detailsSb.append("").append(md5Hash).append(" | ");
- detailsSb.append(" ");
-
- detailsSb.append("");
- detailsSb.append("Hashset Name | ");
- detailsSb.append("").append(hashSetName).append(" | ");
- detailsSb.append(" ");
-
- detailsSb.append(" ");
-
- managerProxy.postMessage(IngestMessage.createDataMessage(++messageId, this, "Notable: " + name, detailsSb.toString(), name + md5Hash, badFile));
- IngestManager.fireServiceDataEvent(new ServiceDataEvent(MODULE_NAME, ARTIFACT_TYPE.TSK_HASHSET_HIT, Collections.singletonList(badFile)));
- ret = ProcessResult.OK;
- } else if (status.equals(TskData.FileKnown.KNOWN)) {
+ skCase.setKnown(fsContent, status);
+ String hashSetName = entry.getValue().getName();
+ processBadFile(fsContent, md5Hash, hashSetName);
+ }
+ ret = ProcessResult.OK;
+ }
+ if(!foundBad) {
+ status = skCase.nsrlLookupMd5(md5Hash);
+ if (status.equals(TskData.FileKnown.KNOWN)) {
+ skCase.setKnown(fsContent, status);
ret = ProcessResult.COND_STOP;
- } else {
- ret = ProcessResult.OK;
}
}
} catch (TskException ex) {
@@ -283,4 +271,44 @@ public class HashDbIngestService implements IngestServiceFsContent {
public void saveSimpleConfiguration() {
}
+ private void processBadFile(FsContent fsContent, String md5Hash, String hashSetName) {
+ try {
+ BlackboardArtifact badFile = fsContent.newArtifact(ARTIFACT_TYPE.TSK_HASHSET_HIT);
+ BlackboardAttribute att2 = new BlackboardAttribute(ATTRIBUTE_TYPE.TSK_HASHSET_NAME.getTypeID(), MODULE_NAME, "Known Bad", hashSetName);
+ badFile.addAttribute(att2);
+ BlackboardAttribute att3 = new BlackboardAttribute(ATTRIBUTE_TYPE.TSK_HASH_MD5.getTypeID(), MODULE_NAME, "", md5Hash);
+ badFile.addAttribute(att3);
+ StringBuilder detailsSb = new StringBuilder();
+ //details
+ detailsSb.append("");
+ //hit
+ detailsSb.append("");
+ detailsSb.append("File Name | ");
+ detailsSb.append("").append(fsContent.getName()).append(" | ");
+ detailsSb.append(" ");
+
+ detailsSb.append("");
+ detailsSb.append("MD5 Hash | ");
+ detailsSb.append("").append(md5Hash).append(" | ");
+ detailsSb.append(" ");
+
+ detailsSb.append("");
+ detailsSb.append("Hashset Name | ");
+ detailsSb.append("").append(hashSetName).append(" | ");
+ detailsSb.append(" ");
+
+ detailsSb.append(" ");
+
+ managerProxy.postMessage(IngestMessage.createDataMessage(++messageId, this,
+ "Notable: " + fsContent.getName(),
+ detailsSb.toString(),
+ fsContent.getName() + md5Hash,
+ badFile));
+ IngestManager.fireServiceDataEvent(new ServiceDataEvent(MODULE_NAME, ARTIFACT_TYPE.TSK_HASHSET_HIT, Collections.singletonList(badFile)));
+ } catch (TskException ex) {
+ logger.log(Level.WARNING, "Error creating blackboard artifact", ex);
+ }
+
+ }
+
}
diff --git a/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashDbMgmtAction.java b/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashDbMgmtAction.java
index 0a1f238d06..cd134795e3 100644
--- a/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashDbMgmtAction.java
+++ b/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashDbMgmtAction.java
@@ -20,10 +20,6 @@ package org.sleuthkit.autopsy.hashdatabase;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
-import java.io.IOException;
-import java.util.logging.Level;
-import org.openide.DialogDisplayer;
-import org.openide.NotifyDescriptor;
import org.openide.util.HelpCtx;
import org.openide.util.actions.CallableSystemAction;
import org.sleuthkit.autopsy.corecomponents.AdvancedConfigurationDialog;
@@ -44,17 +40,13 @@ class HashDbMgmtAction extends CallableSystemAction {
// initialize panel with loaded settings
final HashDbMgmtPanel panel = HashDbMgmtPanel.getDefault();
- final AdvancedConfigurationDialog dialog = new AdvancedConfigurationDialog();
+ final AdvancedConfigurationDialog dialog = new AdvancedConfigurationDialog(true);
dialog.addApplyButtonListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
- if(panel.save()) {
- dialog.close();
- } else {
- NotifyDescriptor d = new NotifyDescriptor.Message("Error saving settings", NotifyDescriptor.INFORMATION_MESSAGE);
- DialogDisplayer.getDefault().notify(d);
- }
+ panel.save();
+ dialog.close();
}
});
dialog.display(panel);
diff --git a/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashDbMgmtPanel.form b/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashDbMgmtPanel.form
index 018747f4af..46b5d990b4 100644
--- a/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashDbMgmtPanel.form
+++ b/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashDbMgmtPanel.form
@@ -18,39 +18,65 @@
-
-
-
-
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
-
+
+
+
+
+
-
-
-
+
+
+
+
-
-
-
-
-
-
-
-
+
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
@@ -67,48 +93,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -129,5 +113,63 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashDbMgmtPanel.java b/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashDbMgmtPanel.java
index 56316dd818..f727b66c87 100644
--- a/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashDbMgmtPanel.java
+++ b/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashDbMgmtPanel.java
@@ -26,7 +26,6 @@ package org.sleuthkit.autopsy.hashdatabase;
import java.awt.Component;
import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
@@ -34,7 +33,8 @@ import java.util.Arrays;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
-import javax.swing.AbstractCellEditor;
+import javax.swing.AbstractAction;
+import javax.swing.Action;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFileChooser;
@@ -43,10 +43,8 @@ import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.filechooser.FileNameExtensionFilter;
import javax.swing.table.AbstractTableModel;
-import javax.swing.table.TableCellEditor;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableColumn;
-import org.sleuthkit.autopsy.hashdatabase.HashDb.DBType;
import org.sleuthkit.datamodel.SleuthkitJNI;
import org.sleuthkit.datamodel.TskException;
@@ -58,14 +56,14 @@ public class HashDbMgmtPanel extends javax.swing.JPanel {
private static final Logger logger = Logger.getLogger(HashDbMgmtPanel.class.getName());
private HashSetTableModel notableTableModel;
- private HashSetTableModel nsrlTableModel;
private JFileChooser fc = new JFileChooser();
private static HashDbMgmtPanel instance;
+ private HashDb nsrlSet;
+ private static boolean ingestRunning = false;
/** Creates new form HashDbMgmtPanel */
private HashDbMgmtPanel() {
notableTableModel = new HashSetTableModel();
- nsrlTableModel = new HashSetTableModel();
initComponents();
customizeComponents();
}
@@ -74,18 +72,19 @@ public class HashDbMgmtPanel extends javax.swing.JPanel {
if(instance == null) {
instance = new HashDbMgmtPanel();
}
+ instance.notableTableModel.resync();
return instance;
}
+ void resync() {
+ notableTableModel.resync();
+ }
+
private void customizeComponents() {
notableHashSetTable.setModel(notableTableModel);
notableHashSetTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
- notableHashSetTable.setRowHeight(25);
- notableTableModel.resync(DBType.NOTABLE);
- nsrlHashSetTable.setModel(nsrlTableModel);
- nsrlHashSetTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
- nsrlHashSetTable.setRowHeight(25);
- nsrlTableModel.resync(DBType.NSRL);
+ notableHashSetTable.setRowHeight(20);
+ notableTableModel.resync();
fc.setDragEnabled(false);
fc.setFileSelectionMode(JFileChooser.FILES_ONLY);
String[] EXTENSION = new String[] { "txt", "idx", "hash", "Hash" };
@@ -94,76 +93,60 @@ public class HashDbMgmtPanel extends javax.swing.JPanel {
fc.setFileFilter(filter);
fc.setMultiSelectionEnabled(false);
- final int width1 = jScrollPane1.getPreferredSize().width;
TableColumn column1 = null;
for (int i = 0; i < notableHashSetTable.getColumnCount(); i++) {
column1 = notableHashSetTable.getColumnModel().getColumn(i);
- if (i == 2) {
- ButtonRenderer br = new ButtonRenderer();
- br.getTheButton().addActionListener(new ActionListener() {
- @Override
- public void actionPerformed(ActionEvent e) {
- int row = notableHashSetTable.getSelectedRow();
- try {
- notableTableModel.getHashSetAt(row).createIndex();
- } catch (TskException ex) {
- logger.log(Level.WARNING, "Error creating index", ex);
- }
- notableTableModel.resync(DBType.NOTABLE);
- }
- });
- column1.setCellRenderer(br);
- column1.setCellEditor(br);
- }
if (i == 3) {
column1.setCellRenderer(new CheckBoxRenderer());
}
}
- final int width2 = jScrollPane2.getPreferredSize().width;
- TableColumn column2 = null;
- for (int i = 0; i < nsrlHashSetTable.getColumnCount(); i++) {
- column2 = nsrlHashSetTable.getColumnModel().getColumn(i);
- if (i == 2) {
- ButtonRenderer br = new ButtonRenderer();
- br.getTheButton().addActionListener(new ActionListener() {
- @Override
- public void actionPerformed(ActionEvent e) {
- int row = nsrlHashSetTable.getSelectedRow();
- try {
- nsrlTableModel.getHashSetAt(row).createIndex();
- } catch (TskException ex) {
- logger.log(Level.WARNING, "Error creating index", ex);
- }
- nsrlTableModel.resync(DBType.NSRL);
- }
- });
- column2.setCellRenderer(br);
- column2.setCellEditor(br);
- }
- if (i == 3) {
- column2.setCellRenderer(new CheckBoxRenderer());
+ Action indexSet = new AbstractAction() {
+
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ int row = notableHashSetTable.getSelectedRow();
+ try {
+ notableTableModel.getHashSetAt(row).createIndex();
+ } catch (TskException ex) {
+ logger.log(Level.WARNING, "Error creating index", ex);
+ }
+ notableTableModel.resync();
}
+ };
+ new ButtonColumn(notableHashSetTable, indexSet, 2);
+
+ nsrlSet = HashDbXML.getCurrent().getNSRLSet();
+ if(nsrlSet != null) {
+ nsrlNameLabel.setText(nsrlSet.getName());
+ setButtonFromIndexStatus(indexNSRLButton, nsrlSet.status());
+ } else {
+ setButtonFromIndexStatus(indexNSRLButton, IndexStatus.NO_DB);
+ removeNSRLButton.setEnabled(false);
}
}
-
+
/**
- * Checks if indexes exist for all defined databases
- * @return true if Sleuth Kit can open the indexes of all databases
- * than have been selected
+ * Save the modified settings
*/
- boolean indexesExist() {
- return notableTableModel.indexesExist() && nsrlTableModel.indexesExist();
+ void save() {
+ HashDbXML.getCurrent().setNSRLSet(nsrlSet);
}
/**
- * Save the table settings
- * @return whether save was successful
+ * Don't allow any changes if ingest is running
*/
- boolean save() {
- notableTableModel.saveAll();
- nsrlTableModel.saveAll();
- return true;
+ void setIngestRunning(boolean running) {
+ addNotableButton.setEnabled(!running);
+ removeNotableButton.setEnabled(!running);
+ setNSRLButton.setEnabled(!running);
+ indexNSRLButton.setEnabled(!running);
+ removeNSRLButton.setEnabled(!running);
+ ingestRunning = running;
+ if(running)
+ ingestRunningLabel.setText("Ingest is ongoing; some settings will be unavailable until it finishes.");
+ else
+ ingestRunningLabel.setText("");
}
/** This method is called from within the constructor to
@@ -177,39 +160,18 @@ public class HashDbMgmtPanel extends javax.swing.JPanel {
jScrollPane1 = new javax.swing.JScrollPane();
notableHashSetTable = new javax.swing.JTable();
- addNSRLButton = new javax.swing.JButton();
- removeNSRLButton = new javax.swing.JButton();
- jScrollPane2 = new javax.swing.JScrollPane();
- nsrlHashSetTable = new javax.swing.JTable();
addNotableButton = new javax.swing.JButton();
removeNotableButton = new javax.swing.JButton();
+ setNSRLButton = new javax.swing.JButton();
+ nsrlNameLabel = new javax.swing.JLabel();
+ jLabel1 = new javax.swing.JLabel();
+ jLabel2 = new javax.swing.JLabel();
+ indexNSRLButton = new javax.swing.JButton();
+ removeNSRLButton = new javax.swing.JButton();
+ ingestRunningLabel = new javax.swing.JLabel();
jScrollPane1.setViewportView(notableHashSetTable);
- addNSRLButton.setText(org.openide.util.NbBundle.getMessage(HashDbMgmtPanel.class, "HashDbMgmtPanel.addNSRLButton.text")); // NOI18N
- addNSRLButton.addActionListener(new java.awt.event.ActionListener() {
- public void actionPerformed(java.awt.event.ActionEvent evt) {
- addNSRLButtonActionPerformed(evt);
- }
- });
-
- removeNSRLButton.setText(org.openide.util.NbBundle.getMessage(HashDbMgmtPanel.class, "HashDbMgmtPanel.removeNSRLButton.text")); // NOI18N
- removeNSRLButton.addActionListener(new java.awt.event.ActionListener() {
- public void actionPerformed(java.awt.event.ActionEvent evt) {
- removeNSRLButtonActionPerformed(evt);
- }
- });
-
- nsrlHashSetTable.setModel(new javax.swing.table.DefaultTableModel(
- new Object [][] {
-
- },
- new String [] {
-
- }
- ));
- jScrollPane2.setViewportView(nsrlHashSetTable);
-
addNotableButton.setText(org.openide.util.NbBundle.getMessage(HashDbMgmtPanel.class, "HashDbMgmtPanel.addNotableButton.text")); // NOI18N
addNotableButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
@@ -224,75 +186,94 @@ public class HashDbMgmtPanel extends javax.swing.JPanel {
}
});
+ setNSRLButton.setText(org.openide.util.NbBundle.getMessage(HashDbMgmtPanel.class, "HashDbMgmtPanel.setNSRLButton.text")); // NOI18N
+ setNSRLButton.addActionListener(new java.awt.event.ActionListener() {
+ public void actionPerformed(java.awt.event.ActionEvent evt) {
+ setNSRLButtonActionPerformed(evt);
+ }
+ });
+
+ nsrlNameLabel.setText(org.openide.util.NbBundle.getMessage(HashDbMgmtPanel.class, "HashDbMgmtPanel.nsrlNameLabel.text")); // NOI18N
+
+ jLabel1.setText(org.openide.util.NbBundle.getMessage(HashDbMgmtPanel.class, "HashDbMgmtPanel.jLabel1.text")); // NOI18N
+
+ jLabel2.setText(org.openide.util.NbBundle.getMessage(HashDbMgmtPanel.class, "HashDbMgmtPanel.jLabel2.text")); // NOI18N
+
+ indexNSRLButton.setText(org.openide.util.NbBundle.getMessage(HashDbMgmtPanel.class, "HashDbMgmtPanel.indexNSRLButton.text")); // NOI18N
+ indexNSRLButton.addActionListener(new java.awt.event.ActionListener() {
+ public void actionPerformed(java.awt.event.ActionEvent evt) {
+ indexNSRLButtonActionPerformed(evt);
+ }
+ });
+
+ removeNSRLButton.setText(org.openide.util.NbBundle.getMessage(HashDbMgmtPanel.class, "HashDbMgmtPanel.removeNSRLButton.text")); // NOI18N
+ removeNSRLButton.addActionListener(new java.awt.event.ActionListener() {
+ public void actionPerformed(java.awt.event.ActionEvent evt) {
+ removeNSRLButtonActionPerformed(evt);
+ }
+ });
+
+ ingestRunningLabel.setText(org.openide.util.NbBundle.getMessage(HashDbMgmtPanel.class, "HashDbMgmtPanel.ingestRunningLabel.text")); // NOI18N
+
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
this.setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
- .addComponent(addNSRLButton)
- .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 235, Short.MAX_VALUE)
- .addComponent(removeNSRLButton)
- .addContainerGap())
- .addComponent(jScrollPane1, 0, 0, Short.MAX_VALUE)
+ .addComponent(jLabel1)
+ .addContainerGap(257, Short.MAX_VALUE))
.addGroup(layout.createSequentialGroup()
+ .addContainerGap()
+ .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addGroup(layout.createSequentialGroup()
+ .addGap(10, 10, 10)
+ .addComponent(nsrlNameLabel)
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 63, Short.MAX_VALUE)
+ .addComponent(indexNSRLButton)
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+ .addComponent(setNSRLButton)
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+ .addComponent(removeNSRLButton))
+ .addComponent(jLabel2))
+ .addContainerGap())
+ .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 389, Short.MAX_VALUE)
+ .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addContainerGap()
.addComponent(addNotableButton)
- .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 223, Short.MAX_VALUE)
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 113, Short.MAX_VALUE)
.addComponent(removeNotableButton)
.addContainerGap())
- .addComponent(jScrollPane2, 0, 0, Short.MAX_VALUE)
+ .addGroup(layout.createSequentialGroup()
+ .addContainerGap()
+ .addComponent(ingestRunningLabel, javax.swing.GroupLayout.DEFAULT_SIZE, 369, Short.MAX_VALUE)
+ .addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
- .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
- .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 203, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addGroup(layout.createSequentialGroup()
+ .addContainerGap()
+ .addComponent(jLabel2)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
- .addComponent(addNotableButton)
- .addComponent(removeNotableButton))
+ .addComponent(nsrlNameLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+ .addComponent(removeNSRLButton)
+ .addComponent(setNSRLButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+ .addComponent(indexNSRLButton))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
- .addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 186, Short.MAX_VALUE)
+ .addComponent(jLabel1)
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
+ .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 163, Short.MAX_VALUE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
- .addComponent(addNSRLButton)
- .addComponent(removeNSRLButton))
+ .addComponent(removeNotableButton)
+ .addComponent(addNotableButton))
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+ .addComponent(ingestRunningLabel)
.addContainerGap())
);
}// //GEN-END:initComponents
- private void addNSRLButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_addNSRLButtonActionPerformed
- save();
-
- int retval = fc.showOpenDialog(this);
-
- if(retval == JFileChooser.APPROVE_OPTION) {
- File f = fc.getSelectedFile();
- try {
- String filePath = f.getCanonicalPath();
-
- if (HashDb.isIndexPath(filePath)) {
- filePath = HashDb.toDatabasePath(filePath);
- }
- String derivedName;
- try {
- derivedName = SleuthkitJNI.getDatabaseName(filePath);
- } catch (TskException ex) {
- derivedName = "";
- }
-
- String setName = (String) JOptionPane.showInputDialog(this, "New Hash Set name:", "New Hash Set",
- JOptionPane.PLAIN_MESSAGE, null, null, derivedName);
-
- nsrlTableModel.newSet(setName, Arrays.asList(new String[] {filePath}), true, HashDb.DBType.NSRL); // TODO: support multiple file paths
-
-
- } catch (IOException ex) {
- logger.log(Level.WARNING, "Couldn't get selected file path.", ex);
- }
- }
- }//GEN-LAST:event_addNSRLButtonActionPerformed
-
private void addNotableButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_addNotableButtonActionPerformed
save();
@@ -316,40 +297,110 @@ public class HashDbMgmtPanel extends javax.swing.JPanel {
String setName = (String) JOptionPane.showInputDialog(this, "New Hash Set name:", "New Hash Set",
JOptionPane.PLAIN_MESSAGE, null, null, derivedName);
- if(setName != null && !setName.equals(""))
- notableTableModel.newSet(setName, Arrays.asList(new String[] {filePath}), true, HashDb.DBType.NOTABLE); // TODO: support multiple file paths
+ if(setName != null && !setName.equals("")) {
+ HashDb newDb = new HashDb(setName, Arrays.asList(new String[] {filePath}), false);
+ if(IndexStatus.isIngestible(newDb.status()))
+ newDb.setUseForIngest(true);
+ notableTableModel.newSet(newDb); // TODO: support multiple file paths
+ }
} catch (IOException ex) {
logger.log(Level.WARNING, "Couldn't get selected file path.", ex);
}
}
+ save();
}//GEN-LAST:event_addNotableButtonActionPerformed
private void removeNotableButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_removeNotableButtonActionPerformed
- notableTableModel.removeSetAt(notableHashSetTable.getSelectedRow());
+ int selected = notableHashSetTable.getSelectedRow();
+ if(selected >= 0)
+ notableTableModel.removeSetAt(notableHashSetTable.getSelectedRow());
}//GEN-LAST:event_removeNotableButtonActionPerformed
+ private void setNSRLButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_setNSRLButtonActionPerformed
+ save();
+
+ int retval = fc.showOpenDialog(this);
+
+ if(retval == JFileChooser.APPROVE_OPTION) {
+ File f = fc.getSelectedFile();
+ try {
+ String filePath = f.getCanonicalPath();
+
+ if (HashDb.isIndexPath(filePath)) {
+ filePath = HashDb.toDatabasePath(filePath);
+ }
+ String derivedName;
+ try {
+ derivedName = SleuthkitJNI.getDatabaseName(filePath);
+ } catch (TskException ex) {
+ derivedName = "";
+ }
+
+ this.nsrlSet = new HashDb(derivedName, Arrays.asList(new String[]{filePath}), false); // TODO: support multiple file paths
+ int toIndex = JOptionPane.NO_OPTION;
+ if(IndexStatus.isIngestible(this.nsrlSet.status())) {
+ this.nsrlSet.setUseForIngest(true);
+ } else {
+ toIndex = JOptionPane.showConfirmDialog(this,
+ "The NSRL database you added has no index.\n" +
+ "It will not be used for ingest until you create one.\n" +
+ "Would you like to do so now?", "No Index Exists", JOptionPane.YES_NO_OPTION);
+ }
+
+ nsrlNameLabel.setText(nsrlSet.getName());
+ setButtonFromIndexStatus(indexNSRLButton, nsrlSet.status());
+ removeNSRLButton.setEnabled(true);
+ save();
+
+ if(toIndex == JOptionPane.YES_OPTION) {
+ indexNSRLButtonActionPerformed(null);
+ }
+
+
+
+ } catch (IOException ex) {
+ logger.log(Level.WARNING, "Couldn't get selected file path.", ex);
+ }
+ }
+ }//GEN-LAST:event_setNSRLButtonActionPerformed
+
+ private void indexNSRLButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_indexNSRLButtonActionPerformed
+ try {
+ nsrlSet.createIndex();
+ } catch (TskException ex) {
+ logger.log(Level.WARNING, "Error creating index", ex);
+ }
+ setButtonFromIndexStatus(indexNSRLButton, nsrlSet.status());
+ }//GEN-LAST:event_indexNSRLButtonActionPerformed
+
private void removeNSRLButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_removeNSRLButtonActionPerformed
- nsrlTableModel.removeSetAt(nsrlHashSetTable.getSelectedRow());
+ this.nsrlSet = null;
+ save();
+ setButtonFromIndexStatus(indexNSRLButton, IndexStatus.NO_DB);
+ nsrlNameLabel.setText(org.openide.util.NbBundle.getMessage(HashDbMgmtPanel.class, "HashDbMgmtPanel.nsrlNameLabel.text"));
+ removeNSRLButton.setEnabled(false);
}//GEN-LAST:event_removeNSRLButtonActionPerformed
// Variables declaration - do not modify//GEN-BEGIN:variables
- private javax.swing.JButton addNSRLButton;
private javax.swing.JButton addNotableButton;
+ private javax.swing.JButton indexNSRLButton;
+ private javax.swing.JLabel ingestRunningLabel;
+ private javax.swing.JLabel jLabel1;
+ private javax.swing.JLabel jLabel2;
private javax.swing.JScrollPane jScrollPane1;
- private javax.swing.JScrollPane jScrollPane2;
private javax.swing.JTable notableHashSetTable;
- private javax.swing.JTable nsrlHashSetTable;
+ private javax.swing.JLabel nsrlNameLabel;
private javax.swing.JButton removeNSRLButton;
private javax.swing.JButton removeNotableButton;
+ private javax.swing.JButton setNSRLButton;
// End of variables declaration//GEN-END:variables
private class HashSetTableModel extends AbstractTableModel {
//data
private HashDbXML xmlHandle = HashDbXML.getCurrent();
- private List data = new ArrayList();
@Override
public int getColumnCount() {
@@ -358,7 +409,7 @@ public class HashDbMgmtPanel extends javax.swing.JPanel {
@Override
public int getRowCount() {
- return data.size();
+ return xmlHandle.getKnownBadSets().size();
}
@Override
@@ -377,7 +428,7 @@ public class HashDbMgmtPanel extends javax.swing.JPanel {
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
- HashDb entry = data.get(rowIndex);
+ HashDb entry = xmlHandle.getKnownBadSets().get(rowIndex);
switch(columnIndex) {
case 0:
return entry.getName();
@@ -392,12 +443,18 @@ public class HashDbMgmtPanel extends javax.swing.JPanel {
@Override
public boolean isCellEditable(int rowIndex, int columnIndex) {
- return columnIndex == 2 || columnIndex == 3; //(status or ingest)
+ if(ingestRunning)
+ return false;
+ if(columnIndex == 2)
+ return true;
+ if(columnIndex == 3)
+ return true;
+ return false;
}
@Override
public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
- HashDb entry = data.get(rowIndex);
+ HashDb entry = xmlHandle.getKnownBadSets().get(rowIndex);
switch(columnIndex) {
case 0:
entry.setName((String) aValue);
@@ -408,7 +465,10 @@ public class HashDbMgmtPanel extends javax.swing.JPanel {
case 2:
break;
case 3:
- entry.setUseForIngest((Boolean) aValue);
+ if(((Boolean) getValueAt(rowIndex, columnIndex)) || IndexStatus.isIngestible(entry.status()))
+ entry.setUseForIngest((Boolean) aValue);
+ else
+ JOptionPane.showMessageDialog(HashDbMgmtPanel.this, "Databases must be indexed before they can be used for ingest.");
}
}
@@ -417,37 +477,22 @@ public class HashDbMgmtPanel extends javax.swing.JPanel {
return getValueAt(0, c).getClass();
}
- void resync(DBType type) {
- data.clear();
- data.addAll(xmlHandle.getSets(type));
+ void resync() {
fireTableDataChanged();
}
- void newSet(String name, List paths, boolean useForIngest, DBType type) {
- xmlHandle.addSet(new HashDb(name, type, paths, useForIngest));
- resync(type);
+ void newSet(HashDb db) {
+ xmlHandle.addKnownBadSet(db);
+ resync();
}
void removeSetAt(int index) {
- HashDb db = data.get(index);
- xmlHandle.removeSet(db);
- resync(db.getType());
- }
-
- void saveAll() {
- xmlHandle.putAll(data);
- }
-
- boolean indexesExist() {
- boolean ret = true;
- for(HashDb db : xmlHandle.getSets()) {
- ret = ret && db.databaseExists();
- }
- return ret;
+ xmlHandle.removeKnownBadSetAt(index);
+ resync();
}
HashDb getHashSetAt(int row) {
- return data.get(row);
+ return xmlHandle.getKnownBadSets().get(row);
}
}
@@ -461,6 +506,7 @@ public class HashDbMgmtPanel extends javax.swing.JPanel {
this.setHorizontalAlignment(JCheckBox.CENTER);
this.setVerticalAlignment(JCheckBox.CENTER);
+ setEnabled(!ingestRunning);
Boolean selected = (Boolean) table.getModel().getValueAt(row, column);
setSelected(selected);
@@ -473,27 +519,13 @@ public class HashDbMgmtPanel extends javax.swing.JPanel {
}
}
- private class ButtonRenderer extends AbstractCellEditor implements TableCellRenderer, TableCellEditor {
-
- private JButton theButton;
-
- private ButtonRenderer() {
- theButton = new JButton();
+ static void setButtonFromIndexStatus(JButton theButton, IndexStatus status) {
+ if(ingestRunning) {
+ theButton.setText("Not Available");
+ theButton.setEnabled(false);
+ return;
}
-
- JButton getTheButton() {
- return theButton;
- }
-
- void updateData(
- JTable table, boolean isSelected, int row, int column) {
- theButton.setHorizontalAlignment(JButton.CENTER);
- theButton.setVerticalAlignment(JButton.CENTER);
-
-
- IndexStatus selected = (IndexStatus) table.getModel().getValueAt(row, column);
-
- switch (selected) {
+ switch (status) {
case INDEX_OUTDATED:
theButton.setText("Re-index");
theButton.setEnabled(true);
@@ -506,38 +538,14 @@ public class HashDbMgmtPanel extends javax.swing.JPanel {
theButton.setText("Index");
theButton.setEnabled(true);
break;
+ case INDEXING:
+ theButton.setText("Indexing");
+ theButton.setEnabled(false);
+ break;
default:
theButton.setText("No DB");
theButton.setEnabled(false);
}
-
- if (isSelected) {
- theButton.setBackground(notableHashSetTable.getSelectionBackground());
- } else {
- theButton.setBackground(notableHashSetTable.getBackground());
- }
- }
-
- @Override
- public Component getTableCellRendererComponent(
- JTable table, Object value,
- boolean isSelected, boolean hasFocus,
- int row, int column) {
- updateData(table, isSelected, row, column);
- return theButton;
- }
-
- @Override
- public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
- updateData(table, isSelected, row, column);
- return theButton;
- }
-
- @Override
- public Object getCellEditorValue() {
- return null;
- }
-
}
}
diff --git a/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashDbSimplePanel.form b/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashDbSimplePanel.form
index ee4a3d0cc0..73c556f986 100644
--- a/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashDbSimplePanel.form
+++ b/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashDbSimplePanel.form
@@ -16,18 +16,23 @@
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
@@ -35,17 +40,24 @@
-
+
-
+
+
+
+
+
+
+
+
@@ -53,17 +65,13 @@
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
@@ -81,5 +89,12 @@
+
+
+
+
+
+
+
diff --git a/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashDbSimplePanel.java b/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashDbSimplePanel.java
index 34698b4fcc..73e13da6cb 100644
--- a/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashDbSimplePanel.java
+++ b/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashDbSimplePanel.java
@@ -27,10 +27,8 @@ package org.sleuthkit.autopsy.hashdatabase;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Logger;
-import javax.swing.ListSelectionModel;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.TableColumn;
-import org.sleuthkit.autopsy.hashdatabase.HashDb.DBType;
/**
*
@@ -39,22 +37,21 @@ import org.sleuthkit.autopsy.hashdatabase.HashDb.DBType;
public class HashDbSimplePanel extends javax.swing.JPanel {
private static final Logger logger = Logger.getLogger(HashDbSimplePanel.class.getName());
- private HashTableModel notableTableModel;
- private HashTableModel nsrlTableModel;
+ private HashTableModel knownBadTableModel;
+ private HashDb nsrl;
/** Creates new form HashDbSimplePanel */
public HashDbSimplePanel() {
- notableTableModel = new HashTableModel();
- nsrlTableModel = new HashTableModel();
+ knownBadTableModel = new HashTableModel();
initComponents();
customizeComponents();
}
private void customizeComponents() {
- notableHashTable.setModel(notableTableModel);
+ notableHashTable.setModel(knownBadTableModel);
notableHashTable.setTableHeader(null);
- notableHashTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
+ notableHashTable.setRowSelectionAllowed(false);
//customize column witdhs
final int width1 = jScrollPane1.getPreferredSize().width;
TableColumn column1 = null;
@@ -67,22 +64,7 @@ public class HashDbSimplePanel extends javax.swing.JPanel {
}
}
- nsrlHashTable.setModel(nsrlTableModel);
-
- nsrlHashTable.setTableHeader(null);
- nsrlHashTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
- //customize column witdhs
- final int width2 = jScrollPane1.getPreferredSize().width;
- TableColumn column2 = null;
- for (int i = 0; i < nsrlHashTable.getColumnCount(); i++) {
- column2 = nsrlHashTable.getColumnModel().getColumn(i);
- if (i == 0) {
- column2.setPreferredWidth(((int) (width2 * 0.15)));
- } else {
- column2.setPreferredWidth(((int) (width2 * 0.84)));
- }
- }
- reloadLists();
+ reloadSets();
}
/** This method is called from within the constructor to
@@ -96,67 +78,79 @@ public class HashDbSimplePanel extends javax.swing.JPanel {
jScrollPane1 = new javax.swing.JScrollPane();
notableHashTable = new javax.swing.JTable();
- jScrollPane2 = new javax.swing.JScrollPane();
- nsrlHashTable = new javax.swing.JTable();
jLabel1 = new javax.swing.JLabel();
jLabel2 = new javax.swing.JLabel();
+ nsrlNameLabel = new javax.swing.JLabel();
+ jScrollPane1.setBorder(javax.swing.BorderFactory.createEmptyBorder(1, 1, 1, 1));
+
+ notableHashTable.setBackground(new java.awt.Color(240, 240, 240));
+ notableHashTable.setShowHorizontalLines(false);
+ notableHashTable.setShowVerticalLines(false);
jScrollPane1.setViewportView(notableHashTable);
- jScrollPane2.setViewportView(nsrlHashTable);
-
jLabel1.setText(org.openide.util.NbBundle.getMessage(HashDbSimplePanel.class, "HashDbSimplePanel.jLabel1.text")); // NOI18N
jLabel2.setText(org.openide.util.NbBundle.getMessage(HashDbSimplePanel.class, "HashDbSimplePanel.jLabel2.text")); // NOI18N
+ nsrlNameLabel.setText(org.openide.util.NbBundle.getMessage(HashDbSimplePanel.class, "HashDbSimplePanel.nsrlNameLabel.text")); // NOI18N
+
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
this.setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
- .addGroup(layout.createSequentialGroup()
- .addContainerGap()
- .addComponent(jLabel2)
- .addContainerGap(154, Short.MAX_VALUE))
- .addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 274, Short.MAX_VALUE)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(jLabel1)
.addContainerGap(142, Short.MAX_VALUE))
.addComponent(jScrollPane1, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 274, Short.MAX_VALUE)
+ .addGroup(layout.createSequentialGroup()
+ .addContainerGap()
+ .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addGroup(layout.createSequentialGroup()
+ .addGap(10, 10, 10)
+ .addComponent(nsrlNameLabel))
+ .addComponent(jLabel2))
+ .addContainerGap(143, Short.MAX_VALUE))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(jLabel2)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
- .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 35, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addComponent(nsrlNameLabel)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jLabel1)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
- .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 91, Short.MAX_VALUE))
+ .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 106, Short.MAX_VALUE))
);
}// //GEN-END:initComponents
+
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JScrollPane jScrollPane1;
- private javax.swing.JScrollPane jScrollPane2;
private javax.swing.JTable notableHashTable;
- private javax.swing.JTable nsrlHashTable;
+ private javax.swing.JLabel nsrlNameLabel;
// End of variables declaration//GEN-END:variables
- private void reloadLists() {
- nsrlTableModel.resync(DBType.NSRL);
- notableTableModel.resync(DBType.NOTABLE);
+ private void reloadSets() {
+ nsrl = HashDbXML.getCurrent().getNSRLSet();
+ if(nsrl == null) {
+ nsrlNameLabel.setText("No NSRL database set.");
+ } else {
+ nsrlNameLabel.setText(nsrl.getName());
+ }
+ knownBadTableModel.resync();
}
private class HashTableModel extends AbstractTableModel {
private List data = new ArrayList();
- private void resync(DBType type) {
+ private void resync() {
data.clear();
- data.addAll(HashDbXML.getCurrent().getSets(type));
+ data.addAll(HashDbXML.getCurrent().getKnownBadSets());
}
@Override
@@ -188,8 +182,8 @@ public class HashDbSimplePanel extends javax.swing.JPanel {
public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
if(columnIndex == 0){
HashDb db = data.get(rowIndex);
- HashDbXML.getCurrent().addSet(new HashDb(db.getName(), db.getType(), db.getDatabasePaths(), (Boolean) aValue));
- reloadLists();
+ HashDbXML.getCurrent().addKnownBadSet(new HashDb(db.getName(), db.getDatabasePaths(), (Boolean) aValue));
+ reloadSets();
}
}
diff --git a/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashDbXML.java b/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashDbXML.java
index a8ce178faf..28f5f0535b 100644
--- a/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashDbXML.java
+++ b/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashDbXML.java
@@ -26,6 +26,7 @@ import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
+import java.util.Collection;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
@@ -67,11 +68,12 @@ public class HashDbXML {
private static final Logger logger = Logger.getLogger(HashDbXML.class.getName());
private static HashDbXML currentInstance;
- private Map theSets;
+ private List knownBadSets;
+ private HashDb nsrlSet;
private String xmlFile;
private HashDbXML(String xmlFile) {
- theSets = new LinkedHashMap();
+ knownBadSets = new ArrayList();
this.xmlFile = xmlFile;
}
@@ -89,47 +91,56 @@ public class HashDbXML {
/**
* Get the hash sets
*/
- public List getSets() {
+ public List getAllSets() {
List ret = new ArrayList();
- ret.addAll(theSets.values());
+ ret.addAll(knownBadSets);
+ ret.add(nsrlSet);
return ret;
}
/**
- * Get the NSRL sets
+ * Get the Known Bad sets
*/
- public List getSets(DBType type) {
- List ret = new ArrayList();
- for(HashDb db : theSets.values()) {
- if(db.getType().equals(type))
- ret.add(db);
- }
- return ret;
+ public List getKnownBadSets() {
+ return knownBadSets;
+ }
+
+ /**
+ * Get the NSRL set
+ */
+ public HashDb getNSRLSet() {
+ return nsrlSet;
}
/**
- * Add a hash set (override old set)
+ * Add a known bad hash set
*/
- public void addSet(HashDb set) {
- theSets.put(set.getName(), set);
+ public void addKnownBadSet(HashDb set) {
+ knownBadSets.add(set);
save();
}
/**
- * Remove a hash set
+ * Set the NSRL hash set (override old set)
*/
- public void removeSet(HashDb set) {
- theSets.remove(set.getName());
+ public void setNSRLSet(HashDb set) {
+ this.nsrlSet = set;
save();
}
/**
- * Put all the given DBs into this XML (overwrite old ones)
+ * Remove a hash known bad set
*/
- public void putAll(List sets) {
- for(HashDb set : sets) {
- theSets.put(set.getName(), set);
- }
+ public void removeKnownBadSetAt(int index) {
+ knownBadSets.remove(index);
+ save();
+ }
+
+ /**
+ * Remove the NSRL database
+ */
+ public void removeNSRLSet() {
+ this.nsrlSet = null;
save();
}
@@ -139,7 +150,8 @@ public class HashDbXML {
public void reload() {
boolean created = false;
- theSets.clear();
+ knownBadSets.clear();
+ nsrlSet = null;
if (!this.setsFileExists()) {
//create new if it doesn't exist
@@ -169,14 +181,33 @@ public class HashDbXML {
Element rootEl = doc.createElement(ROOT_EL);
doc.appendChild(rootEl);
- for (String setName : theSets.keySet()) {
- HashDb set = theSets.get(setName);
+ for (HashDb set : knownBadSets) {
String useForIngest = Boolean.toString(set.getUseForIngest());
List paths = set.getDatabasePaths();
- String type = set.getType().toString();
+ String type = DBType.KNOWN_BAD.toString();
Element setEl = doc.createElement(SET_EL);
- setEl.setAttribute(SET_NAME_ATTR, setName);
+ setEl.setAttribute(SET_NAME_ATTR, set.getName());
+ setEl.setAttribute(SET_TYPE_ATTR, type);
+ setEl.setAttribute(SET_USE_FOR_INGEST_ATTR, useForIngest);
+
+ for (int i = 0; i < paths.size(); i++) {
+ String path = paths.get(i);
+ Element pathEl = doc.createElement(PATH_EL);
+ pathEl.setAttribute(PATH_NUMBER_ATTR, Integer.toString(i));
+ pathEl.setTextContent(path);
+ setEl.appendChild(pathEl);
+ }
+ rootEl.appendChild(setEl);
+ }
+
+ if(nsrlSet != null) {
+ String useForIngest = Boolean.toString(nsrlSet.getUseForIngest());
+ List paths = nsrlSet.getDatabasePaths();
+ String type = DBType.NSRL.toString();
+
+ Element setEl = doc.createElement(SET_EL);
+ setEl.setAttribute(SET_NAME_ATTR, nsrlSet.getName());
setEl.setAttribute(SET_TYPE_ATTR, type);
setEl.setAttribute(SET_USE_FOR_INGEST_ATTR, useForIngest);
@@ -231,9 +262,14 @@ public class HashDbXML {
String path = pathEl.getTextContent();
paths.add(path);
}
-
- HashDb set = new HashDb(name, typeDBType, paths, useForIngestBool);
- theSets.put(name, set);
+
+ HashDb set = new HashDb(name, paths, useForIngestBool);
+
+ if(typeDBType == DBType.KNOWN_BAD) {
+ knownBadSets.add(set);
+ } else if(typeDBType == DBType.NSRL) {
+ this.nsrlSet = set;
+ }
}
return true;
}
diff --git a/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/IndexStatus.java b/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/IndexStatus.java
index f1e30ed568..2500f21ee4 100644
--- a/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/IndexStatus.java
+++ b/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/IndexStatus.java
@@ -44,7 +44,11 @@ enum IndexStatus {
/**
* Neither the index nor the database exists.
*/
- NONE("No index or database.");
+ NONE("No index or database."),
+ /**
+ * The index is currently being generated
+ */
+ INDEXING("The index is currently being generated");
private String message;
@@ -62,4 +66,8 @@ enum IndexStatus {
String message() {
return this.message;
}
+
+ public static boolean isIngestible(IndexStatus status) {
+ return status == NO_DB || status == INDEX_CURRENT || status == INDEX_OUTDATED;
+ }
}
|
---|