1
0
mirror of https://github.com/elisspace/autopsy.git synced 2026-09-06 02:24:30 +00:00
Conflicts:
	KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchIngestModule.java
This commit is contained in:
adam-m
2012-09-24 16:06:01 -04:00
5 changed files with 99 additions and 80 deletions

View File

@@ -81,6 +81,20 @@ public class ModuleSettings {
return f.exists();
}
public static boolean settingExists(String moduleName, String settingName){
if(! configExists(moduleName)){
return false;
}
try{
Properties props = fetchProperties(moduleName);
return (props.getProperty(settingName) != null);
}
catch(IOException e){
return false;
}
}
/**
* Returns the path of the given properties file.
* @param moduleName - The name of the config file to evaluate
@@ -155,7 +169,7 @@ public class ModuleSettings {
* @param moduleName - The name of the module to be written to.
* @param settings - The mapping of all key:value pairs of settings to add to the config.
*/
public static void setConfigSettings(String moduleName, Map<String, String> settings) {
public static synchronized void setConfigSettings(String moduleName, Map<String, String> settings) {
if (!configExists(moduleName)) {
makeConfigFile(moduleName);
Logger.getLogger(ModuleSettings.class.getName()).log(Level.INFO, "File did not exist. Created file [" + moduleName + ".properties]");
@@ -182,7 +196,7 @@ public class ModuleSettings {
* @param settingName - The name of the setting to be modified.
* @param settingVal - the value to set the setting to.
*/
public static void setConfigSetting(String moduleName, String settingName, String settingVal) {
public static synchronized void setConfigSetting(String moduleName, String settingName, String settingVal) {
if (!configExists(moduleName)) {
makeConfigFile(moduleName);
Logger.getLogger(ModuleSettings.class.getName()).log(Level.INFO, "File did not exist. Created file [" + moduleName + ".properties]");
@@ -209,7 +223,7 @@ public class ModuleSettings {
* @param key - the name of the key to remove.
*/
public static void removeProperty(String moduleName, String key){
public static synchronized void removeProperty(String moduleName, String key){
try{
if(getConfigSetting(moduleName, key) != null){
Properties props = fetchProperties(moduleName);
@@ -243,10 +257,16 @@ public class ModuleSettings {
/**
* Gets the property file as specified.
* @param moduleName
* @return A new file handle
* @return A new file handle, returns null if the file does not exist.
*/
public static File getPropertyFile(String moduleName) {
String path = getPropertyPath(moduleName);
if (path == null){
return null;
}
else{
return new File(getPropertyPath(moduleName));
}
}
}

View File

@@ -45,7 +45,7 @@ public class KeywordSearchConfigurationPanel2 extends javax.swing.JPanel impleme
private void activateWidgets() {
skipNSRLCheckBox.setSelected(KeywordSearchSettings.getSkipKnown());
boolean enable = !IngestManager.getDefault().isIngestRunning()
&& !IngestManager.getDefault().isModuleRunning(KeywordSearchSettings.getDefault());
&& !IngestManager.getDefault().isModuleRunning(KeywordSearchIngestModule.getDefault());
skipNSRLCheckBox.setEnabled(enable);
setTimeSettingEnabled(enable);

View File

@@ -150,7 +150,7 @@ public class KeywordSearchConfigurationPanel3 extends javax.swing.JPanel impleme
final boolean extractEnabled = utf16 || utf8;
boolean ingestNotRunning = !IngestManager.getDefault().isIngestRunning()
&& ! IngestManager.getDefault().isModuleRunning(KeywordSearchSettings.getDefault());;
&& ! IngestManager.getDefault().isModuleRunning(KeywordSearchIngestModule.getDefault());
//enable / disable checboxes
activateScriptsCheckboxes(extractEnabled && ingestNotRunning);
enableUTF16Checkbox.setEnabled(ingestNotRunning);

View File

@@ -88,7 +88,6 @@ public final class KeywordSearchIngestModule implements IngestModuleAbstractFile
return time;
}
};
private volatile UpdateFrequency updateFrequency = UpdateFrequency.AVG;
private static final Logger logger = Logger.getLogger(KeywordSearchIngestModule.class.getName());
public static final String MODULE_NAME = "Keyword Search";
@@ -135,21 +134,7 @@ public final class KeywordSearchIngestModule implements IngestModuleAbstractFile
//private constructor to ensure singleton instance
private KeywordSearchIngestModule() {
//set default script
if(ModuleSettings.getConfigSetting(KeywordSearchSettings.PROPERTIES_OPTIONS, AbstractFileExtract.ExtractOptions.EXTRACT_UTF8.toString()) == null){
KeywordSearchSettings.stringExtractOptions.put(AbstractFileExtract.ExtractOptions.EXTRACT_UTF8.toString(), Boolean.TRUE.toString());
}
if(ModuleSettings.getConfigSetting(KeywordSearchSettings.PROPERTIES_SCRIPTS, SCRIPT.LATIN_1.name()) == null){
ModuleSettings.setConfigSetting(KeywordSearchSettings.PROPERTIES_SCRIPTS, SCRIPT.LATIN_1.name(), Boolean.toString(true));
KeywordSearchSettings.stringExtractScripts.add(SCRIPT.LATIN_1);
}
if(ModuleSettings.getConfigSetting(KeywordSearchSettings.PROPERTIES_OPTIONS, AbstractFileExtract.ExtractOptions.EXTRACT_UTF16.toString()) == null){
KeywordSearchSettings.stringExtractOptions.put(AbstractFileExtract.ExtractOptions.EXTRACT_UTF16.toString(), Boolean.TRUE.toString());
}
KeywordSearchSettings.setDefaults();
}
/**
@@ -167,18 +152,10 @@ public final class KeywordSearchIngestModule implements IngestModuleAbstractFile
/**
* returns the current minimal update frequency setting in minutes
*/
UpdateFrequency getUpdateFrequency() {
return updateFrequency;
private UpdateFrequency getUpdateFrequency() {
return KeywordSearchSettings.getUpdateFrequency();
}
/**
* set new minimal update frequency module should use
*
* @param frequency to use in minutes
*/
void setUpdateFrequency(UpdateFrequency frequency) {
this.updateFrequency = frequency;
}
/**
* Starts processing of every file provided by IngestManager. Checks if it
@@ -373,17 +350,13 @@ public final class KeywordSearchIngestModule implements IngestModuleAbstractFile
//use the settings files to set values
//Grabbing skipKnown
if(! ModuleSettings.getConfigSettings(KeywordSearchSettings.PROPERTIES_NSRL).isEmpty()){
try{
KeywordSearchSettings.setSkipKnown(Boolean.parseBoolean(ModuleSettings.getConfigSetting(KeywordSearchSettings.PROPERTIES_NSRL, "SkipKnown")));
}
catch(Exception e){
Logger.getLogger(KeywordSearchIngestModule.class.getName()).log(Level.WARNING, "Could not parse boolean value from properties file.", e);
}
//setting default skip known
if(ModuleSettings.getConfigSetting(KeywordSearchSettings.PROPERTIES_NSRL, "SkipKnown") == null){
KeywordSearchSettings.setSkipKnown(true);
}
//populating stringExtractOptions
if(! ModuleSettings.getConfigSettings(KeywordSearchSettings.PROPERTIES_OPTIONS).isEmpty()){
KeywordSearchSettings.stringExtractOptions = ModuleSettings.getConfigSettings(KeywordSearchSettings.PROPERTIES_OPTIONS);
@@ -391,16 +364,11 @@ public final class KeywordSearchIngestModule implements IngestModuleAbstractFile
//populating stringExtractScripts
if(! ModuleSettings.getConfigSettings(KeywordSearchSettings.PROPERTIES_SCRIPTS).isEmpty()){
try{
for(Map.Entry<String,String> kvp: ModuleSettings.getConfigSettings(KeywordSearchSettings.PROPERTIES_SCRIPTS).entrySet()){
if(kvp.getKey() != null && Boolean.parseBoolean(kvp.getValue())){
KeywordSearchSettings.stringExtractScripts.add(SCRIPT.valueOf(kvp.getKey()));
}
}
}
catch(Exception e ){
Logger.getLogger(KeywordSearchIngestModule.class.getName()).log(Level.WARNING, "Could not parse boolean value from properties file.", e);
}
}
@@ -443,7 +411,7 @@ public final class KeywordSearchIngestModule implements IngestModuleAbstractFile
indexer = new Indexer();
final int updateIntervalMs = updateFrequency.getTime() * 60 * 1000;
final int updateIntervalMs = KeywordSearchSettings.getUpdateFrequency().getTime() * 60 * 1000;
logger.log(Level.INFO, "Using commit interval (ms): " + updateIntervalMs);
logger.log(Level.INFO, "Using searcher interval (ms): " + updateIntervalMs);

View File

@@ -39,37 +39,36 @@ public class KeywordSearchSettings {
static final String PROPERTIES_NSRL = MODULE_NAME+"_NSRL";
static final String PROPERTIES_SCRIPTS = MODULE_NAME+"_Scripts";
private static boolean skipKnown = true;
private static final Logger logger = Logger.getLogger(KeywordSearchSettings.class.getName());
private static UpdateFrequency UpdateFreq = UpdateFrequency.AVG;
static List<StringExtract.StringExtractUnicodeTable.SCRIPT> stringExtractScripts = new ArrayList<StringExtract.StringExtractUnicodeTable.SCRIPT>();
static Map<String,String> stringExtractOptions = new HashMap<String,String>();
/**
*
* @return IngestModule singleton
*/
static KeywordSearchIngestModule getDefault(){
return KeywordSearchIngestModule.getDefault();
}
/**
*
* @return IngestModule's update frequency
* Gets the update Frequency from KeywordSearch_Options.properties
* @return KeywordSearchIngestModule's update frequency
*/
static UpdateFrequency getUpdateFrequency(){
return KeywordSearchIngestModule.getDefault().getUpdateFrequency();
if(ModuleSettings.getConfigSetting(PROPERTIES_OPTIONS, "UpdateFrequency") != null){
return UpdateFrequency.valueOf(ModuleSettings.getConfigSetting(PROPERTIES_OPTIONS, "UpdateFrequency"));
}
//if it failed, return the default/last known value
logger.log(Level.WARNING, "Could not read property for UpdateFrequency, returning backup value.");
return UpdateFreq;
}
/**
* Sets the ingest module's update frequency.
* @param c Update frequency to set.
* Sets the update frequency and writes to KeywordSearch_Options.properties
* @param freq Sets KeywordSearchIngestModule to this value.
*/
static void setUpdateFrequency(UpdateFrequency c){
KeywordSearchIngestModule.getDefault().setUpdateFrequency(c);
static void setUpdateFrequency(UpdateFrequency freq){
ModuleSettings.setConfigSetting(PROPERTIES_OPTIONS, "UpdateFrequency", freq.name());
UpdateFreq = freq;
}
/**
* Sets whether or not to skip adding known good files to the search during index.
* @param skip
@@ -78,6 +77,19 @@ public class KeywordSearchSettings {
ModuleSettings.setConfigSetting(PROPERTIES_NSRL, "SkipKnown", Boolean.toString(skip));
skipKnown = skip;
}
/**
* Gets the setting for whether or not this ingest is skipping adding known good files to the index.
* @return skip setting
*/
static boolean getSkipKnown() {
if(ModuleSettings.getConfigSetting(PROPERTIES_NSRL, "SkipKnown") != null){
return Boolean.parseBoolean(ModuleSettings.getConfigSetting(PROPERTIES_NSRL, "SkipKnown"));
}
//if it fails, return the default/last known value
logger.log(Level.WARNING, "Could not read property for SkipKnown, returning backup value.");
return skipKnown;
}
@@ -126,6 +138,7 @@ public class KeywordSearchSettings {
return scripts;
}
//if it failed, try to return the built-in list maintained by the singleton.
logger.log(Level.WARNING, "Could not read properties for extracting scripts, returning backup values.");
return new ArrayList<SCRIPT>(stringExtractScripts);
}
@@ -141,25 +154,43 @@ public class KeywordSearchSettings {
return ModuleSettings.getConfigSetting(PROPERTIES_OPTIONS, key);
}
else {
logger.log(Level.WARNING, "Could not read property for Key "+ key + ", returning backup value.");
return stringExtractOptions.get(key);
}
}
/**
* Sets the default values of the KeywordSearch properties files if none already exist.
*/
static void setDefaults(){
logger.log(Level.INFO, "Detecting default settings.");
//setting default NSRL
if(!ModuleSettings.settingExists(KeywordSearchSettings.PROPERTIES_NSRL, "SkipKnown")){
logger.log(Level.INFO, "Default configuration for NSRL not found, generating default...");
KeywordSearchSettings.setSkipKnown(true);
}
//setting default Update Frequency
if(!ModuleSettings.settingExists(KeywordSearchSettings.PROPERTIES_OPTIONS, "UpdateFrequency")){
logger.log(Level.INFO, "Default configuration for Update Frequency not found, generating default...");
KeywordSearchSettings.setUpdateFrequency(UpdateFrequency.AVG);
}
//setting default Extract UTF8
if(!ModuleSettings.settingExists(KeywordSearchSettings.PROPERTIES_OPTIONS, AbstractFileExtract.ExtractOptions.EXTRACT_UTF8.toString())){
logger.log(Level.INFO, "Default configuration for UTF8 not found, generating default...");
KeywordSearchSettings.setStringExtractOption(AbstractFileExtract.ExtractOptions.EXTRACT_UTF8.toString(), Boolean.TRUE.toString());
}
//setting default Extract UTF16
if(!ModuleSettings.settingExists(KeywordSearchSettings.PROPERTIES_OPTIONS, AbstractFileExtract.ExtractOptions.EXTRACT_UTF16.toString())){
logger.log(Level.INFO, "Default configuration for UTF16 not found, generating defaults...");
KeywordSearchSettings.setStringExtractOption(AbstractFileExtract.ExtractOptions.EXTRACT_UTF16.toString(), Boolean.TRUE.toString());
}
//setting default Latin-1 Script
if(!ModuleSettings.settingExists(KeywordSearchSettings.PROPERTIES_SCRIPTS, SCRIPT.LATIN_1.name())){
logger.log(Level.INFO, "Default configuration for Scripts not found, generating defaults...");
ModuleSettings.setConfigSetting(KeywordSearchSettings.PROPERTIES_SCRIPTS, SCRIPT.LATIN_1.name(), Boolean.toString(true));
}
}
/**
* Gets the setting for whether or not this ingest is skipping adding known good files to the index.
* @return skip setting
*/
static boolean getSkipKnown() {
try{
if(ModuleSettings.getConfigSetting(PROPERTIES_NSRL, "SkipKnown") != null){
skipKnown = Boolean.parseBoolean(ModuleSettings.getConfigSetting(PROPERTIES_NSRL, "SkipKnown"));
}
}
catch(Exception e ){
Logger.getLogger(KeywordSearchIngestModule.class.getName()).log(Level.WARNING, "Could not parse boolean value from properties file.", e);
}
return skipKnown;
}
}