mirror of
https://github.com/overcuriousity/autopsy-flatpak.git
synced 2025-07-12 07:56:16 +00:00
HdXViewer capability has been added to the Hex Viewer
This commit is contained in:
parent
5cc79ecce9
commit
490ea446cd
@ -18,6 +18,7 @@
|
||||
*/
|
||||
package org.sleuthkit.autopsy.core;
|
||||
|
||||
import java.nio.file.Paths;
|
||||
import org.sleuthkit.autopsy.coreutils.TextConverter;
|
||||
import java.util.prefs.BackingStoreException;
|
||||
import org.sleuthkit.autopsy.events.MessageServiceConnectionInfo;
|
||||
@ -75,6 +76,7 @@ public final class UserPreferences {
|
||||
public static final String SHOW_ONLY_CURRENT_USER_TAGS = "ShowOnlyCurrentUserTags";
|
||||
public static final String HIDE_CENTRAL_REPO_COMMENTS_AND_OCCURRENCES = "HideCentralRepoCommentsAndOccurrences";
|
||||
public static final String DISPLAY_TRANSLATED_NAMES = "DisplayTranslatedNames";
|
||||
public static final String HDX_EDITOR_PATH = "HdXEditorPath";
|
||||
|
||||
// Prevent instantiation.
|
||||
private UserPreferences() {
|
||||
@ -471,4 +473,20 @@ public final class UserPreferences {
|
||||
public static void setLogFileCount(int count) {
|
||||
preferences.putInt(MAX_NUM_OF_LOG_FILE, count);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param executablePath
|
||||
*/
|
||||
public static void setHdXEditorPath(String executablePath) {
|
||||
preferences.put(HDX_EDITOR_PATH, executablePath);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public static String getHdXEditorPath() {
|
||||
return preferences.get(HDX_EDITOR_PATH, Paths.get("C:", "Program Files", "HxD", "HxD.exe").toString());
|
||||
}
|
||||
}
|
||||
|
@ -194,3 +194,33 @@ ViewPreferencesPanel.useBestViewerRadioButton.toolTipText=For example, change fr
|
||||
ViewPreferencesPanel.useBestViewerRadioButton.text=Change to the most specific file viewer
|
||||
ViewPreferencesPanel.fileNameTranslationColumnCheckbox.text=Add column in result viewer for file name translation
|
||||
DataContentViewerHex.launchHxDButton.text=Launch in HxD
|
||||
ExternalViewerGlobalSettingsPanel.jButton2.text=jButton2
|
||||
ExternalViewerGlobalSettingsPanel.newRuleButton1.text=New Rule
|
||||
ExternalViewerGlobalSettingsPanel.newRuleButton.text=New Rule
|
||||
ExternalViewerGlobalSettingsPanel.browseHxDDirectory.text=Browse
|
||||
ExternalViewerGlobalSettingsPanel.jLabel2.text=Set launchable content viewer extensions
|
||||
ExternalViewerGlobalSettingsPanel.jLabel1.text=HxD Editor Path:
|
||||
ExternalViewerGlobalSettingsPanel.editRuleButton.text=Edit Rule
|
||||
ExternalViewerGlobalSettingsPanel.deleteRuleButton.text=Delete Rule
|
||||
ExternalViewerGlobalSettingsPanel.externalViewerTitleLabel.text=Set aplication viewer to use for files with specific mime types/extensions:
|
||||
ExternalViewerGlobalSettingsPanel.jTable1.columnModel.title1=Application
|
||||
ExternalViewerGlobalSettingsPanel.jTable1.columnModel.title0=Mime type/Extension
|
||||
AddExternalViewerRulePanel.nameLabel.text=MIME type or extension
|
||||
AddExternalViewerRulePanel.browseButton.text=Browse
|
||||
AddExternalViewerRulePanel.exePathTextField.text=
|
||||
AddExternalViewerRulePanel.exePathLabel.text=Path of the program to use for files with this type or extension
|
||||
AddExternalViewerRulePanel.extRadioButton.text=Extension
|
||||
AddExternalViewerRulePanel.mimeRadioButton.text=MIME type
|
||||
AddExternalViewerRulePanel.nameTextField.text=
|
||||
ExternalViewerGlobalSettingsPanel.jButton2.text_1=jButton2
|
||||
ExternalViewerGlobalSettingsPanel.newRuleButton1.text_1=New Rule
|
||||
ExternalViewerGlobalSettingsPanel.newRuleButton.text_1=New Rule
|
||||
ExternalViewerGlobalSettingsPanel.browseHxDDirectory.text_1=Browse
|
||||
ExternalViewerGlobalSettingsPanel.jLabel2.text_1=Set launchable content viewer extensions
|
||||
ExternalViewerGlobalSettingsPanel.jLabel1.text_1=HxD Editor Path:
|
||||
ExternalViewerGlobalSettingsPanel.HxDPath.text=C:/Program Files/HxD/HxD.exe
|
||||
ExternalViewerGlobalSettingsPanel.editRuleButton.text_1=Edit Rule
|
||||
ExternalViewerGlobalSettingsPanel.deleteRuleButton.text_1=Delete Rule
|
||||
ExternalViewerGlobalSettingsPanel.externalViewerTitleLabel.text_1=Set aplication viewer to use for files with specific mime types/extensions:
|
||||
ExternalViewerGlobalSettingsPanel.jTable1.columnModel.title1_1=Application
|
||||
ExternalViewerGlobalSettingsPanel.jTable1.columnModel.title0_1=Mime type/Extension
|
||||
|
@ -32,13 +32,12 @@ import javax.swing.JMenuItem;
|
||||
import javax.swing.JOptionPane;
|
||||
import javax.swing.text.BadLocationException;
|
||||
import javax.swing.text.Utilities;
|
||||
import org.openide.modules.InstalledFileLocator;
|
||||
import org.openide.nodes.Node;
|
||||
import org.openide.util.lookup.ServiceProvider;
|
||||
import org.sleuthkit.autopsy.casemodule.Case;
|
||||
import org.sleuthkit.autopsy.casemodule.NoCurrentCaseException;
|
||||
import org.sleuthkit.autopsy.core.UserPreferences;
|
||||
import org.sleuthkit.autopsy.corecomponentinterfaces.DataContentViewer;
|
||||
import org.sleuthkit.autopsy.coreutils.ExecUtil;
|
||||
import org.sleuthkit.autopsy.datamodel.ContentUtils;
|
||||
import org.sleuthkit.autopsy.datamodel.DataConversion;
|
||||
import org.sleuthkit.datamodel.Content;
|
||||
@ -356,22 +355,33 @@ public class DataContentViewerHex extends javax.swing.JPanel implements DataCont
|
||||
|
||||
private void launchHxDButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_launchHxDButtonActionPerformed
|
||||
try {
|
||||
File HdXExecutable = new File(UserPreferences.getHdXEditorPath());
|
||||
if(!HdXExecutable.exists() || !HdXExecutable.canExecute()) {
|
||||
JOptionPane.showMessageDialog(null, "Unable to launch HxD Editor. "
|
||||
+ "Please set-up the HdX install location in Tools -> "
|
||||
+ "Options -> External Viewer");
|
||||
return;
|
||||
}
|
||||
|
||||
String tempDirectory = Case.getCurrentCaseThrows().getTempDirectory();
|
||||
File dataSourceInTempDirectory = Paths.get(tempDirectory, dataSource.getId() + dataSource.getName()).toFile();
|
||||
ContentUtils.writeToFile(dataSource, dataSourceInTempDirectory);
|
||||
|
||||
String HdXExecutableToFind = Paths.get("HxD", "HxD64.exe").toString();
|
||||
File HdXExecutable = InstalledFileLocator.getDefault().locate(HdXExecutableToFind, DataContentViewerHex.class.getPackage().getName(), false);
|
||||
if (null == HdXExecutable) {
|
||||
throw new IOException(String.format("Could not find HdXExecutable at %s", HdXExecutableToFind));
|
||||
try {
|
||||
ProcessBuilder launchHdXExecutable = new ProcessBuilder();
|
||||
launchHdXExecutable.command(String.format("\"%s\" \"%s\"",
|
||||
HdXExecutable.getAbsolutePath(),
|
||||
dataSourceInTempDirectory.getAbsolutePath()));
|
||||
launchHdXExecutable.start();
|
||||
} catch (IOException ex) {
|
||||
JOptionPane.showMessageDialog(null, "Unable to launch HxD Editor. "
|
||||
+ "Please set-up the HdX install location in Tools -> "
|
||||
+ "Options -> External Viewer");
|
||||
dataSourceInTempDirectory.delete();
|
||||
}
|
||||
|
||||
ProcessBuilder launchHdXExecutable = new ProcessBuilder();
|
||||
launchHdXExecutable.command(String.format("%s \"%s\"", HdXExecutable.getAbsolutePath(), dataSourceInTempDirectory.getAbsolutePath()));
|
||||
ExecUtil.execute(launchHdXExecutable);
|
||||
} catch (NoCurrentCaseException | IOException ex) {
|
||||
logger.log(Level.SEVERE, "Unable to launch HxD Editor", ex);
|
||||
//TODO - Make pop-up appear saying there were problems attempting to launch editor
|
||||
logger.log(Level.SEVERE, "Unable to copy file into temp directory", ex);
|
||||
//Should we add a pop-up for this?
|
||||
}
|
||||
}//GEN-LAST:event_launchHxDButtonActionPerformed
|
||||
|
||||
@ -546,6 +556,7 @@ public class DataContentViewerHex extends javax.swing.JPanel implements DataCont
|
||||
goToPageLabel.setVisible(isVisible);
|
||||
goToOffsetTextField.setVisible(isVisible);
|
||||
goToOffsetLabel.setVisible(isVisible);
|
||||
launchHxDButton.setVisible(isVisible);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -124,12 +124,9 @@ ExternalViewerGlobalSettingsPanel.jTable1.columnModel.title2_1=Title 3
|
||||
ExternalViewerGlobalSettingsPanel.newRuleButton1.text=New Rule
|
||||
ExternalViewerGlobalSettingsPanel.editRuleButton.text=Edit Rule
|
||||
ExternalViewerGlobalSettingsPanel.deleteRuleButton.text=Delete Rule
|
||||
ExternalViewerGlobalSettingsPanel.externalViewerTitleLabel.text=Set aplication viewer to use for files with specific mime types/extensions:
|
||||
ExternalViewerGlobalSettingsPanel.externalViewerTitleLabel.text=Add your custom rules for external viewers:
|
||||
ExternalViewerGlobalSettingsPanel.newRuleButton.text=New Rule
|
||||
ExternalViewerGlobalSettingsPanel.jTable1.columnModel.title1=Application
|
||||
ExternalViewerGlobalSettingsPanel.jTable1.columnModel.title0=Mime type/Extension
|
||||
ExternalViewerGlobalSettingsPanel.jLabel1.text=HxD Editor Path:
|
||||
ExternalViewerGlobalSettingsPanel.jButton2.text=jButton2
|
||||
ExternalViewerGlobalSettingsPanel.jLabel2.text=Set launchable content viewer extensions
|
||||
ExternalViewerGlobalSettingsPanel.jLabel1.text=HxD Editor Path:
|
||||
ExternalViewerGlobalSettingsPanel.browseHxDDirectory.text=Browse
|
||||
ExternalViewerGlobalSettingsPanel.HxDPath.text=C:/Program Files/HxD/HxD.exe
|
||||
ExternalViewerGlobalSettingsPanel.jLabel2.text=Add content viewer extensions:
|
||||
|
@ -282,9 +282,6 @@
|
||||
<Component class="javax.swing.JTextField" name="HxDPath">
|
||||
<Properties>
|
||||
<Property name="editable" type="boolean" value="false"/>
|
||||
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||
<ResourceString bundle="org/sleuthkit/autopsy/directorytree/Bundle.properties" key="ExternalViewerGlobalSettingsPanel.HxDPath.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||
</Property>
|
||||
</Properties>
|
||||
</Component>
|
||||
<Component class="javax.swing.JLabel" name="jLabel1">
|
||||
|
@ -18,6 +18,7 @@
|
||||
*/
|
||||
package org.sleuthkit.autopsy.directorytree;
|
||||
|
||||
import java.awt.Color;
|
||||
import java.io.File;
|
||||
import java.util.ArrayList;
|
||||
import javax.swing.JFileChooser;
|
||||
@ -27,7 +28,7 @@ import javax.swing.table.AbstractTableModel;
|
||||
import org.openide.util.NbBundle;
|
||||
import org.netbeans.spi.options.OptionsPanelController;
|
||||
import org.sleuthkit.autopsy.casemodule.GeneralFilter;
|
||||
import org.sleuthkit.autopsy.coreutils.ModuleSettings;
|
||||
import org.sleuthkit.autopsy.core.UserPreferences;
|
||||
|
||||
/**
|
||||
* An options panel for the user to create, edit, and delete associations for
|
||||
@ -39,8 +40,6 @@ final class ExternalViewerGlobalSettingsPanel extends javax.swing.JPanel impleme
|
||||
|
||||
private RulesTableModel rulesTableModel;
|
||||
private java.util.List<ExternalViewerRule> rules;
|
||||
private static final String MODULE_NAME = ExternalViewerGlobalSettingsPanel.class.getName();
|
||||
private static final String HXD_PATH_NAME = "HxDExecutablePath";
|
||||
|
||||
/**
|
||||
* Creates new form ExternalViewerGlobalSettingsPanel
|
||||
@ -171,7 +170,6 @@ final class ExternalViewerGlobalSettingsPanel extends javax.swing.JPanel impleme
|
||||
);
|
||||
|
||||
HxDPath.setEditable(false);
|
||||
HxDPath.setText(org.openide.util.NbBundle.getMessage(ExternalViewerGlobalSettingsPanel.class, "ExternalViewerGlobalSettingsPanel.HxDPath.text")); // NOI18N
|
||||
|
||||
org.openide.awt.Mnemonics.setLocalizedText(jLabel1, org.openide.util.NbBundle.getMessage(ExternalViewerGlobalSettingsPanel.class, "ExternalViewerGlobalSettingsPanel.jLabel1.text")); // NOI18N
|
||||
|
||||
@ -245,25 +243,6 @@ final class ExternalViewerGlobalSettingsPanel extends javax.swing.JPanel impleme
|
||||
);
|
||||
}// </editor-fold>//GEN-END:initComponents
|
||||
|
||||
private void browseHxDDirectoryActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_browseHxDDirectoryActionPerformed
|
||||
JFileChooser fileWindow = new JFileChooser();
|
||||
fileWindow.setFileSelectionMode(JFileChooser.FILES_ONLY);
|
||||
GeneralFilter exeFilter = new GeneralFilter(GeneralFilter.EXECUTABLE_EXTS, GeneralFilter.EXECUTABLE_DESC);
|
||||
File HxDPathFile = new File(HxDPath.getText());
|
||||
if(HxDPathFile.exists() && HxDPathFile.canExecute()) {
|
||||
fileWindow.setCurrentDirectory(new File(HxDPath.getText()));
|
||||
}
|
||||
fileWindow.setDragEnabled(false);
|
||||
fileWindow.setFileFilter(exeFilter);
|
||||
fileWindow.setMultiSelectionEnabled(false);
|
||||
int returnVal = fileWindow.showSaveDialog(this);
|
||||
if(returnVal == JFileChooser.APPROVE_OPTION) {
|
||||
File HxDExecutable = fileWindow.getSelectedFile();
|
||||
HxDPath.setText(HxDExecutable.getAbsolutePath());
|
||||
firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
|
||||
}
|
||||
}//GEN-LAST:event_browseHxDDirectoryActionPerformed
|
||||
|
||||
private void newRuleButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_newRuleButtonActionPerformed
|
||||
AddExternalViewerRuleDialog dialog = new AddExternalViewerRuleDialog();
|
||||
AddExternalViewerRuleDialog.BUTTON_PRESSED result = dialog.getResult();
|
||||
@ -321,18 +300,43 @@ final class ExternalViewerGlobalSettingsPanel extends javax.swing.JPanel impleme
|
||||
firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
|
||||
}//GEN-LAST:event_deleteRuleButtonActionPerformed
|
||||
|
||||
private void browseHxDDirectoryActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_browseHxDDirectoryActionPerformed
|
||||
JFileChooser fileWindow = new JFileChooser();
|
||||
fileWindow.setFileSelectionMode(JFileChooser.FILES_ONLY);
|
||||
GeneralFilter exeFilter = new GeneralFilter(GeneralFilter.EXECUTABLE_EXTS, GeneralFilter.EXECUTABLE_DESC);
|
||||
File HxDPathFile = new File(HxDPath.getText());
|
||||
if(HxDPathFile.exists() && HxDPathFile.canExecute()) {
|
||||
fileWindow.setCurrentDirectory(new File(HxDPath.getText()));
|
||||
}
|
||||
fileWindow.setDragEnabled(false);
|
||||
fileWindow.setFileFilter(exeFilter);
|
||||
fileWindow.setMultiSelectionEnabled(false);
|
||||
int returnVal = fileWindow.showSaveDialog(this);
|
||||
if(returnVal == JFileChooser.APPROVE_OPTION) {
|
||||
File HxDExecutable = fileWindow.getSelectedFile();
|
||||
HxDPath.setForeground(Color.BLACK);
|
||||
HxDPath.setText(HxDExecutable.getAbsolutePath());
|
||||
firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
|
||||
}
|
||||
}//GEN-LAST:event_browseHxDDirectoryActionPerformed
|
||||
|
||||
@Override
|
||||
public void store() {
|
||||
ExternalViewerRulesManager.getInstance().setUserRules(rules);
|
||||
ModuleSettings.setConfigSetting(MODULE_NAME, HXD_PATH_NAME, HxDPath.getText());
|
||||
UserPreferences.setHdXEditorPath(HxDPath.getText());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void load() {
|
||||
rules = ExternalViewerRulesManager.getInstance().getUserRules();
|
||||
if(ModuleSettings.settingExists(MODULE_NAME, HXD_PATH_NAME)) {
|
||||
HxDPath.setText(ModuleSettings.getConfigSetting(MODULE_NAME, HXD_PATH_NAME));
|
||||
}
|
||||
String editorPath = UserPreferences.getHdXEditorPath();
|
||||
File HdXExecutable = new File(editorPath);
|
||||
if(HdXExecutable.exists() || HdXExecutable.canExecute()) {
|
||||
HxDPath.setText(editorPath);
|
||||
} else {
|
||||
HxDPath.setForeground(Color.RED);
|
||||
HxDPath.setText(editorPath);
|
||||
}
|
||||
rulesTableModel.fireTableDataChanged();
|
||||
checkButtons();
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user