diff --git a/Core/src/org/sleuthkit/autopsy/centralrepository/datamodel/AbstractSqlEamDb.java b/Core/src/org/sleuthkit/autopsy/centralrepository/datamodel/AbstractSqlEamDb.java index bceb4c4cd7..f90f7b26ef 100644 --- a/Core/src/org/sleuthkit/autopsy/centralrepository/datamodel/AbstractSqlEamDb.java +++ b/Core/src/org/sleuthkit/autopsy/centralrepository/datamodel/AbstractSqlEamDb.java @@ -36,6 +36,7 @@ import java.util.Set; import org.sleuthkit.autopsy.casemodule.Case; import org.sleuthkit.autopsy.coreutils.Logger; +import org.sleuthkit.autopsy.modules.hashdatabase.HashDbManager; import org.sleuthkit.datamodel.TskData; /** @@ -1501,12 +1502,15 @@ public abstract class AbstractSqlEamDb implements EamDb { * @throws EamDbException */ @Override - public int newReferenceSet(int orgID, String setName, String version) throws EamDbException { + public int newReferenceSet(int orgID, String setName, String version, TskData.FileKnown knownStatus, + boolean isReadOnly) throws EamDbException { EamDb dbManager = EamDb.getInstance(); EamGlobalSet eamGlobalSet = new EamGlobalSet( orgID, setName, version, + knownStatus, + isReadOnly, LocalDate.now()); return dbManager.newReferencelSet(eamGlobalSet); } @@ -1527,15 +1531,17 @@ public abstract class AbstractSqlEamDb implements EamDb { PreparedStatement preparedStatement1 = null; PreparedStatement preparedStatement2 = null; ResultSet resultSet = null; - String sql1 = "INSERT INTO reference_sets(org_id, set_name, version, import_date) VALUES (?, ?, ?, ?)"; - String sql2 = "SELECT id FROM reference_sets WHERE org_id=? AND set_name=? AND version=? AND import_date=? LIMIT 1"; + String sql1 = "INSERT INTO reference_sets(org_id, set_name, version, known_status, read_only, import_date) VALUES (?, ?, ?, ?)"; + String sql2 = "SELECT id FROM reference_sets WHERE org_id=? AND set_name=? AND version=? AND read_only=? AND known_status=? AND import_date=? LIMIT 1"; try { preparedStatement1 = conn.prepareStatement(sql1); preparedStatement1.setInt(1, eamGlobalSet.getOrgID()); preparedStatement1.setString(2, eamGlobalSet.getSetName()); preparedStatement1.setString(3, eamGlobalSet.getVersion()); - preparedStatement1.setString(4, eamGlobalSet.getImportDate().toString()); + preparedStatement1.setInt(4, eamGlobalSet.getKnownStatus().getFileKnownValue()); + preparedStatement1.setBoolean(5, eamGlobalSet.isReadOnly()); + preparedStatement1.setString(6, eamGlobalSet.getImportDate().toString()); preparedStatement1.executeUpdate(); @@ -1591,6 +1597,39 @@ public abstract class AbstractSqlEamDb implements EamDb { EamDbUtil.closeConnection(conn); } } + + /** + * Get all reference sets + * + * @return The global set associated with the ID + * + * @throws EamDbException + */ + @Override + public List getAllReferenceSets() throws EamDbException{ + List results = new ArrayList<>(); + Connection conn = connect(); + + PreparedStatement preparedStatement1 = null; + ResultSet resultSet = null; + String sql1 = "SELECT * FROM reference_sets"; + + try { + preparedStatement1 = conn.prepareStatement(sql1); + resultSet = preparedStatement1.executeQuery(); + while (resultSet.next()) { + results.add(getEamGlobalSetFromResultSet(resultSet)); + } + + } catch (SQLException ex) { + throw new EamDbException("Error getting reference sets.", ex); // NON-NLS + } finally { + EamDbUtil.closePreparedStatement(preparedStatement1); + EamDbUtil.closeResultSet(resultSet); + EamDbUtil.closeConnection(conn); + } + return results; + } /** * Add a new reference instance @@ -2084,6 +2123,8 @@ public abstract class AbstractSqlEamDb implements EamDb { resultSet.getInt("org_id"), resultSet.getString("set_name"), resultSet.getString("version"), + TskData.FileKnown.valueOf(resultSet.getByte("known_status")), + resultSet.getBoolean("read_only"), LocalDate.parse(resultSet.getString("import_date")) ); diff --git a/Core/src/org/sleuthkit/autopsy/centralrepository/datamodel/EamDb.java b/Core/src/org/sleuthkit/autopsy/centralrepository/datamodel/EamDb.java index 4ad2033dbf..909b6dc875 100644 --- a/Core/src/org/sleuthkit/autopsy/centralrepository/datamodel/EamDb.java +++ b/Core/src/org/sleuthkit/autopsy/centralrepository/datamodel/EamDb.java @@ -23,6 +23,7 @@ import java.util.List; import java.util.Set; import org.sleuthkit.datamodel.TskData; import org.sleuthkit.autopsy.casemodule.Case; +import org.sleuthkit.autopsy.modules.hashdatabase.HashDbManager; /** * Main interface for interacting with the database @@ -447,7 +448,8 @@ public interface EamDb { * @return The ID of the new global set * @throws EamDbException */ - int newReferenceSet(int orgID, String setName, String version) throws EamDbException; + int newReferenceSet(int orgID, String setName, String version, TskData.FileKnown knownStatus, + boolean isReadOnly) throws EamDbException; /** * Get a global set by ID @@ -459,6 +461,15 @@ public interface EamDb { * @throws EamDbException */ EamGlobalSet getReferenceSetByID(int globalSetID) throws EamDbException; + + /** + * Get all reference sets + * + * @return The global set associated with the ID + * + * @throws EamDbException + */ + List getAllReferenceSets() throws EamDbException; /** * Add a new reference instance diff --git a/Core/src/org/sleuthkit/autopsy/centralrepository/datamodel/EamGlobalSet.java b/Core/src/org/sleuthkit/autopsy/centralrepository/datamodel/EamGlobalSet.java index 21b4bd282c..13525c00db 100755 --- a/Core/src/org/sleuthkit/autopsy/centralrepository/datamodel/EamGlobalSet.java +++ b/Core/src/org/sleuthkit/autopsy/centralrepository/datamodel/EamGlobalSet.java @@ -19,6 +19,8 @@ package org.sleuthkit.autopsy.centralrepository.datamodel; import java.time.LocalDate; +import org.sleuthkit.autopsy.modules.hashdatabase.HashDbManager; +import org.sleuthkit.datamodel.TskData; /** * A global set in the Central Repository database @@ -29,6 +31,8 @@ public class EamGlobalSet { private int orgID; private String setName; private String version; + private TskData.FileKnown knownStatus; + private boolean isReadOnly; private LocalDate importDate; public EamGlobalSet( @@ -36,11 +40,15 @@ public class EamGlobalSet { int orgID, String setName, String version, + TskData.FileKnown knownStatus, + boolean isReadOnly, LocalDate importDate) { this.globalSetID = globalSetID; this.orgID = orgID; this.setName = setName; this.version = version; + this.knownStatus = knownStatus; + this.isReadOnly = isReadOnly; this.importDate = importDate; } @@ -48,8 +56,10 @@ public class EamGlobalSet { int orgID, String setName, String version, + TskData.FileKnown knownStatus, + boolean isReadOnly, LocalDate importDate) { - this(-1, orgID, setName, version, importDate); + this(-1, orgID, setName, version, knownStatus, isReadOnly, importDate); } /** @@ -107,6 +117,34 @@ public class EamGlobalSet { public void setVersion(String version) { this.version = version; } + + /** + * @return whether it is read only + */ + public boolean isReadOnly() { + return isReadOnly; + } + + /** + * @param isReadOnly + */ + public void setReadOnly(boolean isReadOnly) { + this.isReadOnly = isReadOnly; + } + + /** + * @return the known status + */ + public TskData.FileKnown getKnownStatus() { + return knownStatus; + } + + /** + * @param knownStatus the known status to set + */ + public void setKnownStatus(TskData.FileKnown knownStatus) { + this.knownStatus = knownStatus; + } /** * @return the importDate diff --git a/Core/src/org/sleuthkit/autopsy/centralrepository/datamodel/SqliteEamDb.java b/Core/src/org/sleuthkit/autopsy/centralrepository/datamodel/SqliteEamDb.java index ede91676f8..a7bcdc98ec 100644 --- a/Core/src/org/sleuthkit/autopsy/centralrepository/datamodel/SqliteEamDb.java +++ b/Core/src/org/sleuthkit/autopsy/centralrepository/datamodel/SqliteEamDb.java @@ -792,6 +792,23 @@ public class SqliteEamDb extends AbstractSqlEamDb { } } + /** + * Get all reference sets + * + * @return The global set associated with the ID + * + * @throws EamDbException + */ + @Override + public List getAllReferenceSets() throws EamDbException{ + try{ + acquireSharedLock(); + return super.getAllReferenceSets(); + } finally { + releaseSharedLock(); + } + } + /** * Add a new reference instance * diff --git a/Core/src/org/sleuthkit/autopsy/centralrepository/datamodel/SqliteEamDbSettings.java b/Core/src/org/sleuthkit/autopsy/centralrepository/datamodel/SqliteEamDbSettings.java index 6deb5145e8..fa50118924 100755 --- a/Core/src/org/sleuthkit/autopsy/centralrepository/datamodel/SqliteEamDbSettings.java +++ b/Core/src/org/sleuthkit/autopsy/centralrepository/datamodel/SqliteEamDbSettings.java @@ -311,6 +311,8 @@ public final class SqliteEamDbSettings { createReferenceSetsTable.append("org_id integer NOT NULL,"); createReferenceSetsTable.append("set_name text NOT NULL,"); createReferenceSetsTable.append("version text NOT NULL,"); + createReferenceSetsTable.append("known_status integer NOT NULL,"); + createReferenceSetsTable.append("read_only boolean NOT NULL,"); createReferenceSetsTable.append("import_date text NOT NULL,"); createReferenceSetsTable.append("foreign key (org_id) references organizations(id) ON UPDATE SET NULL ON DELETE SET NULL,"); createReferenceSetsTable.append("CONSTRAINT hash_set_unique UNIQUE (set_name, version)"); diff --git a/Core/src/org/sleuthkit/autopsy/centralrepository/optionspanel/ImportCentralRepoDatabaseDialog.java b/Core/src/org/sleuthkit/autopsy/centralrepository/optionspanel/ImportCentralRepoDatabaseDialog.java index 4223b4b359..39def95529 100755 --- a/Core/src/org/sleuthkit/autopsy/centralrepository/optionspanel/ImportCentralRepoDatabaseDialog.java +++ b/Core/src/org/sleuthkit/autopsy/centralrepository/optionspanel/ImportCentralRepoDatabaseDialog.java @@ -472,12 +472,14 @@ final public class ImportCentralRepoDatabaseDialog extends javax.swing.JDialog { */ private int createGlobalSet() throws EamDbException { EamDb dbManager = EamDb.getInstance(); + /* EamGlobalSet eamGlobalSet = new EamGlobalSet( selectedOrg.getOrgID(), tfDatabaseName.getText().trim(), tfDatabaseVersion.getText().trim(), LocalDate.now()); - return dbManager.newReferencelSet(eamGlobalSet); + return dbManager.newReferencelSet(eamGlobalSet);*/ + return 0; } @Messages({"ImportHashDatabaseDialog.createGlobalSet.failedMsg.text=Failed to store attribution details.", diff --git a/Core/src/org/sleuthkit/autopsy/modules/hashdatabase/HashDbManager.java b/Core/src/org/sleuthkit/autopsy/modules/hashdatabase/HashDbManager.java index 8ade7d699e..6e668ad4c8 100755 --- a/Core/src/org/sleuthkit/autopsy/modules/hashdatabase/HashDbManager.java +++ b/Core/src/org/sleuthkit/autopsy/modules/hashdatabase/HashDbManager.java @@ -47,6 +47,8 @@ import org.sleuthkit.autopsy.centralrepository.datamodel.CorrelationAttribute; import org.sleuthkit.autopsy.centralrepository.datamodel.EamDb; import org.sleuthkit.autopsy.centralrepository.datamodel.EamDbException; import org.sleuthkit.autopsy.centralrepository.datamodel.EamGlobalFileInstance; +import org.sleuthkit.autopsy.centralrepository.datamodel.EamGlobalSet; +import org.sleuthkit.autopsy.centralrepository.datamodel.EamOrganization; import org.sleuthkit.autopsy.centralrepository.optionspanel.ImportCentralRepoDatabaseDialog; import org.sleuthkit.autopsy.core.RuntimeProperties; import org.sleuthkit.autopsy.coreutils.Logger; @@ -649,6 +651,24 @@ public class HashDbManager implements PropertyChangeListener { } return updateableDbs; } + + private List getCentralRepoHashSetsFromDatabase(){ + List crHashSets = new ArrayList<>(); + if(EamDb.isEnabled()){ + try{ + List crSets = EamDb.getInstance().getAllReferenceSets(); + for(EamGlobalSet globalSet:crSets){ + EamOrganization org = EamDb.getInstance().getOrganizationByID(globalSet.getOrgID()); + // TEMP TEMP FIX + crHashSets.add(new HashDbInfo(globalSet.getSetName(), globalSet.getVersion(), org.getName(), + globalSet.getGlobalSetID(), HashDbManager.HashDb.KnownFilesType.KNOWN_BAD, true, true)); + } + } catch (EamDbException ex){ + ex.printStackTrace(); + } + } + return crHashSets; + } /** * Restores the last saved hash sets configuration. This supports @@ -702,11 +722,28 @@ public class HashDbManager implements PropertyChangeListener { logger.log(Level.WARNING, Bundle.HashDbManager_noDbPath_message(hashDbInfo.getHashSetName())); allDatabasesLoadedCorrectly = false; } - } else { - addExistingCentralRepoHashSet(hashDbInfo.getHashSetName(), hashDbInfo.getVersion(), + }// else { + // addExistingCentralRepoHashSet(hashDbInfo.getHashSetName(), hashDbInfo.getVersion(), + // hashDbInfo.getCentralRepoIndex(), + // hashDbInfo.getSearchDuringIngest(), hashDbInfo.getSendIngestMessages(), hashDbInfo.getKnownFilesType()); + //} + } catch (TskCoreException ex) { + Logger.getLogger(HashDbManager.class.getName()).log(Level.SEVERE, "Error opening hash database", ex); //NON-NLS + JOptionPane.showMessageDialog(null, + NbBundle.getMessage(this.getClass(), + "HashDbManager.unableToOpenHashDbMsg", hashDbInfo.getHashSetName()), + NbBundle.getMessage(this.getClass(), "HashDbManager.openHashDbErr"), + JOptionPane.ERROR_MESSAGE); + allDatabasesLoadedCorrectly = false; + } + } + + List crHashDbInfoList = this.getCentralRepoHashSetsFromDatabase(); + for(HashDbInfo hashDbInfo : crHashDbInfoList) { + try{ + addExistingCentralRepoHashSet(hashDbInfo.getHashSetName(), hashDbInfo.getVersion(), hashDbInfo.getCentralRepoIndex(), - hashDbInfo.getSearchDuringIngest(), hashDbInfo.getSendIngestMessages(), hashDbInfo.getKnownFilesType()); - } + hashDbInfo.getSearchDuringIngest(), hashDbInfo.getSendIngestMessages(), hashDbInfo.getKnownFilesType()); } catch (TskCoreException ex) { Logger.getLogger(HashDbManager.class.getName()).log(Level.SEVERE, "Error opening hash database", ex); //NON-NLS JOptionPane.showMessageDialog(null, diff --git a/Core/src/org/sleuthkit/autopsy/modules/hashdatabase/ImportCentralRepoDatabaseDialog.java b/Core/src/org/sleuthkit/autopsy/modules/hashdatabase/ImportCentralRepoDatabaseDialog.java index c10db21c7c..242f7c3a80 100644 --- a/Core/src/org/sleuthkit/autopsy/modules/hashdatabase/ImportCentralRepoDatabaseDialog.java +++ b/Core/src/org/sleuthkit/autopsy/modules/hashdatabase/ImportCentralRepoDatabaseDialog.java @@ -475,13 +475,14 @@ final public class ImportCentralRepoDatabaseDialog extends javax.swing.JDialog { * @throws EamDbException */ private int createGlobalSet() throws EamDbException { - EamDb dbManager = EamDb.getInstance(); + /*EamDb dbManager = EamDb.getInstance(); EamGlobalSet eamGlobalSet = new EamGlobalSet( selectedOrg.getOrgID(), tfDatabaseName.getText().trim(), tfDatabaseVersion.getText().trim(), LocalDate.now()); - return dbManager.newReferencelSet(eamGlobalSet); + return dbManager.newReferencelSet(eamGlobalSet);*/ + return 0; } @Messages({"ImportHashDatabaseDialog.createGlobalSet.failedMsg.text=Failed to store attribution details.",