Additional modifications to case, recentcases, and hashdb to use AutopsyPropFile

This commit is contained in:
Dick Fickling 2012-01-13 14:56:36 -05:00
parent 3ed04eedf3
commit 736149f3dd
8 changed files with 56 additions and 197 deletions

View File

@ -37,8 +37,6 @@ import org.openide.util.Lookup;
import org.sleuthkit.autopsy.coreutils.AutopsyPropFile; import org.sleuthkit.autopsy.coreutils.AutopsyPropFile;
import org.sleuthkit.autopsy.coreutils.Log; import org.sleuthkit.autopsy.coreutils.Log;
import org.sleuthkit.autopsy.hashdatabase.HashDbSettings; import org.sleuthkit.autopsy.hashdatabase.HashDbSettings;
import org.sleuthkit.datamodel.SleuthkitJNI;
import org.sleuthkit.datamodel.SleuthkitJNI.CaseDbHandle.AddImageProcess;
/** /**
* The "Add Image" wizard panel1 handling the logic of selecting image file(s) * The "Add Image" wizard panel1 handling the logic of selecting image file(s)

View File

@ -35,8 +35,10 @@ import javax.swing.SwingWorker;
import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener; import javax.swing.event.ChangeListener;
import org.openide.WizardDescriptor; import org.openide.WizardDescriptor;
import org.openide.util.Exceptions;
import org.openide.util.HelpCtx; import org.openide.util.HelpCtx;
import org.openide.util.Lookup; import org.openide.util.Lookup;
import org.sleuthkit.autopsy.coreutils.AutopsyPropFile;
import org.sleuthkit.autopsy.coreutils.Log; import org.sleuthkit.autopsy.coreutils.Log;
import org.sleuthkit.autopsy.hashdatabase.HashDbSettings; import org.sleuthkit.autopsy.hashdatabase.HashDbSettings;
import org.sleuthkit.datamodel.SleuthkitCase; import org.sleuthkit.datamodel.SleuthkitCase;
@ -200,6 +202,16 @@ class AddImageWizardPanel2 implements WizardDescriptor.Panel<WizardDescriptor> {
imgPaths = (String[]) settings.getProperty(AddImageAction.IMGPATHS_PROP); imgPaths = (String[]) settings.getProperty(AddImageAction.IMGPATHS_PROP);
timeZone = settings.getProperty(AddImageAction.TIMEZONE_PROP).toString(); timeZone = settings.getProperty(AddImageAction.TIMEZONE_PROP).toString();
lookupFilesCheckboxChecked = (Boolean) settings.getProperty(AddImageAction.LOOKUPFILES_PROP); lookupFilesCheckboxChecked = (Boolean) settings.getProperty(AddImageAction.LOOKUPFILES_PROP);
if(lookupFilesCheckboxChecked){
try {
HashDbSettings hashDbSettings;
hashDbSettings = HashDbSettings.getHashDbSettings();
NSRLPath = hashDbSettings.getNSRLDatabasePath();
knownBadPath = hashDbSettings.getKnownBadDatabasePath();
} catch (IOException ex) {
Log.get(AddImageWizardPanel2.class).log(Level.WARNING, "Couldn't get hash db settings", ex);
}
}
component.changeProgressBarTextAndColor("", 0, Color.black); component.changeProgressBarTextAndColor("", 0, Color.black);

View File

@ -24,16 +24,12 @@ import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener; import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport; import java.beans.PropertyChangeSupport;
import java.io.File; import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.text.DateFormat; import java.text.DateFormat;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.Arrays; import java.util.Arrays;
import java.util.Date; import java.util.Date;
import java.util.HashSet; import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Properties;
import java.util.Set; import java.util.Set;
import java.util.TimeZone; import java.util.TimeZone;
import java.util.logging.Level; import java.util.logging.Level;
@ -46,6 +42,7 @@ import org.openide.util.actions.CallableSystemAction;
import org.openide.util.actions.SystemAction; import org.openide.util.actions.SystemAction;
import org.openide.windows.WindowManager; import org.openide.windows.WindowManager;
import org.sleuthkit.autopsy.corecomponentinterfaces.CoreComponentControl; import org.sleuthkit.autopsy.corecomponentinterfaces.CoreComponentControl;
import org.sleuthkit.autopsy.coreutils.AutopsyPropFile;
import org.sleuthkit.autopsy.coreutils.Log; import org.sleuthkit.autopsy.coreutils.Log;
import org.sleuthkit.datamodel.*; import org.sleuthkit.datamodel.*;
import org.sleuthkit.datamodel.SleuthkitJNI.CaseDbHandle.AddImageProcess; import org.sleuthkit.datamodel.SleuthkitJNI.CaseDbHandle.AddImageProcess;
@ -89,8 +86,7 @@ public class Case {
* Name for the property that determines whether to show the dialog at * Name for the property that determines whether to show the dialog at
* startup * startup
*/ */
static final String propStartup = "LBL_StartupDialog"; public static final String propStartup = "LBL_StartupDialog";
private static Properties properties = new Properties();
// pcs is initialized in CaseListener constructor // pcs is initialized in CaseListener constructor
private static PropertyChangeSupport pcs; private static PropertyChangeSupport pcs;
@ -647,62 +643,12 @@ public class Case {
*/ */
static public void invokeStartupDialog() { static public void invokeStartupDialog() {
boolean showDialog = true; boolean showDialog = true;
String propFilePath = RecentCases.getPropertiesFilePath(); AutopsyPropFile apf = AutopsyPropFile.getInstance();
String temp = apf.getProperty(propStartup);
// before showing the startup dialog, check if it has been disabled or not by the user
try {
// try to load the property from the properties file in the home directory
InputStream inputStream = new FileInputStream(propFilePath);
//InputStream inputStream = getClass().getResourceAsStream("Case.properties"); // old variable (can be deleted if no longer needed)
properties.load(inputStream);
String temp = properties.getProperty(propStartup);
if (temp != null) { if (temp != null) {
showDialog = !temp.equals("false"); showDialog = !temp.equals("false");
} else { } else {
// if it's null, we have to write the properties apf.setProperty(propStartup, "true");
// update the properties
properties.setProperty(propStartup, "true");
// write the properties file
try {
properties.store(new FileOutputStream(new File(RecentCases.getPropertiesFilePath())), "");
} catch (Exception ex) {
Logger.getLogger(Case.class.getName()).log(Level.WARNING, "Error: Could not update the properties file.", ex);
}
}
} catch (Exception ex) {
// if cannot load it, we create a new properties file without any data inside it
properties.setProperty(propStartup, "true");
try {
// create the directory and property file to store it
File output = new File(propFilePath);
// if the properties file doesn't exist, we create a new one.
if (!output.exists()) {
File parent = new File(output.getParent());
if (!parent.exists()) {
parent.mkdirs(); // create the parent directory if it doesn't exist
}
output.createNewFile(); // create the properties file
FileOutputStream fos = new FileOutputStream(output);
properties.store(fos, "");
} // if the output exist, we just add the properties
else {
properties.setProperty(propStartup, "true");
// write the properties file
try {
properties.store(new FileOutputStream(new File(RecentCases.getPropertiesFilePath())), "");
} catch (Exception ex3) {
Logger.getLogger(Case.class.getName()).log(Level.WARNING, "Error: Could not update the properties file.", ex3);
}
}
} catch (Exception ex2) {
Logger.getLogger(Case.class.getName()).log(Level.WARNING, "Error: Could not create the property file.", ex2);
}
} }
if (showDialog) { if (showDialog) {
@ -728,14 +674,6 @@ public class Case {
} }
} }
/**
* Get the properties.
*
* @return properties
*/
public Properties getProperties() {
return properties;
}
/** /**
* Checks if a String is a valid case name * Checks if a String is a valid case name

View File

@ -32,6 +32,7 @@ import javax.swing.JDialog;
import javax.swing.JFrame; import javax.swing.JFrame;
import javax.swing.JPanel; import javax.swing.JPanel;
import org.openide.util.Lookup; import org.openide.util.Lookup;
import org.sleuthkit.autopsy.coreutils.AutopsyPropFile;
/** /**
* *
@ -280,20 +281,8 @@ public class CueBannerPanel extends javax.swing.JPanel {
private void closeButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_closeButtonActionPerformed private void closeButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_closeButtonActionPerformed
if(this.startupCheckBox.isSelected()){ if(this.startupCheckBox.isSelected()){
Case current = Case.getCurrentCase();
Properties properties = current.getProperties();
// update the properties // update the properties
properties.setProperty(current.propStartup, "false"); AutopsyPropFile.getInstance().setProperty(Case.propStartup, "false");
// write the properties file
try{
properties.store(new FileOutputStream(new File(RecentCases.getPropertiesFilePath())), "");
}
catch(Exception ex){
Logger.getLogger(this.className).log(Level.WARNING, "Error: Could not update the properties file.", ex);
}
} }
}//GEN-LAST:event_closeButtonActionPerformed }//GEN-LAST:event_closeButtonActionPerformed

View File

@ -52,11 +52,10 @@ public final class RecentCases extends CallableSystemAction implements Presenter
static final String PATH_PROP_KEY = "LBL_RecentCase_Path"; static final String PATH_PROP_KEY = "LBL_RecentCase_Path";
static final RecentCase BLANK_RECENTCASE = new RecentCase("", ""); static final RecentCase BLANK_RECENTCASE = new RecentCase("", "");
// get the path of the case.properties file in the user directory // get the path of the case.properties file in the user directory
private final static String propFilePath = AutopsyPropFile.getPropertiesFilePath(); private final static AutopsyPropFile apf = AutopsyPropFile.getInstance();
private final static RecentCases INSTANCE = new RecentCases(); private final static RecentCases INSTANCE = new RecentCases();
private Properties properties;
private Deque<RecentCase> recentCases; // newest case is last case private Deque<RecentCase> recentCases; // newest case is last case
@ -70,47 +69,13 @@ public final class RecentCases extends CallableSystemAction implements Presenter
return INSTANCE; return INSTANCE;
} }
static private Properties makeDefaults() {
Properties temp = new Properties();
for (int i = 0; i < LENGTH; i++) {
temp.setProperty(nameKey(i), "");
temp.setProperty(pathKey(i), "");
}
return temp;
}
/** the constructor */ /** the constructor */
private RecentCases() { private RecentCases() {
properties = new Properties(makeDefaults());
try {
// try to load all the recent cases from the properties file in the home directory
InputStream inputStream = new FileInputStream(propFilePath);
properties.load(inputStream);
inputStream.close();
} catch (Exception ignore) {
// if cannot load it, we create a new properties file without any data inside it
try {
// create the directory and property file to store it
File output = new File(propFilePath);
if (!output.exists()) {
File parent = new File(output.getParent());
if (!parent.exists()) {
parent.mkdirs();
}
output.createNewFile();
FileOutputStream fos = new FileOutputStream(output);
properties.store(fos, "");
fos.close();
} else {
// if the property file already exist, throw an error that says cannot load that file
Logger.getLogger(RecentCases.class.getName()).log(Level.WARNING, "Error: Could not load the property file.", new Exception("The properties file already exist and can't load that file."));
}
} catch (IOException ex2) {
Logger.getLogger(RecentCases.class.getName()).log(Level.WARNING, "Error: Could not create the property file.", ex2);
}
}
for (int i = 0; i < LENGTH; i++) {
apf.setProperty(nameKey(i), "");
apf.setProperty(pathKey(i), "");
}
// Load recentCases from properties // Load recentCases from properties
recentCases = new LinkedList<RecentCase>(); recentCases = new LinkedList<RecentCase>();
@ -140,19 +105,19 @@ public final class RecentCases extends CallableSystemAction implements Presenter
} }
private String getName(int i) { private String getName(int i) {
return properties.getProperty(nameKey(i)); return apf.getProperty(nameKey(i));
} }
private String getPath(int i) { private String getPath(int i) {
return properties.getProperty(pathKey(i)); return apf.getProperty(pathKey(i));
} }
private void setName(int i, String name) { private void setName(int i, String name) {
properties.setProperty(nameKey(i), name); apf.setProperty(nameKey(i), name);
} }
private void setPath(int i, String path) { private void setPath(int i, String path) {
properties.setProperty(pathKey(i), path); apf.setProperty(pathKey(i), path);
} }
private void setRecentCase(int i, RecentCase rc) { private void setRecentCase(int i, RecentCase rc) {
@ -212,10 +177,6 @@ public final class RecentCases extends CallableSystemAction implements Presenter
} }
} }
private void storeProperties() throws IOException {
properties.store(new FileOutputStream(new File(propFilePath)), "");
}
private void storeRecentCases() throws IOException { private void storeRecentCases() throws IOException {
int i = 0; int i = 0;
@ -231,7 +192,6 @@ public final class RecentCases extends CallableSystemAction implements Presenter
i++; i++;
} }
storeProperties();
} }
/** /**
@ -404,17 +364,6 @@ public final class RecentCases extends CallableSystemAction implements Presenter
return casePaths; return casePaths;
} }
// TODO: really shouldn't be done like this; need one common properties tracker
/**
* Gets the properties file paths.
*
* @return propertyPath
*/
public static String getPropertiesFilePath() {
return propFilePath;
}
/** /**
* This method does nothing. Use the actionPerformed instead of this method. * This method does nothing. Use the actionPerformed instead of this method.
*/ */

View File

@ -48,7 +48,7 @@ class HashDbMgmtAction extends CallableSystemAction {
try { try {
// Load settings from the property file // Load settings from the property file
HashDbSettings hashDatabaseSettings = new HashDbSettings(AutopsyPropFile.getPropertyFile()); HashDbSettings hashDatabaseSettings = HashDbSettings.getHashDbSettings();
// create the popUp window for it // create the popUp window for it
final JFrame frame = new JFrame(ACTION_NAME); final JFrame frame = new JFrame(ACTION_NAME);

View File

@ -22,11 +22,13 @@ import java.awt.Component;
import java.awt.Dimension; import java.awt.Dimension;
import java.awt.event.ActionListener; import java.awt.event.ActionListener;
import java.io.IOException; import java.io.IOException;
import java.util.logging.Level;
import javax.swing.Box; import javax.swing.Box;
import javax.swing.BoxLayout; import javax.swing.BoxLayout;
import javax.swing.JButton; import javax.swing.JButton;
import javax.swing.JLabel; import javax.swing.JLabel;
import javax.swing.border.EmptyBorder; import javax.swing.border.EmptyBorder;
import org.sleuthkit.autopsy.coreutils.Log;
/** /**
* Panel for displaying and editing the Hash Database settings. * Panel for displaying and editing the Hash Database settings.

View File

@ -18,15 +18,11 @@
*/ */
package org.sleuthkit.autopsy.hashdatabase; package org.sleuthkit.autopsy.hashdatabase;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException; import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.util.logging.Level;
import java.io.OutputStream;
import java.util.Properties;
import org.sleuthkit.autopsy.coreutils.AutopsyPropFile; import org.sleuthkit.autopsy.coreutils.AutopsyPropFile;
import org.sleuthkit.autopsy.coreutils.Log;
/** /**
* Loads and stores Hash Database settings from/to a property file * Loads and stores Hash Database settings from/to a property file
@ -34,10 +30,10 @@ import org.sleuthkit.autopsy.coreutils.AutopsyPropFile;
*/ */
public class HashDbSettings { public class HashDbSettings {
private static final String PROP_PREFIX = "HASHDB"; private static final String PROP_PREFIX = "LBL_HashDB";
private static final String NSRL_PROP = "NSRL"; private static final String NSRL_PROP = "NSRL";
private static final String KNOWN_BAD_PROP = "KNOWN_BAD"; private static final String KNOWN_BAD_PROP = "KNOWN_BAD";
private File propertyFile; private static final AutopsyPropFile apf = AutopsyPropFile.getInstance();
private HashDb NSRLDatabase, knownBadDatabase; private HashDb NSRLDatabase, knownBadDatabase;
/** /**
@ -45,22 +41,15 @@ public class HashDbSettings {
* @throws IOException if there's an error loading the property file * @throws IOException if there's an error loading the property file
* @throws FileNotFoundException if the property file can't be found * @throws FileNotFoundException if the property file can't be found
*/ */
public HashDbSettings(File propertyFile) throws IOException, FileNotFoundException { public HashDbSettings() throws IOException, FileNotFoundException {
this.propertyFile = propertyFile; String NSRL = getNSRL();
String knownBad = getKnownBad();
Properties temp = new Properties(); if (NSRL != null && !NSRL.equals("")) {
InputStream loadStream = new FileInputStream(propertyFile);
temp.load(loadStream);
loadStream.close();
String NSRL = getNSRL(temp);
String knownBad = getKnownBad(temp);
if (!NSRL.equals("")) {
this.NSRLDatabase = new HashDb(NSRL); this.NSRLDatabase = new HashDb(NSRL);
} }
if (!knownBad.equals("")) { if (knownBad != null && !knownBad.equals("")) {
this.knownBadDatabase = new HashDb(knownBad); this.knownBadDatabase = new HashDb(knownBad);
} }
} }
@ -72,18 +61,8 @@ public class HashDbSettings {
* @throws FileNotFoundException if the property file can't be found * @throws FileNotFoundException if the property file can't be found
*/ */
void save() throws IOException, FileNotFoundException { void save() throws IOException, FileNotFoundException {
Properties temp = new Properties(); setNSRL(this.NSRLDatabase != null ? this.NSRLDatabase.databasePath : "");
InputStream loadStream = new FileInputStream(propertyFile); setKnownBad(this.knownBadDatabase != null ? this.knownBadDatabase.databasePath : "");
temp.load(loadStream);
loadStream.close();
setNSRL(temp, this.NSRLDatabase != null ? this.NSRLDatabase.databasePath : "");
setKnownBad(temp, this.knownBadDatabase != null ? this.knownBadDatabase.databasePath : "");
String comments = "";
OutputStream storeStream = new FileOutputStream(propertyFile);
temp.store(storeStream, comments);
storeStream.close();
} }
/** /**
@ -118,7 +97,7 @@ public class HashDbSettings {
* @throws IOException if the property file can't be found * @throws IOException if the property file can't be found
*/ */
public static HashDbSettings getHashDbSettings() throws IOException { public static HashDbSettings getHashDbSettings() throws IOException {
return new HashDbSettings(AutopsyPropFile.getPropertyFile()); return new HashDbSettings();
} }
/** /**
@ -146,28 +125,20 @@ public class HashDbSettings {
} }
// helper functions: // helper functions:
private static void setNSRL(Properties props, String databasePath) { private static void setNSRL(String databasePath) {
setProp(props, NSRL_PROP, databasePath); apf.setProperty(fullProp(NSRL_PROP), databasePath);
} }
private static void setKnownBad(Properties props, String databasePath) { private static void setKnownBad(String databasePath) {
setProp(props, KNOWN_BAD_PROP, databasePath); apf.setProperty(fullProp(KNOWN_BAD_PROP), databasePath);
} }
private static String getNSRL(Properties props) { private static String getNSRL() {
return getProp(props, NSRL_PROP); return apf.getProperty(fullProp(NSRL_PROP));
} }
private static String getKnownBad(Properties props) { private static String getKnownBad() {
return getProp(props, KNOWN_BAD_PROP); return apf.getProperty(fullProp(KNOWN_BAD_PROP));
}
private static void setProp(Properties props, String propName, String propValue) {
props.setProperty(fullProp(propName), propValue);
}
private static String getProp(Properties props, String propName) {
return props.getProperty(fullProp(propName), "");
} }
private static String fullProp(String propName) { private static String fullProp(String propName) {