From f110fe73d897a2f64a536c330a2350814a717262 Mon Sep 17 00:00:00 2001 From: momo Date: Fri, 16 Oct 2015 15:20:28 -0400 Subject: [PATCH 01/13] initial change to adding multi types --- .../modules/filetypeid/FileTypeDetector.java | 38 +++---- .../FileTypeIdGlobalSettingsPanel.form | 99 +++++++++---------- .../FileTypeIdGlobalSettingsPanel.java | 51 +++++----- .../UserDefinedFileTypesManager.java | 33 +++++-- 4 files changed, 118 insertions(+), 103 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/modules/filetypeid/FileTypeDetector.java b/Core/src/org/sleuthkit/autopsy/modules/filetypeid/FileTypeDetector.java index b2ff1e5ada..9f969410af 100644 --- a/Core/src/org/sleuthkit/autopsy/modules/filetypeid/FileTypeDetector.java +++ b/Core/src/org/sleuthkit/autopsy/modules/filetypeid/FileTypeDetector.java @@ -19,6 +19,7 @@ package org.sleuthkit.autopsy.modules.filetypeid; import java.util.ArrayList; +import java.util.List; import java.util.Map; import java.util.SortedSet; import org.apache.tika.Tika; @@ -38,15 +39,14 @@ public class FileTypeDetector { private static final Tika tika = new Tika(); private static final int BUFFER_SIZE = 64 * 1024; private final byte buffer[] = new byte[BUFFER_SIZE]; - private final Map userDefinedFileTypes; + private final Map> userDefinedFileTypes; /** * Constructs an object that detects the type of a file by an inspection of * its contents. * * @throws FileTypeDetector.FileTypeDetectorInitException if an - * initialization - * error occurs. + * initialization error occurs. */ public FileTypeDetector() throws FileTypeDetectorInitException { try { @@ -216,23 +216,25 @@ public class FileTypeDetector { * @throws TskCoreException */ private String detectUserDefinedType(AbstractFile file) throws TskCoreException { - for (FileType fileType : userDefinedFileTypes.values()) { - if (fileType.matches(file)) { - if (fileType.alertOnMatch()) { - BlackboardArtifact artifact; - artifact = file.newArtifact(BlackboardArtifact.ARTIFACT_TYPE.TSK_INTERESTING_FILE_HIT); - BlackboardAttribute setNameAttribute = new BlackboardAttribute(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_SET_NAME.getTypeID(), FileTypeIdModuleFactory.getModuleName(), fileType.getFilesSetName()); - artifact.addAttribute(setNameAttribute); + for (List fileTypes : userDefinedFileTypes.values()) { + for (FileType fileType : fileTypes) { + if (fileType.matches(file)) { + if (fileType.alertOnMatch()) { + BlackboardArtifact artifact; + artifact = file.newArtifact(BlackboardArtifact.ARTIFACT_TYPE.TSK_INTERESTING_FILE_HIT); + BlackboardAttribute setNameAttribute = new BlackboardAttribute(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_SET_NAME.getTypeID(), FileTypeIdModuleFactory.getModuleName(), fileType.getFilesSetName()); + artifact.addAttribute(setNameAttribute); - /** - * Use the MIME type as the category, i.e., the rule that - * determined this file belongs to the interesting files - * set. - */ - BlackboardAttribute ruleNameAttribute = new BlackboardAttribute(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_CATEGORY.getTypeID(), FileTypeIdModuleFactory.getModuleName(), fileType.getMimeType()); - artifact.addAttribute(ruleNameAttribute); + /** + * Use the MIME type as the category, i.e., the rule + * that determined this file belongs to the interesting + * files set. + */ + BlackboardAttribute ruleNameAttribute = new BlackboardAttribute(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_CATEGORY.getTypeID(), FileTypeIdModuleFactory.getModuleName(), fileType.getMimeType()); + artifact.addAttribute(ruleNameAttribute); + } + return fileType.getMimeType(); } - return fileType.getMimeType(); } } return null; diff --git a/Core/src/org/sleuthkit/autopsy/modules/filetypeid/FileTypeIdGlobalSettingsPanel.form b/Core/src/org/sleuthkit/autopsy/modules/filetypeid/FileTypeIdGlobalSettingsPanel.form index 1d124ea29d..f45cc6f1f0 100644 --- a/Core/src/org/sleuthkit/autopsy/modules/filetypeid/FileTypeIdGlobalSettingsPanel.form +++ b/Core/src/org/sleuthkit/autopsy/modules/filetypeid/FileTypeIdGlobalSettingsPanel.form @@ -33,59 +33,58 @@ - - - - - - - - - - - - - - - - - - + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - diff --git a/Core/src/org/sleuthkit/autopsy/modules/filetypeid/FileTypeIdGlobalSettingsPanel.java b/Core/src/org/sleuthkit/autopsy/modules/filetypeid/FileTypeIdGlobalSettingsPanel.java index cebce19890..3106651125 100644 --- a/Core/src/org/sleuthkit/autopsy/modules/filetypeid/FileTypeIdGlobalSettingsPanel.java +++ b/Core/src/org/sleuthkit/autopsy/modules/filetypeid/FileTypeIdGlobalSettingsPanel.java @@ -59,7 +59,7 @@ final class FileTypeIdGlobalSettingsPanel extends IngestModuleGlobalSettingsPane * is obtained from the user-defined types manager. */ private DefaultListModel typesListModel; - private Map fileTypes; + private Map> fileTypes; /** * This panel implements a property change listener that listens to ingest @@ -250,31 +250,32 @@ final class FileTypeIdGlobalSettingsPanel extends IngestModuleGlobalSettingsPane */ private void populateTypeDetailsComponents() { String mimeType = typesList.getSelectedValue(); - FileType fileType = fileTypes.get(mimeType); - if (null != fileType) { - mimeTypeTextField.setText(fileType.getMimeType()); - Signature signature = fileType.getSignature(); - FileType.Signature.Type sigType = signature.getType(); - signatureTypeComboBox.setSelectedItem(sigType == FileType.Signature.Type.RAW ? FileTypeIdGlobalSettingsPanel.RAW_SIGNATURE_TYPE_COMBO_BOX_ITEM : FileTypeIdGlobalSettingsPanel.ASCII_SIGNATURE_TYPE_COMBO_BOX_ITEM); - String signatureBytes; - if (Signature.Type.RAW == signature.getType()) { - signatureBytes = DatatypeConverter.printHexBinary(signature.getSignatureBytes()); - } else { - try { - signatureBytes = new String(signature.getSignatureBytes(), "UTF-8"); - } catch (UnsupportedEncodingException ex) { - JOptionPane.showMessageDialog(null, - ex.getLocalizedMessage(), - NbBundle.getMessage(FileTypeIdGlobalSettingsPanel.class, "FileTypeIdGlobalSettingsPanel.JOptionPane.storeFailed.title"), - JOptionPane.ERROR_MESSAGE); - signatureBytes = ""; + for (FileType fileType : fileTypes.get(mimeType)) { + if (null != fileType) { + mimeTypeTextField.setText(fileType.getMimeType()); + Signature signature = fileType.getSignature(); + FileType.Signature.Type sigType = signature.getType(); + signatureTypeComboBox.setSelectedItem(sigType == FileType.Signature.Type.RAW ? FileTypeIdGlobalSettingsPanel.RAW_SIGNATURE_TYPE_COMBO_BOX_ITEM : FileTypeIdGlobalSettingsPanel.ASCII_SIGNATURE_TYPE_COMBO_BOX_ITEM); + String signatureBytes; + if (Signature.Type.RAW == signature.getType()) { + signatureBytes = DatatypeConverter.printHexBinary(signature.getSignatureBytes()); + } else { + try { + signatureBytes = new String(signature.getSignatureBytes(), "UTF-8"); + } catch (UnsupportedEncodingException ex) { + JOptionPane.showMessageDialog(null, + ex.getLocalizedMessage(), + NbBundle.getMessage(FileTypeIdGlobalSettingsPanel.class, "FileTypeIdGlobalSettingsPanel.JOptionPane.storeFailed.title"), + JOptionPane.ERROR_MESSAGE); + signatureBytes = ""; + } } + signatureTextField.setText(signatureBytes); + offsetTextField.setText(Long.toString(signature.getOffset())); + postHitCheckBox.setSelected(fileType.alertOnMatch()); + filesSetNameTextField.setEnabled(postHitCheckBox.isSelected()); + filesSetNameTextField.setText(fileType.getFilesSetName()); } - signatureTextField.setText(signatureBytes); - offsetTextField.setText(Long.toString(signature.getOffset())); - postHitCheckBox.setSelected(fileType.alertOnMatch()); - filesSetNameTextField.setEnabled(postHitCheckBox.isSelected()); - filesSetNameTextField.setText(fileType.getFilesSetName()); } enableButtons(); } @@ -640,7 +641,7 @@ final class FileTypeIdGlobalSettingsPanel extends IngestModuleGlobalSettingsPane */ FileType.Signature signature = new FileType.Signature(signatureBytes, offset, sigType); FileType fileType = new FileType(typeName, signature, filesSetName, postHitCheckBox.isSelected()); - fileTypes.put(typeName, fileType); + UserDefinedFileTypesManager.getInstance().addFileTypeToMap(fileTypes, fileType); updateFileTypesListModel(); typesList.setSelectedValue(fileType.getMimeType(), true); }//GEN-LAST:event_saveTypeButtonActionPerformed diff --git a/Core/src/org/sleuthkit/autopsy/modules/filetypeid/UserDefinedFileTypesManager.java b/Core/src/org/sleuthkit/autopsy/modules/filetypeid/UserDefinedFileTypesManager.java index 79de53d2f3..6719421553 100644 --- a/Core/src/org/sleuthkit/autopsy/modules/filetypeid/UserDefinedFileTypesManager.java +++ b/Core/src/org/sleuthkit/autopsy/modules/filetypeid/UserDefinedFileTypesManager.java @@ -82,7 +82,7 @@ final class UserDefinedFileTypesManager { * map is guarded by the intrinsic lock of the user-defined file types * manager for thread-safety. */ - private final Map userDefinedFileTypes = new HashMap<>(); + private final Map> userDefinedFileTypes = new HashMap<>(); /** * The combined set of user-defined file types and file types predefined by @@ -91,7 +91,7 @@ final class UserDefinedFileTypesManager { * the intrinsic lock of the user-defined file types manager for * thread-safety. */ - private final Map fileTypes = new HashMap<>(); + private final Map> fileTypes = new HashMap<>(); /** * Gets the singleton manager of user-defined file types characterized by @@ -122,7 +122,7 @@ final class UserDefinedFileTypesManager { * @throws * org.sleuthkit.autopsy.modules.filetypeid.UserDefinedFileTypesManager.UserDefinedFileTypesException */ - synchronized Map getFileTypes() throws UserDefinedFileTypesException { + synchronized Map> getFileTypes() throws UserDefinedFileTypesException { loadFileTypes(); /** @@ -142,7 +142,7 @@ final class UserDefinedFileTypesManager { * @throws * org.sleuthkit.autopsy.modules.filetypeid.UserDefinedFileTypesManager.UserDefinedFileTypesException */ - synchronized Map getUserDefinedFileTypes() throws UserDefinedFileTypesException { + synchronized Map> getUserDefinedFileTypes() throws UserDefinedFileTypesException { loadFileTypes(); /** @@ -182,11 +182,11 @@ final class UserDefinedFileTypesManager { private void loadPredefinedFileTypes() throws UserDefinedFileTypesException { try { FileType fileTypeXml = new FileType("text/xml", new Signature("> map, FileType fileType) { + String mimeType = fileType.getMimeType(); + if (map.containsKey(mimeType)) { + map.get(mimeType).add(fileType); + } + else { + List newList = new ArrayList<>(); + newList.add(fileType); + map.put(mimeType, newList); + } } /** @@ -241,10 +253,11 @@ final class UserDefinedFileTypesManager { * @param newFileTypes A mapping of file type names to user-defined file * types. */ - synchronized void setUserDefinedFileTypes(Map newFileTypes) throws UserDefinedFileTypesException { + synchronized void setUserDefinedFileTypes(Map> newFileTypes) throws UserDefinedFileTypesException { try { String filePath = getFileTypeDefinitionsFilePath(USER_DEFINED_TYPE_DEFINITIONS_FILE); - XmlWriter.writeFileTypes(newFileTypes.values(), filePath); + for(List fileTypes : newFileTypes.values()) + XmlWriter.writeFileTypes(fileTypes, filePath); } catch (ParserConfigurationException | FileNotFoundException | UnsupportedEncodingException | TransformerException ex) { throwUserDefinedFileTypesException(ex, "UserDefinedFileTypesManager.saveFileTypes.errorMessage"); } catch (IOException ex) { From 1a11defd76bc5f866df104d4339a4e2a9c86d716 Mon Sep 17 00:00:00 2001 From: momo Date: Fri, 16 Oct 2015 15:48:27 -0400 Subject: [PATCH 02/13] fixed remove --- .../UserDefinedFileTypesManager.java | 50 +++++++++---------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/modules/filetypeid/UserDefinedFileTypesManager.java b/Core/src/org/sleuthkit/autopsy/modules/filetypeid/UserDefinedFileTypesManager.java index 6719421553..2dfedc565a 100644 --- a/Core/src/org/sleuthkit/autopsy/modules/filetypeid/UserDefinedFileTypesManager.java +++ b/Core/src/org/sleuthkit/autopsy/modules/filetypeid/UserDefinedFileTypesManager.java @@ -183,11 +183,11 @@ final class UserDefinedFileTypesManager { try { FileType fileTypeXml = new FileType("text/xml", new Signature("> map, FileType fileType) { String mimeType = fileType.getMimeType(); if (map.containsKey(mimeType)) { map.get(mimeType).add(fileType); - } - else { + } else { List newList = new ArrayList<>(); newList.add(fileType); map.put(mimeType, newList); @@ -251,13 +250,12 @@ final class UserDefinedFileTypesManager { * Sets the user-defined file types. * * @param newFileTypes A mapping of file type names to user-defined file - * types. + * types. */ synchronized void setUserDefinedFileTypes(Map> newFileTypes) throws UserDefinedFileTypesException { try { String filePath = getFileTypeDefinitionsFilePath(USER_DEFINED_TYPE_DEFINITIONS_FILE); - for(List fileTypes : newFileTypes.values()) - XmlWriter.writeFileTypes(fileTypes, filePath); + XmlWriter.writeFileTypes(newFileTypes.values(), filePath); } catch (ParserConfigurationException | FileNotFoundException | UnsupportedEncodingException | TransformerException ex) { throwUserDefinedFileTypesException(ex, "UserDefinedFileTypesManager.saveFileTypes.errorMessage"); } catch (IOException ex) { @@ -287,7 +285,7 @@ final class UserDefinedFileTypesManager { * Writes a set of file type definitions to an XML file. * * @param fileTypes A collection of file types. - * @param filePath The path to the destination file. + * @param filePath The path to the destination file. * * @throws ParserConfigurationException * @throws IOException @@ -295,13 +293,15 @@ final class UserDefinedFileTypesManager { * @throws UnsupportedEncodingException * @throws TransformerException */ - private static void writeFileTypes(Collection fileTypes, String filePath) throws ParserConfigurationException, IOException, FileNotFoundException, UnsupportedEncodingException, TransformerException { + private static void writeFileTypes(Collection> fileTypes, String filePath) throws ParserConfigurationException, IOException, FileNotFoundException, UnsupportedEncodingException, TransformerException { Document doc = XMLUtil.createDocument(); Element fileTypesElem = doc.createElement(FILE_TYPES_TAG_NAME); doc.appendChild(fileTypesElem); - for (FileType fileType : fileTypes) { - Element fileTypeElem = XmlWriter.createFileTypeElement(fileType, doc); - fileTypesElem.appendChild(fileTypeElem); + for (List fileTypeList : fileTypes) { + for (FileType fileType : fileTypeList) { + Element fileTypeElem = XmlWriter.createFileTypeElement(fileType, doc); + fileTypesElem.appendChild(fileTypeElem); + } } XMLUtil.saveDocument(doc, ENCODING_FOR_XML_FILE, filePath); } @@ -310,7 +310,7 @@ final class UserDefinedFileTypesManager { * Creates an XML representation of a file type. * * @param fileType The file type object. - * @param doc The WC3 DOM object to use to create the XML. + * @param doc The WC3 DOM object to use to create the XML. * * @return An XML element. */ @@ -326,9 +326,9 @@ final class UserDefinedFileTypesManager { /** * Add a MIME type child element to a file type XML element. * - * @param fileType The file type to use as a content source. + * @param fileType The file type to use as a content source. * @param fileTypeElem The parent file type element. - * @param doc The WC3 DOM object to use to create the XML. + * @param doc The WC3 DOM object to use to create the XML. */ private static void addMimeTypeElement(FileType fileType, Element fileTypeElem, Document doc) { Element typeNameElem = doc.createElement(MIME_TYPE_TAG_NAME); @@ -339,9 +339,9 @@ final class UserDefinedFileTypesManager { /** * Add a signature child element to a file type XML element. * - * @param fileType The file type to use as a content source. + * @param fileType The file type to use as a content source. * @param fileTypeElem The parent file type element. - * @param doc The WC3 DOM object to use to create the XML. + * @param doc The WC3 DOM object to use to create the XML. */ private static void addSignatureElement(FileType fileType, Element fileTypeElem, Document doc) { Signature signature = fileType.getSignature(); @@ -362,9 +362,9 @@ final class UserDefinedFileTypesManager { /** * Add an interesting files set element to a file type XML element. * - * @param fileType The file type to use as a content source. + * @param fileType The file type to use as a content source. * @param fileTypeElem The parent file type element. - * @param doc The WC3 DOM object to use to create the XML. + * @param doc The WC3 DOM object to use to create the XML. */ private static void addInterestingFilesSetElement(FileType fileType, Element fileTypeElem, Document doc) { if (!fileType.getFilesSetName().isEmpty()) { @@ -377,7 +377,7 @@ final class UserDefinedFileTypesManager { /** * Add an alert attribute to a file type XML element. * - * @param fileType The file type to use as a content source. + * @param fileType The file type to use as a content source. * @param fileTypeElem The parent file type element. */ private static void addAlertAttribute(FileType fileType, Element fileTypeElem) { @@ -500,7 +500,7 @@ final class UserDefinedFileTypesManager { /** * Gets the text content of a single child element. * - * @param elem The parent element. + * @param elem The parent element. * @param tagName The tag name of the child element. * * @return The text content. @@ -517,9 +517,9 @@ final class UserDefinedFileTypesManager { * Logs an exception, bundles the exception with a simple message in a * uniform exception type, and throws the wrapper exception. * - * @param ex The exception to wrap. + * @param ex The exception to wrap. * @param messageKey A key into the bundle file that maps to the desired - * message. + * message. * * @throws * org.sleuthkit.autopsy.modules.filetypeid.UserDefinedFileTypesManager.UserDefinedFileTypesException From 88942afc85038b0c333ffe407c078fa031a901f8 Mon Sep 17 00:00:00 2001 From: momo Date: Mon, 19 Oct 2015 09:21:30 -0400 Subject: [PATCH 03/13] change type to Filetype --- .../autopsy/modules/filetypeid/FileType.java | 45 ++++++ .../FileTypeIdGlobalSettingsPanel.form | 2 +- .../FileTypeIdGlobalSettingsPanel.java | 146 +++++++++--------- .../UserDefinedFileTypesManager.java | 7 + 4 files changed, 127 insertions(+), 73 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/modules/filetypeid/FileType.java b/Core/src/org/sleuthkit/autopsy/modules/filetypeid/FileType.java index 80ca8a13df..d8b0c1e74f 100644 --- a/Core/src/org/sleuthkit/autopsy/modules/filetypeid/FileType.java +++ b/Core/src/org/sleuthkit/autopsy/modules/filetypeid/FileType.java @@ -19,6 +19,7 @@ package org.sleuthkit.autopsy.modules.filetypeid; import java.util.Arrays; +import java.util.Objects; import java.util.logging.Level; import org.sleuthkit.autopsy.coreutils.Logger; import org.sleuthkit.datamodel.AbstractFile; @@ -102,6 +103,31 @@ class FileType { String getFilesSetName() { return interestingFilesSetName; } + + @Override + public String toString() { + return this.mimeType; + } + + @Override + public boolean equals(Object other) { + if(other != null && other instanceof FileType) { + FileType that = (FileType) other; + if(this.getMimeType().equals(that.getMimeType()) && this.getSignature().equals(that.getSignature())) + return true; + } + return false; + } + + @Override + public int hashCode() { + int hash = 7; + hash = 67 * hash + Objects.hashCode(this.mimeType); + hash = 67 * hash + Objects.hashCode(this.signature); + hash = 67 * hash + Objects.hashCode(this.interestingFilesSetName); + hash = 67 * hash + (this.alert ? 1 : 0); + return hash; + } /** * A file signature consisting of a sequence of bytes at a specific offset @@ -193,6 +219,25 @@ class FileType { return false; } } + + @Override + public boolean equals(Object other) { + if (other != null && other instanceof Signature) { + Signature that = (Signature) other; + if(this.getSignatureBytes() == that.getSignatureBytes() && this.getOffset() == that.getOffset()) + return true; + } + return false; + } + + @Override + public int hashCode() { + int hash = 3; + hash = 97 * hash + Arrays.hashCode(this.signatureBytes); + hash = 97 * hash + (int) (this.offset ^ (this.offset >>> 32)); + hash = 97 * hash + Objects.hashCode(this.type); + return hash; + } } } diff --git a/Core/src/org/sleuthkit/autopsy/modules/filetypeid/FileTypeIdGlobalSettingsPanel.form b/Core/src/org/sleuthkit/autopsy/modules/filetypeid/FileTypeIdGlobalSettingsPanel.form index f45cc6f1f0..bfc83ee709 100644 --- a/Core/src/org/sleuthkit/autopsy/modules/filetypeid/FileTypeIdGlobalSettingsPanel.form +++ b/Core/src/org/sleuthkit/autopsy/modules/filetypeid/FileTypeIdGlobalSettingsPanel.form @@ -180,7 +180,7 @@ - + diff --git a/Core/src/org/sleuthkit/autopsy/modules/filetypeid/FileTypeIdGlobalSettingsPanel.java b/Core/src/org/sleuthkit/autopsy/modules/filetypeid/FileTypeIdGlobalSettingsPanel.java index 3106651125..72dffb1e9c 100644 --- a/Core/src/org/sleuthkit/autopsy/modules/filetypeid/FileTypeIdGlobalSettingsPanel.java +++ b/Core/src/org/sleuthkit/autopsy/modules/filetypeid/FileTypeIdGlobalSettingsPanel.java @@ -58,7 +58,7 @@ final class FileTypeIdGlobalSettingsPanel extends IngestModuleGlobalSettingsPane * the MIME types to file type objects lies behind the list model. This map * is obtained from the user-defined types manager. */ - private DefaultListModel typesListModel; + private DefaultListModel typesListModel; private Map> fileTypes; /** @@ -240,7 +240,12 @@ final class FileTypeIdGlobalSettingsPanel extends IngestModuleGlobalSettingsPane Collections.sort(mimeTypes); typesListModel.clear(); for (String mimeType : mimeTypes) { - typesListModel.addElement(mimeType); + int i = 0; + for (FileType fileType : fileTypes.get(mimeType)) { + typesListModel.addElement(fileType); + i++; + } + } } @@ -249,33 +254,31 @@ final class FileTypeIdGlobalSettingsPanel extends IngestModuleGlobalSettingsPane * panel based on the current selection in the file types list. */ private void populateTypeDetailsComponents() { - String mimeType = typesList.getSelectedValue(); - for (FileType fileType : fileTypes.get(mimeType)) { - if (null != fileType) { - mimeTypeTextField.setText(fileType.getMimeType()); - Signature signature = fileType.getSignature(); - FileType.Signature.Type sigType = signature.getType(); - signatureTypeComboBox.setSelectedItem(sigType == FileType.Signature.Type.RAW ? FileTypeIdGlobalSettingsPanel.RAW_SIGNATURE_TYPE_COMBO_BOX_ITEM : FileTypeIdGlobalSettingsPanel.ASCII_SIGNATURE_TYPE_COMBO_BOX_ITEM); - String signatureBytes; - if (Signature.Type.RAW == signature.getType()) { - signatureBytes = DatatypeConverter.printHexBinary(signature.getSignatureBytes()); - } else { - try { - signatureBytes = new String(signature.getSignatureBytes(), "UTF-8"); - } catch (UnsupportedEncodingException ex) { - JOptionPane.showMessageDialog(null, - ex.getLocalizedMessage(), - NbBundle.getMessage(FileTypeIdGlobalSettingsPanel.class, "FileTypeIdGlobalSettingsPanel.JOptionPane.storeFailed.title"), - JOptionPane.ERROR_MESSAGE); - signatureBytes = ""; - } + FileType fileType = typesList.getSelectedValue(); + if (null != fileType) { + mimeTypeTextField.setText(fileType.getMimeType()); + Signature signature = fileType.getSignature(); + FileType.Signature.Type sigType = signature.getType(); + signatureTypeComboBox.setSelectedItem(sigType == FileType.Signature.Type.RAW ? FileTypeIdGlobalSettingsPanel.RAW_SIGNATURE_TYPE_COMBO_BOX_ITEM : FileTypeIdGlobalSettingsPanel.ASCII_SIGNATURE_TYPE_COMBO_BOX_ITEM); + String signatureBytes; + if (Signature.Type.RAW == signature.getType()) { + signatureBytes = DatatypeConverter.printHexBinary(signature.getSignatureBytes()); + } else { + try { + signatureBytes = new String(signature.getSignatureBytes(), "UTF-8"); + } catch (UnsupportedEncodingException ex) { + JOptionPane.showMessageDialog(null, + ex.getLocalizedMessage(), + NbBundle.getMessage(FileTypeIdGlobalSettingsPanel.class, "FileTypeIdGlobalSettingsPanel.JOptionPane.storeFailed.title"), + JOptionPane.ERROR_MESSAGE); + signatureBytes = ""; } - signatureTextField.setText(signatureBytes); - offsetTextField.setText(Long.toString(signature.getOffset())); - postHitCheckBox.setSelected(fileType.alertOnMatch()); - filesSetNameTextField.setEnabled(postHitCheckBox.isSelected()); - filesSetNameTextField.setText(fileType.getFilesSetName()); } + signatureTextField.setText(signatureBytes); + offsetTextField.setText(Long.toString(signature.getOffset())); + postHitCheckBox.setSelected(fileType.alertOnMatch()); + filesSetNameTextField.setEnabled(postHitCheckBox.isSelected()); + filesSetNameTextField.setText(fileType.getFilesSetName()); } enableButtons(); } @@ -340,7 +343,7 @@ final class FileTypeIdGlobalSettingsPanel extends IngestModuleGlobalSettingsPane private void initComponents() { typesScrollPane = new javax.swing.JScrollPane(); - typesList = new javax.swing.JList(); + typesList = new javax.swing.JList(); separator = new javax.swing.JSeparator(); mimeTypeLabel = new javax.swing.JLabel(); mimeTypeTextField = new javax.swing.JTextField(); @@ -452,48 +455,47 @@ final class FileTypeIdGlobalSettingsPanel extends IngestModuleGlobalSettingsPane .addGap(30, 30, 30)) .addGroup(layout.createSequentialGroup() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(jLabel2) .addGroup(layout.createSequentialGroup() - .addGap(10, 10, 10) - .addComponent(deleteTypeButton, javax.swing.GroupLayout.PREFERRED_SIZE, 70, javax.swing.GroupLayout.PREFERRED_SIZE) - .addGap(18, 18, 18) - .addComponent(newTypeButton, javax.swing.GroupLayout.PREFERRED_SIZE, 70, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addComponent(typesScrollPane, javax.swing.GroupLayout.PREFERRED_SIZE, 180, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(separator, javax.swing.GroupLayout.PREFERRED_SIZE, 7, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addComponent(mimeTypeLabel) - .addGap(30, 30, 30) - .addComponent(mimeTypeTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 176, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addComponent(postHitCheckBox) - .addGroup(layout.createSequentialGroup() - .addComponent(signatureTypeLabel) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(signatureTypeComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, 176, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addGroup(layout.createSequentialGroup() - .addComponent(signatureLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 73, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(hexPrefixLabel) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(signatureTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 160, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addGroup(layout.createSequentialGroup() - .addComponent(offsetLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 71, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(offsetTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 178, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() - .addGap(21, 21, 21) - .addComponent(filesSetNameLabel) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(filesSetNameTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 182, javax.swing.GroupLayout.PREFERRED_SIZE))) - .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() - .addComponent(saveTypeButton) - .addGap(8, 8, 8))) - .addContainerGap()) - .addGroup(layout.createSequentialGroup() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(jLabel2) + .addGroup(layout.createSequentialGroup() + .addGap(10, 10, 10) + .addComponent(deleteTypeButton, javax.swing.GroupLayout.PREFERRED_SIZE, 70, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(18, 18, 18) + .addComponent(newTypeButton, javax.swing.GroupLayout.PREFERRED_SIZE, 70, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addComponent(typesScrollPane, javax.swing.GroupLayout.PREFERRED_SIZE, 180, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(separator, javax.swing.GroupLayout.PREFERRED_SIZE, 7, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addComponent(mimeTypeLabel) + .addGap(30, 30, 30) + .addComponent(mimeTypeTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 176, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addComponent(postHitCheckBox) + .addGroup(layout.createSequentialGroup() + .addComponent(signatureTypeLabel) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(signatureTypeComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, 176, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGroup(layout.createSequentialGroup() + .addComponent(signatureLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 73, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(hexPrefixLabel) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(signatureTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 160, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGroup(layout.createSequentialGroup() + .addComponent(offsetLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 71, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(offsetTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 178, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() + .addGap(21, 21, 21) + .addComponent(filesSetNameLabel) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(filesSetNameTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 182, javax.swing.GroupLayout.PREFERRED_SIZE))) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() + .addComponent(saveTypeButton) + .addGap(8, 8, 8)))) .addComponent(jLabel1) .addComponent(jLabel3)) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))) @@ -558,8 +560,8 @@ final class FileTypeIdGlobalSettingsPanel extends IngestModuleGlobalSettingsPane }//GEN-LAST:event_newTypeButtonActionPerformed private void deleteTypeButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_deleteTypeButtonActionPerformed - String typeName = typesList.getSelectedValue(); - fileTypes.remove(typeName); + FileType Filetype = typesList.getSelectedValue(); + UserDefinedFileTypesManager.getInstance().removeFileTypeFromMap(fileTypes, Filetype); updateFileTypesListModel(); if (!typesListModel.isEmpty()) { typesList.setSelectedIndex(0); @@ -686,7 +688,7 @@ final class FileTypeIdGlobalSettingsPanel extends IngestModuleGlobalSettingsPane private javax.swing.JTextField signatureTextField; private javax.swing.JComboBox signatureTypeComboBox; private javax.swing.JLabel signatureTypeLabel; - private javax.swing.JList typesList; + private javax.swing.JList typesList; private javax.swing.JScrollPane typesScrollPane; // End of variables declaration//GEN-END:variables diff --git a/Core/src/org/sleuthkit/autopsy/modules/filetypeid/UserDefinedFileTypesManager.java b/Core/src/org/sleuthkit/autopsy/modules/filetypeid/UserDefinedFileTypesManager.java index 2dfedc565a..46c75e75ca 100644 --- a/Core/src/org/sleuthkit/autopsy/modules/filetypeid/UserDefinedFileTypesManager.java +++ b/Core/src/org/sleuthkit/autopsy/modules/filetypeid/UserDefinedFileTypesManager.java @@ -246,6 +246,13 @@ final class UserDefinedFileTypesManager { } } + void removeFileTypeFromMap(Map> map, FileType fileType) { + String mimeType = fileType.getMimeType(); + if (map.containsKey(mimeType)) { + map.get(mimeType).remove(fileType); + } + } + /** * Sets the user-defined file types. * From 42c8e4bb73ad1b0c38efb204ff37b64bbfe25ba1 Mon Sep 17 00:00:00 2001 From: momo Date: Mon, 19 Oct 2015 09:53:28 -0400 Subject: [PATCH 04/13] fix equals in sig --- Core/src/org/sleuthkit/autopsy/modules/filetypeid/FileType.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Core/src/org/sleuthkit/autopsy/modules/filetypeid/FileType.java b/Core/src/org/sleuthkit/autopsy/modules/filetypeid/FileType.java index d8b0c1e74f..f571e673dc 100644 --- a/Core/src/org/sleuthkit/autopsy/modules/filetypeid/FileType.java +++ b/Core/src/org/sleuthkit/autopsy/modules/filetypeid/FileType.java @@ -224,7 +224,7 @@ class FileType { public boolean equals(Object other) { if (other != null && other instanceof Signature) { Signature that = (Signature) other; - if(this.getSignatureBytes() == that.getSignatureBytes() && this.getOffset() == that.getOffset()) + if(Arrays.equals(this.getSignatureBytes(), that.getSignatureBytes()) && this.getOffset() == that.getOffset()) return true; } return false; From e574b1e9a9579a094328a5d93875e9b187ad3251 Mon Sep 17 00:00:00 2001 From: momo Date: Mon, 19 Oct 2015 10:13:47 -0400 Subject: [PATCH 05/13] revert accidental changes in form --- .../FileTypeIdGlobalSettingsPanel.form | 101 +++++++++--------- 1 file changed, 51 insertions(+), 50 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/modules/filetypeid/FileTypeIdGlobalSettingsPanel.form b/Core/src/org/sleuthkit/autopsy/modules/filetypeid/FileTypeIdGlobalSettingsPanel.form index bfc83ee709..c1f2417a99 100644 --- a/Core/src/org/sleuthkit/autopsy/modules/filetypeid/FileTypeIdGlobalSettingsPanel.form +++ b/Core/src/org/sleuthkit/autopsy/modules/filetypeid/FileTypeIdGlobalSettingsPanel.form @@ -33,58 +33,59 @@ - - - - - - - - - - + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -351,4 +352,4 @@ - + \ No newline at end of file From c07149935a8eca0a5da68ce8b1db8b1a03772e46 Mon Sep 17 00:00:00 2001 From: momo Date: Mon, 19 Oct 2015 10:15:26 -0400 Subject: [PATCH 06/13] remove unused i --- .../FileTypeIdGlobalSettingsPanel.form | 101 +++++++++--------- .../FileTypeIdGlobalSettingsPanel.java | 2 - 2 files changed, 50 insertions(+), 53 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/modules/filetypeid/FileTypeIdGlobalSettingsPanel.form b/Core/src/org/sleuthkit/autopsy/modules/filetypeid/FileTypeIdGlobalSettingsPanel.form index c1f2417a99..bfc83ee709 100644 --- a/Core/src/org/sleuthkit/autopsy/modules/filetypeid/FileTypeIdGlobalSettingsPanel.form +++ b/Core/src/org/sleuthkit/autopsy/modules/filetypeid/FileTypeIdGlobalSettingsPanel.form @@ -33,59 +33,58 @@ - - - - - - - - - - - - - - - - - - + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - @@ -352,4 +351,4 @@ - \ No newline at end of file + diff --git a/Core/src/org/sleuthkit/autopsy/modules/filetypeid/FileTypeIdGlobalSettingsPanel.java b/Core/src/org/sleuthkit/autopsy/modules/filetypeid/FileTypeIdGlobalSettingsPanel.java index 72dffb1e9c..ba82da66a5 100644 --- a/Core/src/org/sleuthkit/autopsy/modules/filetypeid/FileTypeIdGlobalSettingsPanel.java +++ b/Core/src/org/sleuthkit/autopsy/modules/filetypeid/FileTypeIdGlobalSettingsPanel.java @@ -240,10 +240,8 @@ final class FileTypeIdGlobalSettingsPanel extends IngestModuleGlobalSettingsPane Collections.sort(mimeTypes); typesListModel.clear(); for (String mimeType : mimeTypes) { - int i = 0; for (FileType fileType : fileTypes.get(mimeType)) { typesListModel.addElement(fileType); - i++; } } From 0deb5cd25a8a5042fa29eb014fdcbf9b946a7500 Mon Sep 17 00:00:00 2001 From: momo Date: Mon, 19 Oct 2015 10:17:45 -0400 Subject: [PATCH 07/13] variable name --- .../modules/filetypeid/FileTypeIdGlobalSettingsPanel.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/modules/filetypeid/FileTypeIdGlobalSettingsPanel.java b/Core/src/org/sleuthkit/autopsy/modules/filetypeid/FileTypeIdGlobalSettingsPanel.java index ba82da66a5..725594c1d5 100644 --- a/Core/src/org/sleuthkit/autopsy/modules/filetypeid/FileTypeIdGlobalSettingsPanel.java +++ b/Core/src/org/sleuthkit/autopsy/modules/filetypeid/FileTypeIdGlobalSettingsPanel.java @@ -558,8 +558,8 @@ final class FileTypeIdGlobalSettingsPanel extends IngestModuleGlobalSettingsPane }//GEN-LAST:event_newTypeButtonActionPerformed private void deleteTypeButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_deleteTypeButtonActionPerformed - FileType Filetype = typesList.getSelectedValue(); - UserDefinedFileTypesManager.getInstance().removeFileTypeFromMap(fileTypes, Filetype); + FileType fileType = typesList.getSelectedValue(); + UserDefinedFileTypesManager.getInstance().removeFileTypeFromMap(fileTypes, fileType); updateFileTypesListModel(); if (!typesListModel.isEmpty()) { typesList.setSelectedIndex(0); From cdd2c76a058de16b9a8c774f9ff0cf340253b397 Mon Sep 17 00:00:00 2001 From: momo Date: Mon, 19 Oct 2015 10:22:25 -0400 Subject: [PATCH 08/13] comments --- .../filetypeid/UserDefinedFileTypesManager.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/Core/src/org/sleuthkit/autopsy/modules/filetypeid/UserDefinedFileTypesManager.java b/Core/src/org/sleuthkit/autopsy/modules/filetypeid/UserDefinedFileTypesManager.java index 46c75e75ca..8f33d55e56 100644 --- a/Core/src/org/sleuthkit/autopsy/modules/filetypeid/UserDefinedFileTypesManager.java +++ b/Core/src/org/sleuthkit/autopsy/modules/filetypeid/UserDefinedFileTypesManager.java @@ -235,6 +235,13 @@ final class UserDefinedFileTypesManager { addFileTypeToMap(fileTypes, fileType); } + /** + * Adds given FileType to given map: + * if the mimetype exists, add fileType to that mimetype's list. + * otherwise, create a new mimetype with the new fileType. + * @param map The map to be modified. + * @param fileType The added FileType + */ void addFileTypeToMap(Map> map, FileType fileType) { String mimeType = fileType.getMimeType(); if (map.containsKey(mimeType)) { @@ -246,6 +253,11 @@ final class UserDefinedFileTypesManager { } } + /** + * Removes given fileType from given map if it exists. + * @param map + * @param fileType + */ void removeFileTypeFromMap(Map> map, FileType fileType) { String mimeType = fileType.getMimeType(); if (map.containsKey(mimeType)) { From 8b0f934f3e26a993557d394224cd3b3a892c2ab0 Mon Sep 17 00:00:00 2001 From: momo Date: Mon, 19 Oct 2015 11:22:00 -0400 Subject: [PATCH 09/13] UI change based on edit vs save new --- .../modules/filetypeid/FileTypeIdGlobalSettingsPanel.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Core/src/org/sleuthkit/autopsy/modules/filetypeid/FileTypeIdGlobalSettingsPanel.java b/Core/src/org/sleuthkit/autopsy/modules/filetypeid/FileTypeIdGlobalSettingsPanel.java index 725594c1d5..1f72f7bb80 100644 --- a/Core/src/org/sleuthkit/autopsy/modules/filetypeid/FileTypeIdGlobalSettingsPanel.java +++ b/Core/src/org/sleuthkit/autopsy/modules/filetypeid/FileTypeIdGlobalSettingsPanel.java @@ -255,6 +255,7 @@ final class FileTypeIdGlobalSettingsPanel extends IngestModuleGlobalSettingsPane FileType fileType = typesList.getSelectedValue(); if (null != fileType) { mimeTypeTextField.setText(fileType.getMimeType()); + mimeTypeTextField.setEditable(false); Signature signature = fileType.getSignature(); FileType.Signature.Type sigType = signature.getType(); signatureTypeComboBox.setSelectedItem(sigType == FileType.Signature.Type.RAW ? FileTypeIdGlobalSettingsPanel.RAW_SIGNATURE_TYPE_COMBO_BOX_ITEM : FileTypeIdGlobalSettingsPanel.ASCII_SIGNATURE_TYPE_COMBO_BOX_ITEM); @@ -288,6 +289,7 @@ final class FileTypeIdGlobalSettingsPanel extends IngestModuleGlobalSettingsPane private void clearTypeDetailsComponents() { typesList.clearSelection(); mimeTypeTextField.setText(""); //NON-NLS + mimeTypeTextField.setEditable(true); signatureTypeComboBox.setSelectedItem(FileTypeIdGlobalSettingsPanel.RAW_SIGNATURE_TYPE_COMBO_BOX_ITEM); hexPrefixLabel.setVisible(true); signatureTextField.setText("0000"); //NON-NLS @@ -641,6 +643,9 @@ final class FileTypeIdGlobalSettingsPanel extends IngestModuleGlobalSettingsPane */ FileType.Signature signature = new FileType.Signature(signatureBytes, offset, sigType); FileType fileType = new FileType(typeName, signature, filesSetName, postHitCheckBox.isSelected()); + FileType selected = typesList.getSelectedValue(); + if (selected != null) + UserDefinedFileTypesManager.getInstance().removeFileTypeFromMap(fileTypes, selected); UserDefinedFileTypesManager.getInstance().addFileTypeToMap(fileTypes, fileType); updateFileTypesListModel(); typesList.setSelectedValue(fileType.getMimeType(), true); From 5a138d26f2e1c09c8c31ca4484bfac8605c6a936 Mon Sep 17 00:00:00 2001 From: momo Date: Tue, 20 Oct 2015 10:19:33 -0400 Subject: [PATCH 10/13] fix equals --- .../org/sleuthkit/autopsy/modules/filetypeid/FileType.java | 7 +++++-- .../modules/filetypeid/FileTypeIdGlobalSettingsPanel.java | 4 +++- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/modules/filetypeid/FileType.java b/Core/src/org/sleuthkit/autopsy/modules/filetypeid/FileType.java index f571e673dc..a209afdebd 100644 --- a/Core/src/org/sleuthkit/autopsy/modules/filetypeid/FileType.java +++ b/Core/src/org/sleuthkit/autopsy/modules/filetypeid/FileType.java @@ -113,7 +113,8 @@ class FileType { public boolean equals(Object other) { if(other != null && other instanceof FileType) { FileType that = (FileType) other; - if(this.getMimeType().equals(that.getMimeType()) && this.getSignature().equals(that.getSignature())) + if(this.getMimeType().equals(that.getMimeType()) && this.getSignature().equals(that.getSignature()) + && this.alertOnMatch() == that.alertOnMatch() && this.getFilesSetName().equals(that.getFilesSetName())) return true; } return false; @@ -224,7 +225,9 @@ class FileType { public boolean equals(Object other) { if (other != null && other instanceof Signature) { Signature that = (Signature) other; - if(Arrays.equals(this.getSignatureBytes(), that.getSignatureBytes()) && this.getOffset() == that.getOffset()) + if(Arrays.equals(this.getSignatureBytes(), that.getSignatureBytes()) + && this.getOffset() == that.getOffset() + && this.getType().equals(that.getType())) return true; } return false; diff --git a/Core/src/org/sleuthkit/autopsy/modules/filetypeid/FileTypeIdGlobalSettingsPanel.java b/Core/src/org/sleuthkit/autopsy/modules/filetypeid/FileTypeIdGlobalSettingsPanel.java index 1f72f7bb80..578264eb87 100644 --- a/Core/src/org/sleuthkit/autopsy/modules/filetypeid/FileTypeIdGlobalSettingsPanel.java +++ b/Core/src/org/sleuthkit/autopsy/modules/filetypeid/FileTypeIdGlobalSettingsPanel.java @@ -629,7 +629,9 @@ final class FileTypeIdGlobalSettingsPanel extends IngestModuleGlobalSettingsPane /** * Get the interesting files set details. */ - String filesSetName = filesSetNameTextField.getText(); + String filesSetName = ""; + if(postHitCheckBox.isSelected()) + filesSetName = filesSetNameTextField.getText(); if (postHitCheckBox.isSelected() && filesSetName.isEmpty()) { JOptionPane.showMessageDialog(null, NbBundle.getMessage(FileTypeIdGlobalSettingsPanel.class, "FileTypeIdGlobalSettingsPanel.JOptionPane.invalidInterestingFilesSetName.message"), From fade9f18d8297bc1ec745cad1976bec249a0ca53 Mon Sep 17 00:00:00 2001 From: momo Date: Tue, 20 Oct 2015 10:45:28 -0400 Subject: [PATCH 11/13] remove maps --- .../modules/filetypeid/FileTypeDetector.java | 41 +++++++++-------- .../FileTypeIdGlobalSettingsPanel.java | 24 +++++----- .../UserDefinedFileTypesManager.java | 44 +++++++++---------- 3 files changed, 55 insertions(+), 54 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/modules/filetypeid/FileTypeDetector.java b/Core/src/org/sleuthkit/autopsy/modules/filetypeid/FileTypeDetector.java index 9f969410af..cde31639f4 100644 --- a/Core/src/org/sleuthkit/autopsy/modules/filetypeid/FileTypeDetector.java +++ b/Core/src/org/sleuthkit/autopsy/modules/filetypeid/FileTypeDetector.java @@ -39,7 +39,7 @@ public class FileTypeDetector { private static final Tika tika = new Tika(); private static final int BUFFER_SIZE = 64 * 1024; private final byte buffer[] = new byte[BUFFER_SIZE]; - private final Map> userDefinedFileTypes; + private final List userDefinedFileTypes; /** * Constructs an object that detects the type of a file by an inspection of @@ -77,7 +77,12 @@ public class FileTypeDetector { * @return True if MIME type is detectable. */ private boolean isDetectableAsUserDefinedType(String mimeType) { - return userDefinedFileTypes.containsKey(mimeType); + for (FileType fileType : userDefinedFileTypes) { + if (fileType.getMimeType().equals(mimeType)) { + return true; + } + } + return false; } /** @@ -216,25 +221,23 @@ public class FileTypeDetector { * @throws TskCoreException */ private String detectUserDefinedType(AbstractFile file) throws TskCoreException { - for (List fileTypes : userDefinedFileTypes.values()) { - for (FileType fileType : fileTypes) { - if (fileType.matches(file)) { - if (fileType.alertOnMatch()) { - BlackboardArtifact artifact; - artifact = file.newArtifact(BlackboardArtifact.ARTIFACT_TYPE.TSK_INTERESTING_FILE_HIT); - BlackboardAttribute setNameAttribute = new BlackboardAttribute(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_SET_NAME.getTypeID(), FileTypeIdModuleFactory.getModuleName(), fileType.getFilesSetName()); - artifact.addAttribute(setNameAttribute); + for (FileType fileType : userDefinedFileTypes) { + if (fileType.matches(file)) { + if (fileType.alertOnMatch()) { + BlackboardArtifact artifact; + artifact = file.newArtifact(BlackboardArtifact.ARTIFACT_TYPE.TSK_INTERESTING_FILE_HIT); + BlackboardAttribute setNameAttribute = new BlackboardAttribute(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_SET_NAME.getTypeID(), FileTypeIdModuleFactory.getModuleName(), fileType.getFilesSetName()); + artifact.addAttribute(setNameAttribute); - /** - * Use the MIME type as the category, i.e., the rule - * that determined this file belongs to the interesting - * files set. - */ - BlackboardAttribute ruleNameAttribute = new BlackboardAttribute(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_CATEGORY.getTypeID(), FileTypeIdModuleFactory.getModuleName(), fileType.getMimeType()); - artifact.addAttribute(ruleNameAttribute); - } - return fileType.getMimeType(); + /** + * Use the MIME type as the category, i.e., the rule that + * determined this file belongs to the interesting files + * set. + */ + BlackboardAttribute ruleNameAttribute = new BlackboardAttribute(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_CATEGORY.getTypeID(), FileTypeIdModuleFactory.getModuleName(), fileType.getMimeType()); + artifact.addAttribute(ruleNameAttribute); } + return fileType.getMimeType(); } } return null; diff --git a/Core/src/org/sleuthkit/autopsy/modules/filetypeid/FileTypeIdGlobalSettingsPanel.java b/Core/src/org/sleuthkit/autopsy/modules/filetypeid/FileTypeIdGlobalSettingsPanel.java index 578264eb87..8f65e1a5e2 100644 --- a/Core/src/org/sleuthkit/autopsy/modules/filetypeid/FileTypeIdGlobalSettingsPanel.java +++ b/Core/src/org/sleuthkit/autopsy/modules/filetypeid/FileTypeIdGlobalSettingsPanel.java @@ -59,7 +59,7 @@ final class FileTypeIdGlobalSettingsPanel extends IngestModuleGlobalSettingsPane * is obtained from the user-defined types manager. */ private DefaultListModel typesListModel; - private Map> fileTypes; + private java.util.List fileTypes; /** * This panel implements a property change listener that listens to ingest @@ -227,7 +227,7 @@ final class FileTypeIdGlobalSettingsPanel extends IngestModuleGlobalSettingsPane ex.getLocalizedMessage(), NbBundle.getMessage(FileTypeIdGlobalSettingsPanel.class, "FileTypeIdGlobalSettingsPanel.JOptionPane.loadFailed.title"), JOptionPane.ERROR_MESSAGE); - fileTypes = Collections.emptyMap(); + fileTypes = Collections.emptyList(); } enableButtons(); } @@ -236,13 +236,9 @@ final class FileTypeIdGlobalSettingsPanel extends IngestModuleGlobalSettingsPane * Sets the list model for the file types list component. */ private void updateFileTypesListModel() { - ArrayList mimeTypes = new ArrayList<>(fileTypes.keySet()); - Collections.sort(mimeTypes); typesListModel.clear(); - for (String mimeType : mimeTypes) { - for (FileType fileType : fileTypes.get(mimeType)) { - typesListModel.addElement(fileType); - } + for (FileType fileType : fileTypes) { + typesListModel.addElement(fileType); } } @@ -561,7 +557,7 @@ final class FileTypeIdGlobalSettingsPanel extends IngestModuleGlobalSettingsPane private void deleteTypeButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_deleteTypeButtonActionPerformed FileType fileType = typesList.getSelectedValue(); - UserDefinedFileTypesManager.getInstance().removeFileTypeFromMap(fileTypes, fileType); + fileTypes.remove(fileType); updateFileTypesListModel(); if (!typesListModel.isEmpty()) { typesList.setSelectedIndex(0); @@ -630,8 +626,9 @@ final class FileTypeIdGlobalSettingsPanel extends IngestModuleGlobalSettingsPane * Get the interesting files set details. */ String filesSetName = ""; - if(postHitCheckBox.isSelected()) + if (postHitCheckBox.isSelected()) { filesSetName = filesSetNameTextField.getText(); + } if (postHitCheckBox.isSelected() && filesSetName.isEmpty()) { JOptionPane.showMessageDialog(null, NbBundle.getMessage(FileTypeIdGlobalSettingsPanel.class, "FileTypeIdGlobalSettingsPanel.JOptionPane.invalidInterestingFilesSetName.message"), @@ -646,9 +643,10 @@ final class FileTypeIdGlobalSettingsPanel extends IngestModuleGlobalSettingsPane FileType.Signature signature = new FileType.Signature(signatureBytes, offset, sigType); FileType fileType = new FileType(typeName, signature, filesSetName, postHitCheckBox.isSelected()); FileType selected = typesList.getSelectedValue(); - if (selected != null) - UserDefinedFileTypesManager.getInstance().removeFileTypeFromMap(fileTypes, selected); - UserDefinedFileTypesManager.getInstance().addFileTypeToMap(fileTypes, fileType); + if (selected != null) { + fileTypes.remove(selected); + } + fileTypes.add(fileType); updateFileTypesListModel(); typesList.setSelectedValue(fileType.getMimeType(), true); }//GEN-LAST:event_saveTypeButtonActionPerformed diff --git a/Core/src/org/sleuthkit/autopsy/modules/filetypeid/UserDefinedFileTypesManager.java b/Core/src/org/sleuthkit/autopsy/modules/filetypeid/UserDefinedFileTypesManager.java index 8f33d55e56..2f00972c62 100644 --- a/Core/src/org/sleuthkit/autopsy/modules/filetypeid/UserDefinedFileTypesManager.java +++ b/Core/src/org/sleuthkit/autopsy/modules/filetypeid/UserDefinedFileTypesManager.java @@ -82,7 +82,7 @@ final class UserDefinedFileTypesManager { * map is guarded by the intrinsic lock of the user-defined file types * manager for thread-safety. */ - private final Map> userDefinedFileTypes = new HashMap<>(); + private final List userDefinedFileTypes = new ArrayList<>(); /** * The combined set of user-defined file types and file types predefined by @@ -91,7 +91,7 @@ final class UserDefinedFileTypesManager { * the intrinsic lock of the user-defined file types manager for * thread-safety. */ - private final Map> fileTypes = new HashMap<>(); + private final List fileTypes = new ArrayList<>(); /** * Gets the singleton manager of user-defined file types characterized by @@ -122,7 +122,7 @@ final class UserDefinedFileTypesManager { * @throws * org.sleuthkit.autopsy.modules.filetypeid.UserDefinedFileTypesManager.UserDefinedFileTypesException */ - synchronized Map> getFileTypes() throws UserDefinedFileTypesException { + synchronized List getFileTypes() throws UserDefinedFileTypesException { loadFileTypes(); /** @@ -131,7 +131,7 @@ final class UserDefinedFileTypesManager { * Collections.unmodifiableCollection() is not used here because this * view of the file types is a snapshot. */ - return new HashMap<>(fileTypes); + return new ArrayList<>(fileTypes); } /** @@ -142,7 +142,7 @@ final class UserDefinedFileTypesManager { * @throws * org.sleuthkit.autopsy.modules.filetypeid.UserDefinedFileTypesManager.UserDefinedFileTypesException */ - synchronized Map> getUserDefinedFileTypes() throws UserDefinedFileTypesException { + synchronized List getUserDefinedFileTypes() throws UserDefinedFileTypesException { loadFileTypes(); /** @@ -151,7 +151,7 @@ final class UserDefinedFileTypesManager { * Collections.unmodifiableCollection() is not used here because this * view of the file types is a snapshot. */ - return new HashMap<>(userDefinedFileTypes); + return new ArrayList<>(userDefinedFileTypes); } /** @@ -182,11 +182,11 @@ final class UserDefinedFileTypesManager { private void loadPredefinedFileTypes() throws UserDefinedFileTypesException { try { FileType fileTypeXml = new FileType("text/xml", new Signature("> map, FileType fileType) { String mimeType = fileType.getMimeType(); @@ -271,10 +273,10 @@ final class UserDefinedFileTypesManager { * @param newFileTypes A mapping of file type names to user-defined file * types. */ - synchronized void setUserDefinedFileTypes(Map> newFileTypes) throws UserDefinedFileTypesException { + synchronized void setUserDefinedFileTypes(List newFileTypes) throws UserDefinedFileTypesException { try { String filePath = getFileTypeDefinitionsFilePath(USER_DEFINED_TYPE_DEFINITIONS_FILE); - XmlWriter.writeFileTypes(newFileTypes.values(), filePath); + XmlWriter.writeFileTypes(newFileTypes, filePath); } catch (ParserConfigurationException | FileNotFoundException | UnsupportedEncodingException | TransformerException ex) { throwUserDefinedFileTypesException(ex, "UserDefinedFileTypesManager.saveFileTypes.errorMessage"); } catch (IOException ex) { @@ -312,15 +314,13 @@ final class UserDefinedFileTypesManager { * @throws UnsupportedEncodingException * @throws TransformerException */ - private static void writeFileTypes(Collection> fileTypes, String filePath) throws ParserConfigurationException, IOException, FileNotFoundException, UnsupportedEncodingException, TransformerException { + private static void writeFileTypes(List fileTypes, String filePath) throws ParserConfigurationException, IOException, FileNotFoundException, UnsupportedEncodingException, TransformerException { Document doc = XMLUtil.createDocument(); Element fileTypesElem = doc.createElement(FILE_TYPES_TAG_NAME); doc.appendChild(fileTypesElem); - for (List fileTypeList : fileTypes) { - for (FileType fileType : fileTypeList) { - Element fileTypeElem = XmlWriter.createFileTypeElement(fileType, doc); - fileTypesElem.appendChild(fileTypeElem); - } + for (FileType fileType : fileTypes) { + Element fileTypeElem = XmlWriter.createFileTypeElement(fileType, doc); + fileTypesElem.appendChild(fileTypeElem); } XMLUtil.saveDocument(doc, ENCODING_FOR_XML_FILE, filePath); } From aae1c2a8b5d9f3fa6b3c1d4f85aed98f37b2fd61 Mon Sep 17 00:00:00 2001 From: momo Date: Tue, 20 Oct 2015 10:52:41 -0400 Subject: [PATCH 12/13] remove unused helper methods --- .../UserDefinedFileTypesManager.java | 35 ------------------- 1 file changed, 35 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/modules/filetypeid/UserDefinedFileTypesManager.java b/Core/src/org/sleuthkit/autopsy/modules/filetypeid/UserDefinedFileTypesManager.java index 2f00972c62..e9e8fdc531 100644 --- a/Core/src/org/sleuthkit/autopsy/modules/filetypeid/UserDefinedFileTypesManager.java +++ b/Core/src/org/sleuthkit/autopsy/modules/filetypeid/UserDefinedFileTypesManager.java @@ -25,10 +25,7 @@ import java.io.UnsupportedEncodingException; import java.nio.file.Path; import java.nio.file.Paths; import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; import java.util.List; -import java.util.Map; import java.util.logging.Level; import javax.xml.parsers.ParserConfigurationException; import org.w3c.dom.Document; @@ -235,38 +232,6 @@ final class UserDefinedFileTypesManager { fileTypes.add(fileType); } - /** - * Adds given FileType to given map: if the mimetype exists, add fileType to - * that mimetype's list. otherwise, create a new mimetype with the new - * fileType. - * - * @param map The map to be modified. - * @param fileType The added FileType - */ - void addFileTypeToMap(Map> map, FileType fileType) { - String mimeType = fileType.getMimeType(); - if (map.containsKey(mimeType)) { - map.get(mimeType).add(fileType); - } else { - List newList = new ArrayList<>(); - newList.add(fileType); - map.put(mimeType, newList); - } - } - - /** - * Removes given fileType from given map if it exists. - * - * @param map - * @param fileType - */ - void removeFileTypeFromMap(Map> map, FileType fileType) { - String mimeType = fileType.getMimeType(); - if (map.containsKey(mimeType)) { - map.get(mimeType).remove(fileType); - } - } - /** * Sets the user-defined file types. * From c3f77895f82c851effc5ddda611507bac2357f58 Mon Sep 17 00:00:00 2001 From: momo Date: Wed, 28 Oct 2015 15:14:35 -0400 Subject: [PATCH 13/13] fix selected after update --- .../modules/filetypeid/FileTypeIdGlobalSettingsPanel.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Core/src/org/sleuthkit/autopsy/modules/filetypeid/FileTypeIdGlobalSettingsPanel.java b/Core/src/org/sleuthkit/autopsy/modules/filetypeid/FileTypeIdGlobalSettingsPanel.java index 8f65e1a5e2..5380234490 100644 --- a/Core/src/org/sleuthkit/autopsy/modules/filetypeid/FileTypeIdGlobalSettingsPanel.java +++ b/Core/src/org/sleuthkit/autopsy/modules/filetypeid/FileTypeIdGlobalSettingsPanel.java @@ -648,7 +648,7 @@ final class FileTypeIdGlobalSettingsPanel extends IngestModuleGlobalSettingsPane } fileTypes.add(fileType); updateFileTypesListModel(); - typesList.setSelectedValue(fileType.getMimeType(), true); + typesList.setSelectedValue(fileType, true); }//GEN-LAST:event_saveTypeButtonActionPerformed private void postHitCheckBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_postHitCheckBoxActionPerformed