4961 add custom/windows-nt-registry MIME type and use it instead

This commit is contained in:
William Schaefer 2019-05-09 18:23:04 -04:00
parent 3e53741237
commit cc92182522
8 changed files with 81 additions and 85 deletions

View File

@ -52,6 +52,4 @@ interface FileTypeViewer {
* fine. Otherwise, it is ambiguous.
*/
void resetComponent();
boolean isSupported(AbstractFile file);
}

View File

@ -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,6 +104,7 @@ 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) {
@ -127,13 +125,17 @@ 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;
}
}
FileTypeViewer viewer = getSupportingViewer(file);
if (mimeType.equalsIgnoreCase("application/octet-stream")) {
return;
}
else {
FileTypeViewer viewer = getSupportingViewer(mimeType);
if (viewer != null) {
lastViewer = viewer;
@ -142,6 +144,7 @@ public class FileViewer extends javax.swing.JPanel implements DataContentViewer
this.add(viewer.getComponent());
this.repaint();
}
}
}
@ -195,13 +198,17 @@ 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);
}
}
@ -215,15 +222,19 @@ 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 0;
}
}
if (null != getSupportingViewer(file)) {
if (mimeType.equalsIgnoreCase("application/octet-stream")) {
return 0;
} else {
if (null != getSupportingViewer(mimeType)) {
return CONFIDENCE_LEVEL;
}
}
return 0;
}

View File

@ -58,7 +58,8 @@ final class HtmlViewer extends javax.swing.JPanel implements FileTypeViewer {
* @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;
}
}

View File

@ -191,8 +191,4 @@ class MediaFileViewer extends javax.swing.JPanel implements FileTypeViewer {
boolean isSupported(AbstractFile file);
}
@Override
public boolean isSupported(AbstractFile file){
return true;
}
}

View File

@ -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;

View File

@ -413,7 +413,7 @@ class SQLiteViewer extends javax.swing.JPanel implements FileTypeViewer {
currentTableHeader = new ArrayList<>();
viewReader.read(tableName);
Map<String, Object> columnRow = new LinkedHashMap<>();
for (int i = 0; i < currentTableHeader.size(); 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;
}
}

View File

@ -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<String> 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;

View File

@ -216,14 +216,17 @@ final class CustomFileTypesManager {
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.
@ -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