diff --git a/Core/src/org/sleuthkit/autopsy/contentviewers/FileTypeViewer.java b/Core/src/org/sleuthkit/autopsy/contentviewers/FileTypeViewer.java index 48cb044af1..a2096dd2d9 100644 --- a/Core/src/org/sleuthkit/autopsy/contentviewers/FileTypeViewer.java +++ b/Core/src/org/sleuthkit/autopsy/contentviewers/FileTypeViewer.java @@ -52,6 +52,4 @@ interface FileTypeViewer { * fine. Otherwise, it is ambiguous. */ void resetComponent(); - - boolean isSupported(AbstractFile file); } diff --git a/Core/src/org/sleuthkit/autopsy/contentviewers/FileViewer.java b/Core/src/org/sleuthkit/autopsy/contentviewers/FileViewer.java index 1ffd42e4ed..d591e6b34d 100644 --- a/Core/src/org/sleuthkit/autopsy/contentviewers/FileViewer.java +++ b/Core/src/org/sleuthkit/autopsy/contentviewers/FileViewer.java @@ -18,6 +18,7 @@ */ package org.sleuthkit.autopsy.contentviewers; + import com.google.common.base.Strings; import java.awt.Component; import java.util.HashMap; @@ -81,15 +82,11 @@ public class FileViewer extends javax.swing.JPanel implements DataContentViewer * * @param mimeType * - * @return FileTypeViewer, null if no known content viewer supports the - * mimetype + * @return FileTypeViewer, null if no known content viewer supports the mimetype */ - private FileTypeViewer getSupportingViewer(AbstractFile file) { - FileTypeViewer viewer = mimeTypeToViewerMap.get(file.getMIMEType()); - if (viewer == null || viewer.isSupported(file)) { - return viewer; - } - return null; + private FileTypeViewer getSupportingViewer(String mimeType) { + + return mimeTypeToViewerMap.get(mimeType); } /** @@ -107,11 +104,12 @@ public class FileViewer extends javax.swing.JPanel implements DataContentViewer // Variables declaration - do not modify//GEN-BEGIN:variables // End of variables declaration//GEN-END:variables + @Override public void setNode(Node selectedNode) { - + resetComponent(); - + if (selectedNode == null) { return; } @@ -127,22 +125,27 @@ public class FileViewer extends javax.swing.JPanel implements DataContentViewer try { FileTypeDetector fileTypeDetector = new FileTypeDetector(); mimeType = fileTypeDetector.getMIMEType(file); - } catch (FileTypeDetector.FileTypeDetectorInitException ex) { + }catch (FileTypeDetector.FileTypeDetectorInitException ex) { LOGGER.log(Level.SEVERE, "Failed to initialize FileTypeDetector.", ex); //NON-NLS return; } } + + if (mimeType.equalsIgnoreCase("application/octet-stream")) { + return; + } + else { + FileTypeViewer viewer = getSupportingViewer(mimeType); + if (viewer != null) { + lastViewer = viewer; - FileTypeViewer viewer = getSupportingViewer(file); - if (viewer != null) { - lastViewer = viewer; - - viewer.setFile(file); - this.removeAll(); - this.add(viewer.getComponent()); - this.repaint(); + viewer.setFile(file); + this.removeAll(); + this.add(viewer.getComponent()); + this.repaint(); + } } - + } @Override @@ -195,36 +198,44 @@ public class FileViewer extends javax.swing.JPanel implements DataContentViewer try { FileTypeDetector fileTypeDetector = new FileTypeDetector(); mimeType = fileTypeDetector.getMIMEType(aFile); - } catch (FileTypeDetector.FileTypeDetectorInitException ex) { + }catch (FileTypeDetector.FileTypeDetectorInitException ex) { LOGGER.log(Level.SEVERE, "Failed to initialize FileTypeDetector.", ex); //NON-NLS return false; } } - - return (getSupportingViewer(aFile) != null); - + + if (mimeType.equalsIgnoreCase("application/octet-stream")) { + return false; + } else { + return (getSupportingViewer(mimeType) != null); + } + } @Override public int isPreferred(Node node) { AbstractFile file = node.getLookup().lookup(AbstractFile.class); String mimeType = file.getMIMEType(); - + if (Strings.isNullOrEmpty(mimeType)) { LOGGER.log(Level.INFO, "Mimetype not known for file: {0}", file.getName()); //NON-NLS try { FileTypeDetector fileTypeDetector = new FileTypeDetector(); mimeType = fileTypeDetector.getMIMEType(file); - } catch (FileTypeDetector.FileTypeDetectorInitException ex) { + }catch (FileTypeDetector.FileTypeDetectorInitException ex) { LOGGER.log(Level.SEVERE, "Failed to initialize FileTypeDetector.", ex); //NON-NLS return 0; } } - - if (null != getSupportingViewer(file)) { - return CONFIDENCE_LEVEL; + + if (mimeType.equalsIgnoreCase("application/octet-stream")) { + return 0; + } else { + if (null != getSupportingViewer(mimeType)) { + return CONFIDENCE_LEVEL; + } } - + return 0; } } diff --git a/Core/src/org/sleuthkit/autopsy/contentviewers/HtmlViewer.java b/Core/src/org/sleuthkit/autopsy/contentviewers/HtmlViewer.java index a7e3e7fd11..07e6e4cb5a 100755 --- a/Core/src/org/sleuthkit/autopsy/contentviewers/HtmlViewer.java +++ b/Core/src/org/sleuthkit/autopsy/contentviewers/HtmlViewer.java @@ -37,28 +37,29 @@ final class HtmlViewer extends javax.swing.JPanel implements FileTypeViewer { private static final long serialVersionUID = 1L; private static final Logger logger = Logger.getLogger(HtmlViewer.class.getName()); - + private static final String[] SUPPORTED_MIMETYPES = new String[]{ - "text/html", - "application/xhtml+xml" + "text/html", + "application/xhtml+xml" }; - + /** * Creates new form HtmlViewerPanel */ HtmlViewer() { initComponents(); } - + /** * Retrieve the HTML text content from the supplied file. - * + * * @param abstractFile The file to read. - * + * * @return The text content of the file. */ @NbBundle.Messages({ - "HtmlViewer_file_error=This file is missing or unreadable.",}) + "HtmlViewer_file_error=This file is missing or unreadable.", + }) private String getHtmlText(AbstractFile abstractFile) { try { int fileSize = (int) abstractFile.getSize(); @@ -127,9 +128,4 @@ final class HtmlViewer extends javax.swing.JPanel implements FileTypeViewer { public void resetComponent() { htmlPanel.reset(); } - - @Override - public boolean isSupported(AbstractFile file) { - return true; - } } diff --git a/Core/src/org/sleuthkit/autopsy/contentviewers/MediaFileViewer.java b/Core/src/org/sleuthkit/autopsy/contentviewers/MediaFileViewer.java index 70e04a8591..b2d4baef99 100644 --- a/Core/src/org/sleuthkit/autopsy/contentviewers/MediaFileViewer.java +++ b/Core/src/org/sleuthkit/autopsy/contentviewers/MediaFileViewer.java @@ -191,8 +191,4 @@ class MediaFileViewer extends javax.swing.JPanel implements FileTypeViewer { boolean isSupported(AbstractFile file); } - @Override - public boolean isSupported(AbstractFile file){ - return true; - } } diff --git a/Core/src/org/sleuthkit/autopsy/contentviewers/PListViewer.java b/Core/src/org/sleuthkit/autopsy/contentviewers/PListViewer.java index b7b209b3eb..c1fdda1efc 100644 --- a/Core/src/org/sleuthkit/autopsy/contentviewers/PListViewer.java +++ b/Core/src/org/sleuthkit/autopsy/contentviewers/PListViewer.java @@ -538,11 +538,6 @@ class PListViewer extends javax.swing.JPanel implements FileTypeViewer, Explorer } - @Override - public boolean isSupported(AbstractFile file){ - return true; - } - // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JButton exportButton; private javax.swing.JPanel hdrPanel; diff --git a/Core/src/org/sleuthkit/autopsy/contentviewers/SQLiteViewer.java b/Core/src/org/sleuthkit/autopsy/contentviewers/SQLiteViewer.java index e9ba40eef0..078cc78c58 100755 --- a/Core/src/org/sleuthkit/autopsy/contentviewers/SQLiteViewer.java +++ b/Core/src/org/sleuthkit/autopsy/contentviewers/SQLiteViewer.java @@ -413,8 +413,8 @@ class SQLiteViewer extends javax.swing.JPanel implements FileTypeViewer { currentTableHeader = new ArrayList<>(); viewReader.read(tableName); Map columnRow = new LinkedHashMap<>(); - for (int i = 0; i < currentTableHeader.size(); i++) { - columnRow.put(currentTableHeader.get(i), ""); + for(int i = 0; i< currentTableHeader.size(); i++){ + columnRow.put(currentTableHeader.get(i), ""); } selectedTableView.setupTable(Collections.singletonList(columnRow)); } @@ -617,9 +617,4 @@ class SQLiteViewer extends javax.swing.JPanel implements FileTypeViewer { } }; } - - @Override - public boolean isSupported(AbstractFile file) { - return true; - } } diff --git a/Core/src/org/sleuthkit/autopsy/contentviewers/WindowsRegistryViewer.java b/Core/src/org/sleuthkit/autopsy/contentviewers/WindowsRegistryViewer.java index 8c23300f53..b991132504 100644 --- a/Core/src/org/sleuthkit/autopsy/contentviewers/WindowsRegistryViewer.java +++ b/Core/src/org/sleuthkit/autopsy/contentviewers/WindowsRegistryViewer.java @@ -42,17 +42,15 @@ class WindowsRegistryViewer extends JPanel implements FileTypeViewer { private static final long serialVersionUID = 1L; private static final Logger logger = Logger.getLogger(WindowsRegistryViewer.class.getName()); - private static final String[] SUPPORTED_MIMETYPES = new String[]{"application/octet-stream"}; + private static final String[] SUPPORTED_MIMETYPES = new String[]{"custom/windows-nt-registry"}; private RejView regview; private AbstractFile lastFile; WindowsRegistryViewer() { super(new BorderLayout()); - System.out.println("CREATED REGISTRY VIEWER"); } private void setDataView(Content content) { - System.out.println("setDataview called"); if (content == null) { this.resetComponent(); return; @@ -60,7 +58,7 @@ class WindowsRegistryViewer extends JPanel implements FileTypeViewer { this.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); - if (content.getSize() == 0) { + if (content.getSize() <= 1024) { return; } @@ -82,27 +80,24 @@ class WindowsRegistryViewer extends JPanel implements FileTypeViewer { @Override public Component getComponent() { - System.out.println("component GOTTEN"); return this; } @Override public void resetComponent() { - System.out.println("RESETING COMP"); // cleanup anything if (this.regview != null) { this.remove(this.regview); this.regview = null; } + lastFile = null; } - @Override - public boolean isSupported(AbstractFile file) { - System.out.println("IS THIS SUPPORTED?"); + private boolean isSupported(AbstractFile file) { if (file == null) { return false; } - if (file.getSize() == 0) { + if (file.getSize() <= 1024) { return false; } byte[] header = new byte[0x4000]; @@ -117,23 +112,19 @@ class WindowsRegistryViewer extends JPanel implements FileTypeViewer { RegistryHive hive = new RegistryHiveBuffer(buf); try { hive.getHeader(); - System.out.println("is supported " + file.getName()); return true; } catch (RegistryParseException ex) { - System.out.println("not supported "+ file.getName()); return false; } } @Override public List getSupportedMIMETypes() { - System.out.println("GET SUPPORTED MIME TYPES"); return Arrays.asList(SUPPORTED_MIMETYPES); } @Override public void setFile(AbstractFile file) { - System.out.println("SET THE FILE"); if (file == null) { resetComponent(); return; diff --git a/Core/src/org/sleuthkit/autopsy/modules/filetypeid/CustomFileTypesManager.java b/Core/src/org/sleuthkit/autopsy/modules/filetypeid/CustomFileTypesManager.java index 0746fe6cf1..727b4d42e8 100644 --- a/Core/src/org/sleuthkit/autopsy/modules/filetypeid/CustomFileTypesManager.java +++ b/Core/src/org/sleuthkit/autopsy/modules/filetypeid/CustomFileTypesManager.java @@ -215,17 +215,20 @@ final class CustomFileTypesManager { signatureList.add(new Signature(byteArray, 522L)); fileType = new FileType("image/x-pict", signatureList); //NON-NLS autopsyDefinedFileTypes.add(fileType); - - /* NOTE: see JIRA-4269. This MIME type seems to match a lot of random file types, - including ZIP archives. As a result those files get assigned this MIME type instead - of having their MIME type detected by Tika. - byteArray = DatatypeConverter.parseHexBinary("1100"); //NON-NLS - signatureList.clear(); - signatureList.add(new Signature(byteArray, 522L)); - fileType = new FileType("image/x-pict", signatureList); //NON-NLS - autopsyDefinedFileTypes.add(fileType);*/ /* + * NOTE: see JIRA-4269. This MIME type seems to match a lot of + * random file types, including ZIP archives. As a result those + * files get assigned this MIME type instead of having their MIME + * type detected by Tika. byteArray = + * DatatypeConverter.parseHexBinary("1100"); //NON-NLS + * signatureList.clear(); signatureList.add(new Signature(byteArray, + * 522L)); fileType = new FileType("image/x-pict", signatureList); + * //NON-NLS + autopsyDefinedFileTypes.add(fileType); + */ + + /* * Add type for pam. */ signatureList.clear(); @@ -305,7 +308,8 @@ final class CustomFileTypesManager { autopsyDefinedFileTypes.add(fileType); /* - * Add type for .tec files with leading End Of Image marker (JFIF JPEG) + * Add type for .tec files with leading End Of Image marker (JFIF + * JPEG) */ byteArray = DatatypeConverter.parseHexBinary("FFD9FFD8"); //NON-NLS signatureList.clear(); @@ -313,6 +317,16 @@ final class CustomFileTypesManager { fileType = new FileType("image/jpeg", signatureList); //NON-NLS autopsyDefinedFileTypes.add(fileType); + /* + * Add type for Windows NT registry files with leading End Of Image marker (JFIF + * JPEG) + */ + byteArray = DatatypeConverter.parseHexBinary("72656766"); //NON-NLS + signatureList.clear(); + signatureList.add(new Signature(byteArray, 0L)); + fileType = new FileType("custom/windows-nt-registry", signatureList); //NON-NLS + autopsyDefinedFileTypes.add(fileType); + } catch (IllegalArgumentException ex) { /* * parseHexBinary() throws this if the argument passed in is not hex