diff --git a/Parse_Plist/Parse_Plist$py.class b/Parse_Plist/Parse_Plist$py.class index cae26d1..bc37c5e 100644 Binary files a/Parse_Plist/Parse_Plist$py.class and b/Parse_Plist/Parse_Plist$py.class differ diff --git a/Parse_Plist/Parse_Plist.py b/Parse_Plist/Parse_Plist.py index f8ed274..193b892 100644 --- a/Parse_Plist/Parse_Plist.py +++ b/Parse_Plist/Parse_Plist.py @@ -33,6 +33,7 @@ # # Comments # Version 1.0 - Initial version - Sept 2016 +# Version 1.1 - Support for Linux # import jarray @@ -73,7 +74,7 @@ from org.sleuthkit.autopsy.ingest.IngestModule import IngestModuleException from org.sleuthkit.autopsy.ingest import DataSourceIngestModule from org.sleuthkit.autopsy.ingest import IngestModuleFactoryAdapter -from org.sleuthkit.autopsy.ingest import IngestModuleIngestJobSettings +from org.sleuthkit.autopsy.ingest import GenericIngestModuleJobSettings from org.sleuthkit.autopsy.ingest import IngestModuleIngestJobSettingsPanel from org.sleuthkit.autopsy.ingest import IngestMessage from org.sleuthkit.autopsy.ingest import IngestServices @@ -102,15 +103,15 @@ def getModuleVersionNumber(self): return "1.0" def getDefaultIngestJobSettings(self): - return GUI_PSQLiteUISettings() + return GenericIngestModuleJobSettings() def hasIngestJobSettingsPanel(self): return True # TODO: Update class names to ones that you create below def getIngestJobSettingsPanel(self, settings): - if not isinstance(settings, GUI_PSQLiteUISettings): - raise IllegalArgumentException("Expected settings argument to be instanceof SampleIngestModuleSettings") + if not isinstance(settings, GenericIngestModuleJobSettings): + raise IllegalArgumentException("Expected settings argument to be instanceof GenericIngestModuleJobSettings") self.settings = settings return GUI_PSQLiteUISettingsPanel(self.settings) @@ -140,18 +141,23 @@ def __init__(self, settings): def startUp(self, context): self.context = context - if self.local_settings.getFlag(): + if self.local_settings.getSetting('Flag') == 'true': #self.List_Of_DBs.append('Other') - DBs_List = self.local_settings.getArea().split(',') + DBs_List = self.local_settings.getSetting('plists').split(',') for DBs in DBs_List: self.List_Of_DBs.append(str(DBs).strip('\n').replace(' ','')) #self.logger.logp(Level.INFO, GUI_TestWithUI.__name__, "startUp", str(self.List_Of_Events)) self.log(Level.INFO, str(self.List_Of_DBs)) - self.path_to_exe = os.path.join(os.path.dirname(os.path.abspath(__file__)), "plist2db.exe") - if not os.path.exists(self.path_to_exe): - raise IngestModuleException("EXE was not found in module folder") + if PlatformUtil.isWindowsOS(): + self.path_to_exe = os.path.join(os.path.dirname(os.path.abspath(__file__)), "plist2db.exe") + if not os.path.exists(self.path_to_exe): + raise IngestModuleException("Windows Executable was not found in module folder") + elif PlatformUtil.getOSName() == 'Linux': + self.path_to_exe = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'plist2db') + if not os.path.exists(self.path_to_exe): + raise IngestModuleException("Linux Executable was not found in module folder") # Throw an IngestModule.IngestModuleException exception if there was a problem setting up # raise IngestModuleException("Oh No!") @@ -186,8 +192,8 @@ def process(self, dataSource, progressBar): # Run the EXE, saving output to a sqlite database self.log(Level.INFO, "Running program ==> " + self.path_to_exe + " " + Temp_Dir + "\\" + \ file.getName() + "-" + str(file.getId()) + " " + Temp_Dir + "\\Plist_File-" + str(file.getId()) + ".db3 ") - pipe = Popen([self.path_to_exe, Temp_Dir + "\\" + file.getName() + "-" + str(file.getId()), Temp_Dir + \ - "\\Plist_File-" + str(file.getId()) + ".db3"], stdout=PIPE, stderr=PIPE) + pipe = Popen([self.path_to_exe, os.path.join(Temp_Dir, (file.getName() + "-" + str(file.getId()))), \ + os.path.join(Temp_Dir, ("Plist_File-" + str(file.getId()) + ".db3"))], stdout=PIPE, stderr=PIPE) out_text = pipe.communicate()[0] self.log(Level.INFO, "Output from run is ==> " + out_text) @@ -318,8 +324,8 @@ def process(self, dataSource, progressBar): # Clean up stmt.close() dbConn.close() - os.remove(Temp_Dir + "\\Plist_File-" + str(file.getId()) + ".db3") - os.remove(Temp_Dir + "\\" + file.getName() + "-" + str(file.getId())) + os.remove(os.path.join(Temp_Dir, "Plist_File-" + str(file.getId()) + ".db3")) + os.remove(os.path.join(Temp_Dir, file.getName() + "-" + str(file.getId()))) # After all databases, post a message to the ingest messages in box. @@ -336,29 +342,7 @@ def process(self, dataSource, progressBar): return IngestModule.ProcessResult.OK -class GUI_PSQLiteUISettings(IngestModuleIngestJobSettings): - serialVersionUID = 1L - - def __init__(self): - self.flag = False - self.area = "" - - def getVersionNumber(self): - return serialVersionUID - - # TODO: Define getters and settings for data you want to store from UI - def getFlag(self): - return self.flag - - def setFlag(self, flag): - self.flag = flag - - def getArea(self): - return self.area - - def setArea(self, area): - self.area = area - + class GUI_PSQLiteUISettingsPanel(IngestModuleIngestJobSettingsPanel): # Note, we can't use a self.settings instance variable. # Rather, self.local_settings is used. @@ -380,10 +364,10 @@ def __init__(self, settings): # TODO: Update this for your UI def checkBoxEvent(self, event): if self.checkbox.isSelected(): - self.local_settings.setFlag(True) - self.local_settings.setArea(self.area.getText()); + self.local_settings.setSetting('Flag', 'true') + self.local_settings.setSetting('plists', self.area.getText()); else: - self.local_settings.setFlag(False) + self.local_settings.setSetting('Flag', 'false') # TODO: Update this for your UI def initComponents(self): @@ -421,7 +405,8 @@ def initComponents(self): # TODO: Update this for your UI def customizeComponents(self): - self.checkbox.setSelected(self.local_settings.getFlag()) + self.checkbox.setSelected(self.local_settings.getSetting('Flag') == 'true') + self.area.setText(self.local_settings.getSetting('plists')) # Return the settings used def getSettings(self): diff --git a/Parse_Plist/plist2db b/Parse_Plist/plist2db new file mode 100644 index 0000000..db12597 Binary files /dev/null and b/Parse_Plist/plist2db differ diff --git a/Parse_SQLite_Databases/ParseSQLiteDBs$py.class b/Parse_SQLite_Databases/ParseSQLiteDBs$py.class index fae5993..0cd8cb7 100644 Binary files a/Parse_SQLite_Databases/ParseSQLiteDBs$py.class and b/Parse_SQLite_Databases/ParseSQLiteDBs$py.class differ diff --git a/Parse_SQLite_Databases/ParseSQLiteDBs.py b/Parse_SQLite_Databases/ParseSQLiteDBs.py index 5428e7f..21579fd 100644 --- a/Parse_SQLite_Databases/ParseSQLiteDBs.py +++ b/Parse_SQLite_Databases/ParseSQLiteDBs.py @@ -72,7 +72,7 @@ from org.sleuthkit.autopsy.ingest.IngestModule import IngestModuleException from org.sleuthkit.autopsy.ingest import DataSourceIngestModule from org.sleuthkit.autopsy.ingest import IngestModuleFactoryAdapter -from org.sleuthkit.autopsy.ingest import IngestModuleIngestJobSettings +from org.sleuthkit.autopsy.ingest import GenericIngestModuleJobSettings from org.sleuthkit.autopsy.ingest import IngestModuleIngestJobSettingsPanel from org.sleuthkit.autopsy.ingest import IngestMessage from org.sleuthkit.autopsy.ingest import IngestServices @@ -101,15 +101,15 @@ def getModuleVersionNumber(self): return "1.0" def getDefaultIngestJobSettings(self): - return GUI_PSQLiteUISettings() + return GenericIngestModuleJobSettings() def hasIngestJobSettingsPanel(self): return True # TODO: Update class names to ones that you create below def getIngestJobSettingsPanel(self, settings): - if not isinstance(settings, GUI_PSQLiteUISettings): - raise IllegalArgumentException("Expected settings argument to be instanceof SampleIngestModuleSettings") + if not isinstance(settings, GenericIngestModuleJobSettings): + raise IllegalArgumentException("Expected settings argument to be instanceof GenericIngestModuleJobSettings") self.settings = settings return GUI_PSQLiteUISettingsPanel(self.settings) @@ -139,9 +139,9 @@ def __init__(self, settings): def startUp(self, context): self.context = context - if self.local_settings.getFlag(): + if self.local_settings.getSetting('Flag') == 'true': #self.List_Of_DBs.append('Other') - DBs_List = self.local_settings.getArea().split(',') + DBs_List = self.local_settings.getSetting('databaseList').split(',') for DBs in DBs_List: self.List_Of_DBs.append(str(DBs).strip('\n').replace(' ','')) @@ -313,29 +313,6 @@ def process(self, dataSource, progressBar): return IngestModule.ProcessResult.OK -class GUI_PSQLiteUISettings(IngestModuleIngestJobSettings): - serialVersionUID = 1L - - def __init__(self): - self.flag = False - self.area = "" - - def getVersionNumber(self): - return serialVersionUID - - # TODO: Define getters and settings for data you want to store from UI - def getFlag(self): - return self.flag - - def setFlag(self, flag): - self.flag = flag - - def getArea(self): - return self.area - - def setArea(self, area): - self.area = area - class GUI_PSQLiteUISettingsPanel(IngestModuleIngestJobSettingsPanel): # Note, we can't use a self.settings instance variable. # Rather, self.local_settings is used. @@ -357,10 +334,10 @@ def __init__(self, settings): # TODO: Update this for your UI def checkBoxEvent(self, event): if self.checkbox.isSelected(): - self.local_settings.setFlag(True) - self.local_settings.setArea(self.area.getText()); + self.local_settings.setSetting('Flag', 'true') + self.local_settings.setSetting('databaseList', self.area.getText()) else: - self.local_settings.setFlag(False) + self.local_settings.setSetting('Flag', 'false') # TODO: Update this for your UI def initComponents(self): @@ -398,7 +375,8 @@ def initComponents(self): # TODO: Update this for your UI def customizeComponents(self): - self.checkbox.setSelected(self.local_settings.getFlag()) + self.checkbox.setSelected(self.local_settings.getSetting('Flag') == 'true') + self.area.setText(self.local_settings.getSetting('databaseList')) # Return the settings used def getSettings(self): diff --git a/Plaso/Plaso$py.class b/Plaso/Plaso$py.class index 0ca8181..7a84ea7 100644 Binary files a/Plaso/Plaso$py.class and b/Plaso/Plaso$py.class differ diff --git a/Plaso/Plaso.py b/Plaso/Plaso.py index f5611d9..1480a50 100644 --- a/Plaso/Plaso.py +++ b/Plaso/Plaso.py @@ -71,7 +71,7 @@ from org.sleuthkit.autopsy.ingest.IngestModule import IngestModuleException from org.sleuthkit.autopsy.ingest import DataSourceIngestModule from org.sleuthkit.autopsy.ingest import IngestModuleFactoryAdapter -from org.sleuthkit.autopsy.ingest import IngestModuleIngestJobSettings +from org.sleuthkit.autopsy.ingest import GenericIngestModuleJobSettings from org.sleuthkit.autopsy.ingest import IngestModuleIngestJobSettingsPanel from org.sleuthkit.autopsy.ingest import IngestMessage from org.sleuthkit.autopsy.ingest import IngestServices @@ -103,14 +103,15 @@ def getModuleVersionNumber(self): return "1.0" def getDefaultIngestJobSettings(self): - return PlasoSettingsWithUISettings() + return GenericIngestModuleJobSettings() def hasIngestJobSettingsPanel(self): return True + # TODO: Update class names to ones that you create below def getIngestJobSettingsPanel(self, settings): - if not isinstance(settings, PlasoSettingsWithUISettings): - raise IllegalArgumentException("Expected settings argument to be instanceof SampleIngestModuleSettings") + if not isinstance(settings, GenericIngestModuleJobSettings): + raise IllegalArgumentException("Expected settings argument to be instanceof GenericIngestModuleJobSettings") self.settings = settings return PlasoSettingsWithUISettingsPanel(self.settings) @@ -143,19 +144,22 @@ def startUp(self, context): self.context = context #Show parameters that are passed in - self.log(Level.INFO, "Plaso directory ==> " + self.local_settings.getPlaso_Directory()) - self.log(Level.INFO, "Plaso Storage File ==> " + self.local_settings.getPlaso_Storage_File()) - self.exclude_file_sources = self.local_settings.getExclude_File_Sources() - if self.local_settings.getExclude_File_Sources(): + self.log(Level.INFO, "Plaso directory ==> " + self.local_settings.getSetting('Plaso_Directory')) + self.log(Level.INFO, "Plaso Storage File ==> " + str(self.local_settings.getSetting('Plaso_Storage_File'))) + + if self.local_settings.getSetting('Exclude_File_Sources') == 'true': self.log(Level.INFO, "Exclude File Information from import process") + self.exclude_file_sources = True else: self.log(Level.INFO, "Include File Information in import process") + self.exclude_file_sources = False # Create path to plaso storage file - if self.local_settings.getRun_Plaso(): + if self.local_settings.getSetting('Run_Plaso') == 'true': self.log(Level.INFO, "This is a plaso run") self.run_plaso = True - self.vss_opt = self.local_settings.getComboBox() + self.vss_opt = self.local_settings.getSetting('ComboBox') + self.log(Level.INFO, "VSS Option is ==> " + str(self.vss_opt)) if (self.vss_opt == "VSS Only"): self.vss_option = "--vss_only" elif (self.vss_opt == "No VSS"): @@ -165,18 +169,25 @@ def startUp(self, context): else: self.run_plaso = False self.log(Level.INFO, "This is a plaso import run") - self.log(Level.INFO, self.local_settings.getPlaso_Storage_File()) - self.path_to_storage_file = self.local_settings.getPlaso_Storage_File() - - # Check to see if the file to execute exists, if it does not then raise an exception and log error - # data is taken from the UI - self.path_to_exe_psort = os.path.join(self.local_settings.getPlaso_Directory(), "psort.exe") - if not os.path.exists(self.path_to_exe_psort): - raise IngestModuleException("Psort File to Run/execute does not exist.") - - self.path_to_exe_log2t = os.path.join(self.local_settings.getPlaso_Directory(), "log2timeline.exe") - if not os.path.exists(self.path_to_exe_log2t): - raise IngestModuleException("log2timeline File to Run/execute does not exist.") + self.log(Level.INFO, self.local_settings.getSetting('Plaso_Storage_File')) + self.path_to_storage_file = self.local_settings.getSetting('Plaso_Storage_File') + if PlatformUtil.isWindowsOS(): + # Check to see if the file to execute exists, if it does not then raise an exception and log error + # data is taken from the UI + self.path_to_exe_psort = os.path.join(self.local_settings.getSetting('Plaso_Directory'), "psort.exe") + if not os.path.exists(self.path_to_exe_psort): + raise IngestModuleException("Psort File to Run/execute does not exist.") + + self.path_to_exe_log2t = os.path.join(self.local_settings.getSetting('Plaso_Directory'), "log2timeline.exe") + if not os.path.exists(self.path_to_exe_log2t): + raise IngestModuleException("log2timeline File to Run/execute does not exist.") + else: + self.path_to_exe_psort = os.path.join(self.local_settings.getSetting('Plaso_Directory'), "psort.py") + if not os.path.exists(self.path_to_exe_psort): + raise IngestModuleException("Psort File to does not exist.") + self.path_to_exe_log2t = os.path.join(self.local_settings.getSetting('Plaso_Directory'), "log2timeline.py") + if not os.path.exists(self.path_to_exe_log2t): + raise IngestModuleException("log2timeline File to does not exist.") # Throw an IngestModule.IngestModuleException exception if there was a problem setting up # raise IngestModuleException(IngestModule(), "Oh No!") @@ -204,16 +215,17 @@ def process(self, dataSource, progressBar): # Create Event Log directory in temp directory, if it exists then continue on processing Temp_Dir = Case.getCurrentCase().getModulesOutputDirAbsPath() self.log(Level.INFO, "create Directory " + Temp_Dir) + temp_dir = os.path.join(Temp_Dir, "Plaso") try: - os.mkdir(Temp_Dir + "\Plaso") + os.mkdir(temp_dir) except: - self.log(Level.INFO, "Plaso Import Directory already exists " + Temp_Dir) + self.log(Level.INFO, "Plaso Import Directory already exists " + temp_dir) # Run log2timeline against the selected images plaso_image = dataSource.getPaths() - if self.local_settings.getRun_Plaso(): + if self.local_settings.getSetting('Run_Plaso') == 'true': for image in plaso_image: - base_path = Temp_Dir + "\Plaso" + base_path = temp_dir self.log(Level.INFO, "image ==> " + str(image) + " <==") file_name = os.path.basename(image) self.log(Level.INFO, "file name ==> " + file_name + " <==") @@ -231,19 +243,21 @@ def process(self, dataSource, progressBar): self.log(Level.INFO, "Running prog ==> " + self.path_to_exe_log2t + " --status_view none --partitions all --logfile " + \ log_file + " --vss_stores all " + storage_file + " " + image) pipe = Popen([self.path_to_exe_log2t, "--status_view", "none", "--partitions", "all", "--logfile", log_file, \ + "--hasher_file_size_limit", "1", "--hashers", "none", "--no_dependencies_check", \ "--vss_stores", "all", storage_file, image], stdout=PIPE, stderr=PIPE) else: self.log(Level.INFO, "Running progxx ==> " + self.path_to_exe_log2t + " --status_view none --partitions all --logfile " + \ log_file + " " + self.vss_option + " " + storage_file + " " + image) pipe = Popen([self.path_to_exe_log2t, "--status_view", "none", "--partitions", "all", "--logfile", log_file, \ + "--hasher_file_size_limit", "1", "--hashers", "none", "--no_dependencies_check", \ self.vss_option, storage_file, image], stdout=PIPE, stderr=PIPE) out_text = pipe.communicate()[0] self.log(Level.INFO, "Output from run is ==> " + out_text) # Run the psort.exe program against the storage file to convert the storage file from native to SQLite - base_path = Temp_Dir + "\Plaso" + base_path = temp_dir self.log(Level.INFO, "Base Path ==> " + base_path) - #if self.local_settings.getImport_Plaso(): + #if self.local_settings.getSetting('Import_Plaso'): file_name = os.path.basename(self.path_to_storage_file) self.log(Level.INFO, "File Name ==> " + file_name) base_file_name = os.path.splitext(file_name)[0] @@ -255,7 +269,7 @@ def process(self, dataSource, progressBar): storage_file = os.path.join(base_path, base_file_name + ".plaso") self.log(Level.INFO, "Storage File ==> " + storage_file) ##self.database_file = Temp_Dir + "\\Plaso\\Plaso.db3" - if self.local_settings.getRun_Plaso(): + if self.local_settings.getSetting('Run_Plaso') == 'true': self.log(Level.INFO, "Running program ==> " + self.path_to_exe_psort + " -o 4n6time_sqlite -w " + output_file + " " + \ storage_file) pipe = Popen([self.path_to_exe_psort, "-o", "4n6time_sqlite", "-w", output_file, storage_file], stdout=PIPE, stderr=PIPE) @@ -269,7 +283,7 @@ def process(self, dataSource, progressBar): self.log(Level.INFO, "Output from run is ==> " + out_text) plaso_db_file = output_file - plaso_db_dir = Temp_Dir + "\Plaso" + plaso_db_dir = temp_dir self.log(Level.INFO, "Plaso DB File ==> " + plaso_db_file) for file in files: abstract_file_info = skCase.getAbstractFileById(file.getId()) @@ -416,68 +430,6 @@ def process(self, dataSource, progressBar): return IngestModule.ProcessResult.OK -# Stores the settings that can be changed for each ingest job -# All fields in here must be serializable. It will be written to disk. -# TODO: Rename this class -class PlasoSettingsWithUISettings(IngestModuleIngestJobSettings): - serialVersionUID = 1L - - def __init__(self): - self.Plaso_Dir_Found = False - self.Plaso_Directory = "" - self.Plaso_Storage_File = "" - self.Exclude_File_Sources = False - self.Run_Plaso = False - self.Import_Plaso = False - #self.ListBox = [] - self.ComboBox = "All VSS" - - def getVersionNumber(self): - return serialVersionUID - - # Define getters and settings for data you want to store from UI - def getExclude_File_Sources(self): - return self.Exclude_File_Sources - - def setExclude_File_Sources(self, flag): - self.Exclude_File_Sources = flag - - def getRun_Plaso(self): - return self.Run_Plaso - - def setRun_Plaso(self, flag): - self.Run_Plaso = flag - - def getImport_Plaso(self): - return self.Import_Plaso - - def setImport_Plaso(self, flag): - self.Import_Plaso = flag - - def getPlaso_Dir_Found(self): - return self.Plaso_Dir_Found - - def setPlaso_Dir_Found(self, flag): - self.Plaso_Dir_Found = flag - - def getPlaso_Directory(self): - return self.Plaso_Directory - - def setPlaso_Directory(self, dirname): - self.Plaso_Directory = dirname - - def getPlaso_Storage_File(self): - return self.Plaso_Storage_File - - def setPlaso_Storage_File(self, filename): - self.Plaso_Storage_File = filename - - def getComboBox(self): - return self.ComboBox - - def setComboBox(self, entry): - self.ComboBox = entry - # UI that is shown to user for each ingest job so they can configure the job. # TODO: Rename this class PlasoSettingsWithUISettingsPanel(IngestModuleIngestJobSettingsPanel): @@ -501,74 +453,20 @@ def __init__(self, settings): # Check the checkboxs to see what actions need to be taken def checkBoxEvent(self, event): if self.Exclude_File_Sources_CB.isSelected(): - self.local_settings.setExclude_File_Sources(True) + self.local_settings.setSetting('Exclude_File_Sources', 'true') else: - self.local_settings.setExclude_File_Sources(False) + self.local_settings.setSetting('Exclude_File_Sources', 'false') if self.Run_Plaso_CB.isSelected(): - self.local_settings.setRun_Plaso(True) + self.local_settings.setSetting('Run_Plaso', 'true') else: - self.local_settings.setRun_Plaso(False) + self.local_settings.setSetting('Run_Plaso', 'false') if self.Run_Plaso_CB.isSelected(): - self.local_settings.setImport_Plaso(True) + self.local_settings.setSetting('Import_Plaso', 'true') else: - self.local_settings.setImport_Plaso(False) + self.local_settings.setSetting('Import_Plaso', 'false') - # Check to see if there are any entries that need to be populated from the database. - def check_Database_entries(self): - head, tail = os.path.split(os.path.abspath(__file__)) - settings_db = head + "\\GUI_Settings.db3" - try: - Class.forName("org.sqlite.JDBC").newInstance() - dbConn = DriverManager.getConnection("jdbc:sqlite:%s" % settings_db) - except SQLException as e: - self.Error_Message.setText("Error Opening Settings DB!") - - try: - stmt = dbConn.createStatement() - SQL_Statement = 'Select Setting_Name, Setting_Value from settings;' - resultSet = stmt.executeQuery(SQL_Statement) - while resultSet.next(): - if resultSet.getString("Setting_Name") == "Plaso_Executable_Directory": - self.Program_Executable_TF.setText(resultSet.getString("Setting_Value")) - self.local_settings.setPlaso_Directory(resultSet.getString("Setting_Value")) - self.local_settings.setPlaso_Dir_Found(True) - self.Error_Message.setText("Settings Read successfully!") - except SQLException as e: - self.Error_Message.setText("Error Reading Settings Database") - - stmt.close() - dbConn.close() - - # Save entries from the GUI to the database. - def SaveSettings(self, e): - - head, tail = os.path.split(os.path.abspath(__file__)) - settings_db = head + "\\GUI_Settings.db3" - try: - Class.forName("org.sqlite.JDBC").newInstance() - dbConn = DriverManager.getConnection("jdbc:sqlite:%s" % settings_db) - except SQLException as e: - self.Error_Message.setText("Error Opening Settings") - - try: - stmt = dbConn.createStatement() - SQL_Statement = "" - if (self.local_settings.getPlaso_Dir_Found()): - SQL_Statement = 'Update settings set Setting_Value = "' + self.Program_Executable_TF.getText() + '"' + \ - ' where setting_name = "Plaso_Executable_Directory";' - else: - SQL_Statement = 'Insert into settings (Setting_Name, Setting_Value) values ("Program_Exec_Name", "' + \ - self.Program_Executable_TF.getText() + '");' - - stmt.execute(SQL_Statement) - self.Error_Message.setText("Plaso Executable Directory Saved") - self.local_settings.setPlaso_Directory(self.Program_Executable_TF.getText()) - except SQLException as e: - self.Error_Message.setText(e.getMessage()) - stmt.close() - dbConn.close() # When button to find file is clicked then open dialog to find the file and return it. def Find_Plaso_Dir(self, e): @@ -584,7 +482,7 @@ def Find_Plaso_Dir(self, e): file = chooseFile.getSelectedFile() Canonical_file = file.getCanonicalPath() #text = self.readPath(file) - self.local_settings.setPlaso_Directory(Canonical_file) + self.local_settings.setSetting('Plaso_Directory', Canonical_file) self.Program_Executable_TF.setText(Canonical_file) def Find_Plaso_File(self, e): @@ -599,11 +497,17 @@ def Find_Plaso_File(self, e): file = chooseFile.getSelectedFile() Canonical_file = file.getCanonicalPath() #text = self.readPath(file) - self.local_settings.setPlaso_Storage_File(Canonical_file) + self.local_settings.setSetting('Plaso_Storage_File', Canonical_file) self.Plaso_Storage_File_TF.setText(Canonical_file) def onchange_cb(self, event): - self.local_settings.setComboBox(event.item) + self.local_settings.setSetting('ComboBox', event.item) + + def setPlasoDirectory(self, event): + self.local_settings.setSetting('Plaso_Directory', self.Program_Executable_TF.getText()) + + def setPlasoStorageFile(self, event): + self.local_settings.setSetting('Plaso_Storage_File', self.Plaso_Storage_File_TF.getText()) # Create the initial data fields/layout in the UI def initComponents(self): @@ -627,7 +531,7 @@ def initComponents(self): self.gbPanel0.setConstraints( self.Label_1, self.gbcPanel0 ) self.panel0.add( self.Label_1 ) - self.Program_Executable_TF = JTextField(20) + self.Program_Executable_TF = JTextField(20, focusLost=self.setPlasoDirectory) self.Program_Executable_TF.setEnabled(True) self.gbcPanel0.gridx = 2 self.gbcPanel0.gridy = 3 @@ -667,36 +571,9 @@ def initComponents(self): self.gbPanel0.setConstraints( self.Blank_1, self.gbcPanel0 ) self.panel0.add( self.Blank_1 ) - self.Save_Settings_BTN = JButton( "Save Plaso Exec Dir", actionPerformed=self.SaveSettings) - self.Save_Settings_BTN.setEnabled(True) - self.rbgPanel0.add( self.Save_Settings_BTN ) - self.gbcPanel0.gridx = 2 - self.gbcPanel0.gridy = 7 - self.gbcPanel0.gridwidth = 1 - self.gbcPanel0.gridheight = 1 - self.gbcPanel0.fill = GridBagConstraints.BOTH - self.gbcPanel0.weightx = 1 - self.gbcPanel0.weighty = 0 - self.gbcPanel0.anchor = GridBagConstraints.NORTH - self.gbPanel0.setConstraints( self.Save_Settings_BTN, self.gbcPanel0 ) - self.panel0.add( self.Save_Settings_BTN ) - - self.Blank_1 = JLabel( " ") - self.Blank_1.setEnabled(True) - self.gbcPanel0.gridx = 2 - self.gbcPanel0.gridy = 9 - self.gbcPanel0.gridwidth = 1 - self.gbcPanel0.gridheight = 1 - self.gbcPanel0.fill = GridBagConstraints.BOTH - self.gbcPanel0.weightx = 1 - self.gbcPanel0.weighty = 0 - self.gbcPanel0.anchor = GridBagConstraints.NORTH - self.gbPanel0.setConstraints( self.Blank_1, self.gbcPanel0 ) - self.panel0.add( self.Blank_1 ) - self.Run_Plaso_CB = JCheckBox("Run Plaso Against Autopsy Image", actionPerformed=self.checkBoxEvent) self.gbcPanel0.gridx = 2 - self.gbcPanel0.gridy = 11 + self.gbcPanel0.gridy = 7 self.gbcPanel0.gridwidth = 1 self.gbcPanel0.gridheight = 1 self.gbcPanel0.fill = GridBagConstraints.BOTH @@ -710,7 +587,7 @@ def initComponents(self): self.ComboBox_CB = JComboBox( self.dataComboBox_CB) self.ComboBox_CB.itemStateChanged = self.onchange_cb self.gbcPanel0.gridx = 2 - self.gbcPanel0.gridy = 13 + self.gbcPanel0.gridy = 9 self.gbcPanel0.gridwidth = 1 self.gbcPanel0.gridheight = 1 self.gbcPanel0.fill = GridBagConstraints.BOTH @@ -723,7 +600,7 @@ def initComponents(self): self.Blank_2 = JLabel( " ") self.Blank_2.setEnabled(True) self.gbcPanel0.gridx = 2 - self.gbcPanel0.gridy = 15 + self.gbcPanel0.gridy = 11 self.gbcPanel0.gridwidth = 1 self.gbcPanel0.gridheight = 1 self.gbcPanel0.fill = GridBagConstraints.BOTH @@ -735,7 +612,7 @@ def initComponents(self): self.Import_Plaso_CB = JCheckBox("Import Plaso Storage File", actionPerformed=self.checkBoxEvent) self.gbcPanel0.gridx = 2 - self.gbcPanel0.gridy = 17 + self.gbcPanel0.gridy = 13 self.gbcPanel0.gridwidth = 1 self.gbcPanel0.gridheight = 1 self.gbcPanel0.fill = GridBagConstraints.BOTH @@ -748,7 +625,7 @@ def initComponents(self): self.Label_1 = JLabel("Plaso Storage File") self.Label_1.setEnabled(True) self.gbcPanel0.gridx = 2 - self.gbcPanel0.gridy = 19 + self.gbcPanel0.gridy = 15 self.gbcPanel0.gridwidth = 1 self.gbcPanel0.gridheight = 1 self.gbcPanel0.fill = GridBagConstraints.BOTH @@ -758,10 +635,10 @@ def initComponents(self): self.gbPanel0.setConstraints( self.Label_1, self.gbcPanel0 ) self.panel0.add( self.Label_1 ) - self.Plaso_Storage_File_TF = JTextField(20) + self.Plaso_Storage_File_TF = JTextField(20, focusLost=self.setPlasoStorageFile) self.Plaso_Storage_File_TF.setEnabled(True) self.gbcPanel0.gridx = 2 - self.gbcPanel0.gridy = 21 + self.gbcPanel0.gridy = 17 self.gbcPanel0.gridwidth = 1 self.gbcPanel0.gridheight = 1 self.gbcPanel0.fill = GridBagConstraints.BOTH @@ -775,7 +652,7 @@ def initComponents(self): self.Find_Storage_BTN.setEnabled(True) self.rbgPanel0.add( self.Find_Storage_BTN ) self.gbcPanel0.gridx = 6 - self.gbcPanel0.gridy = 21 + self.gbcPanel0.gridy = 17 self.gbcPanel0.gridwidth = 1 self.gbcPanel0.gridheight = 1 self.gbcPanel0.fill = GridBagConstraints.BOTH @@ -788,7 +665,7 @@ def initComponents(self): self.Blank_3 = JLabel( " ") self.Blank_3.setEnabled(True) self.gbcPanel0.gridx = 2 - self.gbcPanel0.gridy = 23 + self.gbcPanel0.gridy = 19 self.gbcPanel0.gridwidth = 1 self.gbcPanel0.gridheight = 1 self.gbcPanel0.fill = GridBagConstraints.BOTH @@ -800,7 +677,7 @@ def initComponents(self): self.Exclude_File_Sources_CB = JCheckBox( "Exclude File Source", actionPerformed=self.checkBoxEvent) self.gbcPanel0.gridx = 2 - self.gbcPanel0.gridy = 25 + self.gbcPanel0.gridy = 21 self.gbcPanel0.gridwidth = 1 self.gbcPanel0.gridheight = 1 self.gbcPanel0.fill = GridBagConstraints.BOTH @@ -813,7 +690,7 @@ def initComponents(self): self.Blank_4 = JLabel( " ") self.Blank_4.setEnabled(True) self.gbcPanel0.gridx = 2 - self.gbcPanel0.gridy = 27 + self.gbcPanel0.gridy = 23 self.gbcPanel0.gridwidth = 1 self.gbcPanel0.gridheight = 1 self.gbcPanel0.fill = GridBagConstraints.BOTH @@ -826,7 +703,7 @@ def initComponents(self): self.Label_3 = JLabel( "Message:") self.Label_3.setEnabled(True) self.gbcPanel0.gridx = 2 - self.gbcPanel0.gridy = 29 + self.gbcPanel0.gridy = 25 self.gbcPanel0.gridwidth = 1 self.gbcPanel0.gridheight = 1 self.gbcPanel0.fill = GridBagConstraints.BOTH @@ -839,7 +716,7 @@ def initComponents(self): self.Error_Message = JLabel( "") self.Error_Message.setEnabled(True) self.gbcPanel0.gridx = 2 - self.gbcPanel0.gridy = 31 + self.gbcPanel0.gridy = 27 self.gbcPanel0.gridwidth = 1 self.gbcPanel0.gridheight = 1 self.gbcPanel0.fill = GridBagConstraints.BOTH @@ -853,10 +730,12 @@ def initComponents(self): # Custom load any data field and initialize the values def customizeComponents(self): - self.Exclude_File_Sources_CB.setSelected(self.local_settings.getExclude_File_Sources()) - self.Run_Plaso_CB.setSelected(self.local_settings.getRun_Plaso()) - self.Import_Plaso_CB.setSelected(self.local_settings.getImport_Plaso()) - self.check_Database_entries() + self.Exclude_File_Sources_CB.setSelected(self.local_settings.getSetting('Exclude_File_Sources') == 'true') + self.Run_Plaso_CB.setSelected(self.local_settings.getSetting('Run_Plaso') == 'true') + self.Import_Plaso_CB.setSelected(self.local_settings.getSetting('Import_Plaso') == 'true') + self.Program_Executable_TF.setText(self.local_settings.getSetting('Plaso_Directory')) + self.Plaso_Storage_File_TF.setText(self.local_settings.getSetting('Plaso_Storage_File')) + # Return the settings used def getSettings(self): diff --git a/Plaso/Plaso_Import$py.class b/Plaso/Plaso_Import$py.class index e3c1d00..d66159a 100644 Binary files a/Plaso/Plaso_Import$py.class and b/Plaso/Plaso_Import$py.class differ diff --git a/Plaso/Plaso_Import.py b/Plaso/Plaso_Import.py index b36090e..69e4bed 100644 --- a/Plaso/Plaso_Import.py +++ b/Plaso/Plaso_Import.py @@ -68,7 +68,7 @@ from org.sleuthkit.autopsy.ingest.IngestModule import IngestModuleException from org.sleuthkit.autopsy.ingest import DataSourceIngestModule from org.sleuthkit.autopsy.ingest import IngestModuleFactoryAdapter -from org.sleuthkit.autopsy.ingest import IngestModuleIngestJobSettings +from org.sleuthkit.autopsy.ingest import GenericIngestModuleJobSettings from org.sleuthkit.autopsy.ingest import IngestModuleIngestJobSettingsPanel from org.sleuthkit.autopsy.ingest import IngestMessage from org.sleuthkit.autopsy.ingest import IngestServices @@ -100,14 +100,15 @@ def getModuleVersionNumber(self): return "1.0" def getDefaultIngestJobSettings(self): - return Plaso_ImportSettingsWithUISettings() + return GenericIngestModuleJobSettings() def hasIngestJobSettingsPanel(self): return True + # TODO: Update class names to ones that you create below def getIngestJobSettingsPanel(self, settings): - if not isinstance(settings, Plaso_ImportSettingsWithUISettings): - raise IllegalArgumentException("Expected settings argument to be instanceof SampleIngestModuleSettings") + if not isinstance(settings, GenericIngestModuleJobSettings): + raise IllegalArgumentException("Expected settings argument to be instanceof GenericIngestModuleJobSettings") self.settings = settings return Plaso_ImportSettingsWithUISettingsPanel(self.settings) @@ -137,20 +138,22 @@ def startUp(self, context): self.context = context #Show parameters that are passed in - self.log(Level.INFO, "Plaso directory ==> " + self.local_settings.getPlaso_Directory()) - self.log(Level.INFO, "Plaso Storage File ==> " + self.local_settings.getPlaso_Storage_File()) - self.exclude_file_sources = self.local_settings.getExclude_File_Sources() - if self.local_settings.getExclude_File_Sources(): + self.log(Level.INFO, "Plaso directory ==> " + self.local_settings.getSetting('Plaso_Directory')) + self.log(Level.INFO, "Plaso Storage File ==> " + self.local_settings.getSetting('Plaso_Storage_File')) + self.exclude_file_sources = self.local_settings.getSetting('Exclude_File_Sources') + if self.local_settings.getSetting('Exclude_File_Sources') == 'true': self.log(Level.INFO, "Exclude File Information from import process") + self.exclude_file_sources = True else: self.log(Level.INFO, "Include File Information in import process") + self.exclude_file_sources = False # Create path to plaso storage file - self.path_to_storage_file = self.local_settings.getPlaso_Storage_File() + self.path_to_storage_file = self.local_settings.getSetting('Plaso_Storage_File') # Check to see if the file to execute exists, if it does not then raise an exception and log error # data is taken from the UI - self.path_to_exe = os.path.join(self.local_settings.getPlaso_Directory(), "psort.exe") + self.path_to_exe = os.path.join(self.local_settings.getSetting('Plaso_Directory'), "psort.exe") if not os.path.exists(self.path_to_exe): raise IngestModuleException("Psort File to Run/execute does not exist.") @@ -192,7 +195,7 @@ def process(self, dataSource, progressBar): # Run the psort.exe program against the storage file to convert the storage file from native to SQLite self.database_file = Temp_Dir + "\\Plaso_Import\\Plaso_Import.db3" self.log(Level.INFO, "Running program ==> " + self.path_to_exe + " -o 4n6time_sqlite -w " + Temp_Dir + "\\Plaso_Import\\" + \ - "plaso_import.db3 " + self.local_settings.getPlaso_Storage_File()) + "plaso_import.db3 " + self.local_settings.getSetting('Plaso_Storage_File')) pipe = Popen([self.path_to_exe, "-o", "4n6time_sqlite", "-w", self.database_file, self.path_to_storage_file], stdout=PIPE, stderr=PIPE) out_text = pipe.communicate()[0] self.log(Level.INFO, "Output from run is ==> " + out_text) @@ -359,45 +362,6 @@ def process(self, dataSource, progressBar): return IngestModule.ProcessResult.OK -# Stores the settings that can be changed for each ingest job -# All fields in here must be serializable. It will be written to disk. -# TODO: Rename this class -class Plaso_ImportSettingsWithUISettings(IngestModuleIngestJobSettings): - serialVersionUID = 1L - - def __init__(self): - self.Plaso_Dir_Found = False - self.Plaso_Directory = "" - self.Plaso_Storage_File = "" - self.Exclude_File_Sources = False - - def getVersionNumber(self): - return serialVersionUID - - # Define getters and settings for data you want to store from UI - def getExclude_File_Sources(self): - return self.Exclude_File_Sources - - def setExclude_File_Sources(self, flag): - self.Exclude_File_Sources = flag - - def getPlaso_Dir_Found(self): - return self.Plaso_Dir_Found - - def setPlaso_Dir_Found(self, flag): - self.Plaso_Dir_Found = flag - - def getPlaso_Directory(self): - return self.Plaso_Directory - - def setPlaso_Directory(self, dirname): - self.Plaso_Directory = dirname - - def getPlaso_Storage_File(self): - return self.Plaso_Storage_File - - def setPlaso_Storage_File(self, filename): - self.Plaso_Storage_File = filename # UI that is shown to user for each ingest job so they can configure the job. # TODO: Rename this @@ -422,65 +386,10 @@ def __init__(self, settings): # Check the checkboxs to see what actions need to be taken def checkBoxEvent(self, event): if self.Exclude_File_Sources_CB.isSelected(): - self.local_settings.setExclude_File_Sources(True) + self.local_settings.setSetting('Exclude_File_Sources', 'true') else: - self.local_settings.setExclude_File_Sources(False) + self.local_settings.setSetting('Exclude_File_Sources', 'false') - # Check to see if there are any entries that need to be populated from the database. - def check_Database_entries(self): - head, tail = os.path.split(os.path.abspath(__file__)) - settings_db = head + "\\GUI_Settings.db3" - try: - Class.forName("org.sqlite.JDBC").newInstance() - dbConn = DriverManager.getConnection("jdbc:sqlite:%s" % settings_db) - except SQLException as e: - self.Error_Message.setText("Error Opening Settings DB!") - - try: - stmt = dbConn.createStatement() - SQL_Statement = 'Select Setting_Name, Setting_Value from settings;' - resultSet = stmt.executeQuery(SQL_Statement) - while resultSet.next(): - if resultSet.getString("Setting_Name") == "Plaso_Executable_Directory": - self.Program_Executable_TF.setText(resultSet.getString("Setting_Value")) - self.local_settings.setPlaso_Directory(resultSet.getString("Setting_Value")) - self.local_settings.setPlaso_Dir_Found(True) - self.Error_Message.setText("Settings Read successfully!") - except SQLException as e: - self.Error_Message.setText("Error Reading Settings Database") - - stmt.close() - dbConn.close() - - # Save entries from the GUI to the database. - def SaveSettings(self, e): - - head, tail = os.path.split(os.path.abspath(__file__)) - settings_db = head + "\\GUI_Settings.db3" - try: - Class.forName("org.sqlite.JDBC").newInstance() - dbConn = DriverManager.getConnection("jdbc:sqlite:%s" % settings_db) - except SQLException as e: - self.Error_Message.setText("Error Opening Settings") - - try: - stmt = dbConn.createStatement() - SQL_Statement = "" - if (self.local_settings.getPlaso_Dir_Found()): - SQL_Statement = 'Update settings set Setting_Value = "' + self.Program_Executable_TF.getText() + '"' + \ - ' where setting_name = "Plaso_Executable_Directory";' - else: - SQL_Statement = 'Insert into settings (Setting_Name, Setting_Value) values ("Program_Exec_Name", "' + \ - self.Program_Executable_TF.getText() + '");' - - stmt.execute(SQL_Statement) - self.Error_Message.setText("Plaso Executable Directory Saved") - self.local_settings.setPlaso_Directory(self.Program_Executable_TF.getText()) - except SQLException as e: - self.Error_Message.setText(e.getMessage()) - stmt.close() - dbConn.close() - # When button to find file is clicked then open dialog to find the file and return it. def Find_Plaso_Dir(self, e): @@ -495,7 +404,7 @@ def Find_Plaso_Dir(self, e): file = chooseFile.getSelectedFile() Canonical_file = file.getCanonicalPath() #text = self.readPath(file) - self.local_settings.setPlaso_Directory(Canonical_file) + self.local_settings.setSetting('Plaso_Directory', Canonical_file) self.Program_Executable_TF.setText(Canonical_file) def Find_Plaso_File(self, e): @@ -510,9 +419,15 @@ def Find_Plaso_File(self, e): file = chooseFile.getSelectedFile() Canonical_file = file.getCanonicalPath() #text = self.readPath(file) - self.local_settings.setPlaso_Storage_File(Canonical_file) + self.local_settings.setSetting('Plaso_Storage_File', Canonical_file) self.Plaso_Storage_File_TF.setText(Canonical_file) + def setPlasoDirectory(self, event): + self.local_settings.setSetting('Plaso_Directory', self.Program_Executable_TF.getText()) + + def setPlasoStorageFile(self, event): + self.local_settings.setSetting('Plaso_Storage_File', self.Plaso_Storage_File_TF.getText()) + # Create the initial data fields/layout in the UI def initComponents(self): self.panel0 = JPanel() @@ -535,7 +450,7 @@ def initComponents(self): self.gbPanel0.setConstraints( self.Label_1, self.gbcPanel0 ) self.panel0.add( self.Label_1 ) - self.Program_Executable_TF = JTextField(20) + self.Program_Executable_TF = JTextField(20, focusLost=self.setPlasoDirectory) self.Program_Executable_TF.setEnabled(True) self.gbcPanel0.gridx = 2 self.gbcPanel0.gridy = 3 @@ -575,37 +490,10 @@ def initComponents(self): self.gbPanel0.setConstraints( self.Blank_1, self.gbcPanel0 ) self.panel0.add( self.Blank_1 ) - self.Save_Settings_BTN = JButton( "Save Plaso Exec Dir", actionPerformed=self.SaveSettings) - self.Save_Settings_BTN.setEnabled(True) - self.rbgPanel0.add( self.Save_Settings_BTN ) - self.gbcPanel0.gridx = 2 - self.gbcPanel0.gridy = 7 - self.gbcPanel0.gridwidth = 1 - self.gbcPanel0.gridheight = 1 - self.gbcPanel0.fill = GridBagConstraints.BOTH - self.gbcPanel0.weightx = 1 - self.gbcPanel0.weighty = 0 - self.gbcPanel0.anchor = GridBagConstraints.NORTH - self.gbPanel0.setConstraints( self.Save_Settings_BTN, self.gbcPanel0 ) - self.panel0.add( self.Save_Settings_BTN ) - - self.Blank_2 = JLabel( " ") - self.Blank_2.setEnabled(True) - self.gbcPanel0.gridx = 2 - self.gbcPanel0.gridy = 9 - self.gbcPanel0.gridwidth = 1 - self.gbcPanel0.gridheight = 1 - self.gbcPanel0.fill = GridBagConstraints.BOTH - self.gbcPanel0.weightx = 1 - self.gbcPanel0.weighty = 0 - self.gbcPanel0.anchor = GridBagConstraints.NORTH - self.gbPanel0.setConstraints( self.Blank_2, self.gbcPanel0 ) - self.panel0.add( self.Blank_2 ) - self.Label_1 = JLabel("Plaso Storage File") self.Label_1.setEnabled(True) self.gbcPanel0.gridx = 2 - self.gbcPanel0.gridy = 11 + self.gbcPanel0.gridy = 7 self.gbcPanel0.gridwidth = 1 self.gbcPanel0.gridheight = 1 self.gbcPanel0.fill = GridBagConstraints.BOTH @@ -615,10 +503,10 @@ def initComponents(self): self.gbPanel0.setConstraints( self.Label_1, self.gbcPanel0 ) self.panel0.add( self.Label_1 ) - self.Plaso_Storage_File_TF = JTextField(20) + self.Plaso_Storage_File_TF = JTextField(20, focusLost=self.setPlasoStorageFile) self.Plaso_Storage_File_TF.setEnabled(True) self.gbcPanel0.gridx = 2 - self.gbcPanel0.gridy = 13 + self.gbcPanel0.gridy = 9 self.gbcPanel0.gridwidth = 1 self.gbcPanel0.gridheight = 1 self.gbcPanel0.fill = GridBagConstraints.BOTH @@ -632,7 +520,7 @@ def initComponents(self): self.Find_Storage_BTN.setEnabled(True) self.rbgPanel0.add( self.Find_Storage_BTN ) self.gbcPanel0.gridx = 6 - self.gbcPanel0.gridy = 13 + self.gbcPanel0.gridy = 9 self.gbcPanel0.gridwidth = 1 self.gbcPanel0.gridheight = 1 self.gbcPanel0.fill = GridBagConstraints.BOTH @@ -645,7 +533,7 @@ def initComponents(self): self.Blank_3 = JLabel( " ") self.Blank_3.setEnabled(True) self.gbcPanel0.gridx = 2 - self.gbcPanel0.gridy = 15 + self.gbcPanel0.gridy = 13 self.gbcPanel0.gridwidth = 1 self.gbcPanel0.gridheight = 1 self.gbcPanel0.fill = GridBagConstraints.BOTH @@ -657,7 +545,7 @@ def initComponents(self): self.Exclude_File_Sources_CB = JCheckBox( "Exclude File Source", actionPerformed=self.checkBoxEvent) self.gbcPanel0.gridx = 2 - self.gbcPanel0.gridy = 17 + self.gbcPanel0.gridy = 15 self.gbcPanel0.gridwidth = 1 self.gbcPanel0.gridheight = 1 self.gbcPanel0.fill = GridBagConstraints.BOTH @@ -670,7 +558,7 @@ def initComponents(self): self.Blank_4 = JLabel( " ") self.Blank_4.setEnabled(True) self.gbcPanel0.gridx = 2 - self.gbcPanel0.gridy = 19 + self.gbcPanel0.gridy = 17 self.gbcPanel0.gridwidth = 1 self.gbcPanel0.gridheight = 1 self.gbcPanel0.fill = GridBagConstraints.BOTH @@ -683,7 +571,7 @@ def initComponents(self): self.Label_3 = JLabel( "Message:") self.Label_3.setEnabled(True) self.gbcPanel0.gridx = 2 - self.gbcPanel0.gridy = 21 + self.gbcPanel0.gridy = 19 self.gbcPanel0.gridwidth = 1 self.gbcPanel0.gridheight = 1 self.gbcPanel0.fill = GridBagConstraints.BOTH @@ -710,9 +598,9 @@ def initComponents(self): # Custom load any data field and initialize the values def customizeComponents(self): - self.Exclude_File_Sources_CB.setSelected(self.local_settings.getExclude_File_Sources()) - self.check_Database_entries() - #self.Error_Message.setText(Case.getCurrentCase().getTempDirectory()) + self.Exclude_File_Sources_CB.setSelected(self.local_settings.getSetting('Exclude_File_Sources') == 'true') + self.Program_Executable_TF.setText(self.local_settings.getSetting('Plaso_Directory')) + self.Plaso_Storage_File_TF.setText(self.local_settings.getSetting('Plaso_Storage_File')) # Return the settings used def getSettings(self):