diff --git a/Core/src/org/sleuthkit/autopsy/modules/hashdatabase/HashLookupModuleSettings.java b/Core/src/org/sleuthkit/autopsy/modules/hashdatabase/HashLookupModuleSettings.java index 7383c74f81..05a1a77e8e 100755 --- a/Core/src/org/sleuthkit/autopsy/modules/hashdatabase/HashLookupModuleSettings.java +++ b/Core/src/org/sleuthkit/autopsy/modules/hashdatabase/HashLookupModuleSettings.java @@ -24,39 +24,135 @@ import java.util.List; import org.sleuthkit.autopsy.ingest.IngestModuleIngestJobSettings; /** - * Settings for a hash lookup file ingest module instance. + * Ingest job settings for the hash lookup module. */ final class HashLookupModuleSettings implements IngestModuleIngestJobSettings { private static final long serialVersionUID = 1L; - private final HashSet namesOfEnabledKnownHashSets = new HashSet<>(); - private final HashSet namesOfEnabledKnownBadHashSets = new HashSet<>(); + private HashSet namesOfEnabledKnownHashSets; + private HashSet namesOfDisabledKnownHashSets; // Added in version 1.1 + private HashSet namesOfEnabledKnownBadHashSets; + private HashSet namesOfDisabledKnownBadHashSets; // Added in version 1.1 private boolean shouldCalculateHashes = true; - HashLookupModuleSettings(boolean shouldCalculateHashes, List namesOfEnabledKnownHashSets, List namesOfEnabledKnownBadHashSets) { - this.shouldCalculateHashes = shouldCalculateHashes; - this.namesOfEnabledKnownHashSets.addAll(namesOfEnabledKnownHashSets); - this.namesOfEnabledKnownBadHashSets.addAll(namesOfEnabledKnownBadHashSets); + /** + * Constructs ingest job settings for the hash lookup module. + * + * @param shouldCalculateHashes Whether or not hashes should be calculated. + * @param namesOfEnabledKnownHashSets A list of enabled known hash sets. + * @param namesOfEnabledKnownBadHashSets A list of enabled known bad hash + * sets. + */ + HashLookupModuleSettings(boolean shouldCalculateHashes, + List namesOfEnabledKnownHashSets, + List namesOfEnabledKnownBadHashSets) { + this(shouldCalculateHashes, namesOfEnabledKnownHashSets, namesOfEnabledKnownBadHashSets, new ArrayList<>(), new ArrayList<>()); } + /** + * Constructs ingest job settings for the hash lookup module. + * + * @param shouldCalculateHashes Whether or not hashes should be calculated. + * @param namesOfEnabledKnownHashSets A list of enabled known hash sets. + * @param namesOfEnabledKnownBadHashSets A list of enabled known bad hash + * sets. + * @param namesOfDisabledKnownHashSets A list of disabled known hash sets. + * @param namesOfDisabledKnownBadHashSets A list of disabled known bad hash + * sets. + */ + HashLookupModuleSettings(boolean shouldCalculateHashes, + List namesOfEnabledKnownHashSets, + List namesOfEnabledKnownBadHashSets, + List namesOfDisabledKnownHashSets, + List namesOfDisabledKnownBadHashSets) { + this.shouldCalculateHashes = shouldCalculateHashes; + this.namesOfEnabledKnownHashSets = new HashSet<>(namesOfEnabledKnownHashSets); + this.namesOfEnabledKnownBadHashSets = new HashSet<>(namesOfEnabledKnownBadHashSets); + this.namesOfDisabledKnownHashSets = new HashSet<>(namesOfDisabledKnownHashSets); + this.namesOfDisabledKnownBadHashSets = new HashSet<>(namesOfDisabledKnownBadHashSets); + } + + /** + * @inheritDoc + */ @Override public long getVersionNumber() { - return serialVersionUID; - } - + return HashLookupModuleSettings.serialVersionUID; + } + + /** + * Checks the setting that specifies whether or not hashes are to be + * calculated. + * + * @return True if hashes are to be calculated, false otherwise. + */ boolean shouldCalculateHashes() { - return shouldCalculateHashes; + return this.shouldCalculateHashes; } + /** + * Checks whether or not a hash set is enabled. If there is no setting for + * the requested hash set, it is deemed to be enabled. + * + * @param hashSetName The name of the hash set to check. + * @return True if the hash set is enabled, false otherwise. + */ boolean isHashSetEnabled(String hashSetName) { - return (namesOfEnabledKnownHashSets.contains(hashSetName) || namesOfEnabledKnownBadHashSets.contains(hashSetName)); + this.upgradeFromOlderVersions(); + return !(this.namesOfDisabledKnownHashSets.contains(hashSetName) || this.namesOfDisabledKnownBadHashSets.contains(hashSetName)); } + /** + * Get the names of all explicitly enabled known files hash sets. + * + * @return The list of names. + */ List getNamesOfEnabledKnownHashSets() { - return new ArrayList<>(namesOfEnabledKnownHashSets); + this.upgradeFromOlderVersions(); + return new ArrayList<>(this.namesOfEnabledKnownHashSets); } - List getNamesOfEnabledKnownBadHashSets() { - return new ArrayList<>(namesOfEnabledKnownBadHashSets); + /** + * Get the names of all explicitly disabled known files hash sets. + * + * @return The list of names. + */ + List getNamesOfDisabledKnownHashSets() { + this.upgradeFromOlderVersions(); + return new ArrayList<>(namesOfDisabledKnownHashSets); } + + /** + * Get the names of all explicitly enabled known bad files hash sets. + * + * @return The list of names. + */ + List getNamesOfEnabledKnownBadHashSets() { + this.upgradeFromOlderVersions(); + return new ArrayList<>(this.namesOfEnabledKnownBadHashSets); + } + + /** + * Get the names of all explicitly disabled known bad files hash sets. + * + * @return The list of names. + */ + List getNamesOfDisabledKnownBadHashSets() { + this.upgradeFromOlderVersions(); + return new ArrayList<>(this.namesOfDisabledKnownBadHashSets); + } + + /** + * Initialize fields set to null when an instance of a previous, but still + * compatible, version of this class is de-serialized. + */ + private void upgradeFromOlderVersions() { + if (null == this.namesOfDisabledKnownHashSets) { + this.namesOfDisabledKnownHashSets = new HashSet<>(); + } + if (null == this.namesOfDisabledKnownBadHashSets) { + this.namesOfDisabledKnownBadHashSets = new HashSet<>(); + } + } + } diff --git a/Core/src/org/sleuthkit/autopsy/modules/hashdatabase/HashLookupModuleSettingsPanel.java b/Core/src/org/sleuthkit/autopsy/modules/hashdatabase/HashLookupModuleSettingsPanel.java index 163af52695..61cdf8006b 100644 --- a/Core/src/org/sleuthkit/autopsy/modules/hashdatabase/HashLookupModuleSettingsPanel.java +++ b/Core/src/org/sleuthkit/autopsy/modules/hashdatabase/HashLookupModuleSettingsPanel.java @@ -101,19 +101,25 @@ public final class HashLookupModuleSettingsPanel extends IngestModuleIngestJobSe @Override public IngestModuleIngestJobSettings getSettings() { + List enabledKnownHashSetNames = new ArrayList<>(); + List disabledKnownHashSetNames = new ArrayList<>(); + List enabledKnownBadHashSetNames = new ArrayList<>(); + List disabledKnownBadHashSetNames = new ArrayList<>(); + getHashSetNames(knownHashSetModels, enabledKnownHashSetNames, disabledKnownHashSetNames); + getHashSetNames(knownBadHashSetModels, enabledKnownBadHashSetNames, disabledKnownBadHashSetNames); return new HashLookupModuleSettings(alwaysCalcHashesCheckbox.isSelected(), - getNamesOfEnabledHashSets(knownHashSetModels), - getNamesOfEnabledHashSets(knownBadHashSetModels)); + enabledKnownHashSetNames, enabledKnownBadHashSetNames, + disabledKnownHashSetNames, disabledKnownBadHashSetNames); } - private List getNamesOfEnabledHashSets(List hashSetModels) { - List namesOfEnabledHashSets = new ArrayList<>(); + private void getHashSetNames(List hashSetModels, List enabledHashSetNames, List disabledHashSetNames) { for (HashSetModel model : hashSetModels) { if (model.isEnabled() && model.isIndexed()) { - namesOfEnabledHashSets.add(model.getName()); + enabledHashSetNames.add(model.getName()); + } else { + disabledHashSetNames.add(model.getName()); } } - return namesOfEnabledHashSets; } void update() { @@ -289,11 +295,6 @@ public final class HashLookupModuleSettingsPanel extends IngestModuleIngestJobSe alwaysCalcHashesCheckbox.setPreferredSize(new java.awt.Dimension(271, 35)); alwaysCalcHashesCheckbox.setVerticalAlignment(javax.swing.SwingConstants.TOP); alwaysCalcHashesCheckbox.setVerticalTextPosition(javax.swing.SwingConstants.TOP); - alwaysCalcHashesCheckbox.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - alwaysCalcHashesCheckboxActionPerformed(evt); - } - }); jScrollPane2.setBorder(javax.swing.BorderFactory.createEtchedBorder()); @@ -346,10 +347,6 @@ public final class HashLookupModuleSettingsPanel extends IngestModuleIngestJobSe ); }// //GEN-END:initComponents - private void alwaysCalcHashesCheckboxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_alwaysCalcHashesCheckboxActionPerformed - // TODO add your handling code here: - }//GEN-LAST:event_alwaysCalcHashesCheckboxActionPerformed - // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JCheckBox alwaysCalcHashesCheckbox; private javax.swing.JScrollPane jScrollPane1;