reporting uses new extension code, displays full path and tag names, can be moved around (relative paths)

This commit is contained in:
Brian Carrier 2014-01-23 16:07:19 -05:00
parent f19f4c7211
commit cfa50f4345
3 changed files with 50 additions and 17 deletions

View File

@ -93,16 +93,12 @@ public class ImageUtils {
logger.log(Level.WARNING, "Error while getting file signature from blackboard.", ex); logger.log(Level.WARNING, "Error while getting file signature from blackboard.", ex);
} }
final String fName = f.getName(); final String extension = f.getNameExtension();
final int dotIdx = fName.lastIndexOf('.');
// if we have an extension, check it // if we have an extension, check it
if ((dotIdx != -1) && (dotIdx != (fName.length() - 1))) { if (extension.equals("") == false) {
final String ext = fName.substring(dotIdx + 1).toLowerCase();
// Note: thumbnail generator only supports JPG, GIF, and PNG for now // Note: thumbnail generator only supports JPG, GIF, and PNG for now
if (SUPP_EXTENSIONS.contains(ext)) { if (SUPP_EXTENSIONS.contains(extension)) {
return true; return true;
} }
} }

View File

@ -46,6 +46,7 @@ import javax.swing.JDialog;
import javax.swing.JFrame; import javax.swing.JFrame;
import javax.swing.SwingWorker; import javax.swing.SwingWorker;
import org.openide.filesystems.FileUtil; import org.openide.filesystems.FileUtil;
import org.openide.util.Exceptions;
import org.sleuthkit.autopsy.casemodule.Case; import org.sleuthkit.autopsy.casemodule.Case;
import org.sleuthkit.autopsy.coreutils.EscapeUtil; import org.sleuthkit.autopsy.coreutils.EscapeUtil;
import org.sleuthkit.autopsy.coreutils.ImageUtils; import org.sleuthkit.autopsy.coreutils.ImageUtils;
@ -87,7 +88,7 @@ public class ReportGenerator {
static final String REPORTS_DIR = "Reports"; static final String REPORTS_DIR = "Reports";
ReportGenerator(Map<TableReportModule, Boolean> tableModuleStates, Map<GeneralReportModule, Boolean> generalModuleStates, Map<FileReportModule, Boolean> fileListModuleStates) { ReportGenerator(Map<TableReportModule, Boolean> tableModuleStates, Map<GeneralReportModule, Boolean> generalModuleStates, Map<FileReportModule, Boolean> fileListModuleStates) {
// Create the root reports directory path of the form: <CASE DIRECTORY>/Reports/<Case name> <Timestamp>/ // Create the root reports directory path of the form: <CASE DIRECTORY>/Reports/<Case fileName> <Timestamp>/
DateFormat dateFormat = new SimpleDateFormat("MM-dd-yyyy-HH-mm-ss"); DateFormat dateFormat = new SimpleDateFormat("MM-dd-yyyy-HH-mm-ss");
Date date = new Date(); Date date = new Date();
String dateNoTime = dateFormat.format(date); String dateNoTime = dateFormat.format(date);
@ -542,7 +543,14 @@ public class ReportGenerator {
continue; continue;
} }
ArrayList<String> rowData = new ArrayList<>(Arrays.asList(tag.getContent().getName(), tag.getName().getDisplayName(), tag.getComment())); String fileName;
try {
fileName = tag.getContent().getUniquePath();
} catch (TskCoreException ex) {
fileName = tag.getContent().getName();
}
ArrayList<String> rowData = new ArrayList<>(Arrays.asList(fileName, tag.getName().getDisplayName(), tag.getComment()));
for (TableReportModule module : tableModules) { for (TableReportModule module : tableModules) {
// @@@ This casting is a tricky little workaround to allow the HTML report module to slip in a content hyperlink. // @@@ This casting is a tricky little workaround to allow the HTML report module to slip in a content hyperlink.
if (module instanceof ReportHTML) { if (module instanceof ReportHTML) {

View File

@ -44,6 +44,8 @@ import org.openide.filesystems.FileObject;
import org.openide.util.Exceptions; import org.openide.util.Exceptions;
import org.sleuthkit.autopsy.casemodule.Case; import org.sleuthkit.autopsy.casemodule.Case;
import org.openide.filesystems.FileUtil; import org.openide.filesystems.FileUtil;
import org.sleuthkit.autopsy.casemodule.services.Services;
import org.sleuthkit.autopsy.casemodule.services.TagsManager;
import org.sleuthkit.autopsy.coreutils.ImageUtils; import org.sleuthkit.autopsy.coreutils.ImageUtils;
import org.sleuthkit.autopsy.coreutils.Logger; import org.sleuthkit.autopsy.coreutils.Logger;
import org.sleuthkit.autopsy.datamodel.ContentUtils.ExtractFscContentVisitor; import org.sleuthkit.autopsy.datamodel.ContentUtils.ExtractFscContentVisitor;
@ -538,7 +540,7 @@ public class ReportHTML implements TableReportModule {
// Add the hyperlink to the row. A column header for it was created in startTable(). // Add the hyperlink to the row. A column header for it was created in startTable().
StringBuilder localFileLink = new StringBuilder(); StringBuilder localFileLink = new StringBuilder();
localFileLink.append("<a href=\"file:///"); localFileLink.append("<a href=\"");
localFileLink.append(localFilePath); localFileLink.append(localFilePath);
localFileLink.append("\">View File</a>"); localFileLink.append("\">View File</a>");
row.add(localFileLink.toString()); row.add(localFileLink.toString());
@ -605,15 +607,39 @@ public class ReportHTML implements TableReportModule {
continue; continue;
} }
String contentPath = saveContent(file, "thumbs_fullsize"); String contentPath = saveContent(file, "thumbs_fullsize");
String nameInImage;
try {
nameInImage = file.getUniquePath();
} catch (TskCoreException ex) {
nameInImage = file.getName();
}
StringBuilder linkToThumbnail = new StringBuilder(); StringBuilder linkToThumbnail = new StringBuilder();
linkToThumbnail.append("<a href=\"file:///"); linkToThumbnail.append("<a href=\"");
linkToThumbnail.append(contentPath); linkToThumbnail.append(contentPath);
linkToThumbnail.append("\">"); linkToThumbnail.append("\">");
linkToThumbnail.append("<img src=\"").append(thumbnailPath).append("\" />"); linkToThumbnail.append("<img src=\"").append(thumbnailPath).append("\" title=\"").append(nameInImage).append("\"/>");
linkToThumbnail.append("</a><br>"); linkToThumbnail.append("</a><br>");
linkToThumbnail.append(file.getName()).append("<br>"); linkToThumbnail.append(file.getName()).append("<br>");
// @@@ Add tags here
Services services = currentCase.getServices();
TagsManager tagsManager = services.getTagsManager();
try {
List<ContentTag> tags = tagsManager.getContentTagsByContent(content);
if (tags.size() > 0) {
linkToThumbnail.append("Tags: " );
}
for (int i = 0; i < tags.size(); i++) {
ContentTag tag = tags.get(i);
linkToThumbnail.append(tag.getName().getDisplayName());
if (i != tags.size() - 1) {
linkToThumbnail.append(", ");
}
}
} catch (TskCoreException ex) {
logger.log(Level.WARNING, "Could not find get tags for file.", ex);
}
currentRow.add(linkToThumbnail.toString()); currentRow.add(linkToThumbnail.toString());
totalCount++; totalCount++;
@ -649,7 +675,7 @@ public class ReportHTML implements TableReportModule {
* Save a local copy of the given file in the reports folder. * Save a local copy of the given file in the reports folder.
* @param file File to save * @param file File to save
* @param dirName Custom top-level folder to use to store the files in (tag name, etc.) * @param dirName Custom top-level folder to use to store the files in (tag name, etc.)
* @return Path to where file was stored * @return Path to where file was stored (relative to root of HTML folder)
*/ */
public String saveContent(AbstractFile file, String dirName) { public String saveContent(AbstractFile file, String dirName) {
// clean up the dir name passed in // clean up the dir name passed in
@ -657,8 +683,9 @@ public class ReportHTML implements TableReportModule {
dirName2 = dirName2.replace("\\", "_"); dirName2 = dirName2.replace("\\", "_");
// Make a folder for the local file with the same tagName as the tag. // Make a folder for the local file with the same tagName as the tag.
StringBuilder localFilePath = new StringBuilder(); StringBuilder localFilePath = new StringBuilder(); // full path
localFilePath.append(path);
localFilePath.append(path);
localFilePath.append(dirName2); localFilePath.append(dirName2);
File localFileFolder = new File(localFilePath.toString()); File localFileFolder = new File(localFilePath.toString());
if (!localFileFolder.exists()) { if (!localFileFolder.exists()) {
@ -687,7 +714,9 @@ public class ReportHTML implements TableReportModule {
if (!localFile.exists()) { if (!localFile.exists()) {
ExtractFscContentVisitor.extract(file, localFile, null, null); ExtractFscContentVisitor.extract(file, localFile, null, null);
} }
return localFilePath.toString();
// get the relative path
return localFilePath.toString().substring(path.length());
} }
/** /**