diff --git a/Report/src/org/sleuthkit/autopsy/report/reportFilter.form b/Report/src/org/sleuthkit/autopsy/report/reportFilter.form index d6a44ab924..8ce061c777 100644 --- a/Report/src/org/sleuthkit/autopsy/report/reportFilter.form +++ b/Report/src/org/sleuthkit/autopsy/report/reportFilter.form @@ -16,6 +16,11 @@ + + + + + @@ -32,42 +37,48 @@ - + - + - - - - - - - - + + + + + + + + + + + + + + + + + + + - + - - - - - - + + - - + @@ -80,14 +91,13 @@ - - - - - - + + + + + @@ -152,11 +162,13 @@ + - + + diff --git a/Report/src/org/sleuthkit/autopsy/report/reportFilter.java b/Report/src/org/sleuthkit/autopsy/report/reportFilter.java index 0af6be7cbb..0e5ad341e4 100644 --- a/Report/src/org/sleuthkit/autopsy/report/reportFilter.java +++ b/Report/src/org/sleuthkit/autopsy/report/reportFilter.java @@ -57,6 +57,8 @@ public class reportFilter extends javax.swing.JPanel { jButton2.setActionCommand(org.openide.util.NbBundle.getMessage(reportFilter.class, "reportFilter.jButton2.actionCommand")); // NOI18N jButton2.setLabel(org.openide.util.NbBundle.getMessage(reportFilter.class, "reportFilter.jButton2.label")); // NOI18N + setPreferredSize(new java.awt.Dimension(250, 193)); + jCheckBox1.setSelected(true); jCheckBox1.setText(org.openide.util.NbBundle.getMessage(reportFilter.class, "reportFilter.jCheckBox1.text")); // NOI18N jCheckBox1.addActionListener(new java.awt.event.ActionListener() { @@ -89,9 +91,11 @@ public class reportFilter extends javax.swing.JPanel { } }); + progBar.setDoubleBuffered(true); progBar.setEnabled(false); progBar.setName(""); // NOI18N - progBar.setPreferredSize(new java.awt.Dimension(146, 23)); + progBar.setPreferredSize(new java.awt.Dimension(146, 15)); + progBar.setStringPainted(true); cancelButton.setText(org.openide.util.NbBundle.getMessage(reportFilter.class, "reportFilter.cancelButton.text")); // NOI18N cancelButton.setActionCommand(org.openide.util.NbBundle.getMessage(reportFilter.class, "reportFilter.cancelButton.actionCommand")); // NOI18N @@ -107,33 +111,36 @@ public class reportFilter extends javax.swing.JPanel { layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() - .addGap(38, 38, 38) + .addContainerGap() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(jCheckBox3) .addGroup(layout.createSequentialGroup() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(jCheckBox2) - .addComponent(jCheckBox1)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(jCheckBox5) - .addComponent(jCheckBox4)))) - .addGap(69, 69, 69)) + .addComponent(jCheckBox3) + .addGroup(layout.createSequentialGroup() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(jCheckBox2) + .addComponent(jCheckBox1)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(jCheckBox5) + .addComponent(jCheckBox4)))) + .addGap(69, 69, 69)) + .addGroup(layout.createSequentialGroup() + .addComponent(jButton1) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(cancelButton) + .addGap(156, 156, 156))) + .addContainerGap()) .addGroup(layout.createSequentialGroup() - .addComponent(jButton1) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 15, Short.MAX_VALUE) - .addComponent(cancelButton) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(progBar, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addGap(42, 42, 42))) - .addContainerGap()) + .addComponent(progBar, javax.swing.GroupLayout.PREFERRED_SIZE, 231, javax.swing.GroupLayout.PREFERRED_SIZE) + .addContainerGap(109, Short.MAX_VALUE)))) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() - .addGap(24, 24, 24) + .addContainerGap() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jCheckBox1) .addComponent(jCheckBox4)) @@ -144,11 +151,11 @@ public class reportFilter extends javax.swing.JPanel { .addGap(18, 18, 18) .addComponent(jCheckBox3) .addGap(18, 18, 18) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(jButton1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(cancelButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) - .addComponent(progBar, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(jButton1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(cancelButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(progBar, javax.swing.GroupLayout.DEFAULT_SIZE, 17, Short.MAX_VALUE) .addContainerGap()) ); }// //GEN-END:initComponents diff --git a/Report/src/org/sleuthkit/autopsy/report/reportHTML.java b/Report/src/org/sleuthkit/autopsy/report/reportHTML.java index 2019ee0da9..101b0f3a5c 100644 --- a/Report/src/org/sleuthkit/autopsy/report/reportHTML.java +++ b/Report/src/org/sleuthkit/autopsy/report/reportHTML.java @@ -38,6 +38,10 @@ public reportHTML (HashMap> re //This is literally a terrible way to count up all the types of artifacts, and doesn't include any added ones. //Unlike the XML report, which is dynamic, this is formatted and needs to be redone later instead of being hardcoded. + //Also, clearing variables to generate new report. + formatted_Report.setLength(0); + unformatted_header.setLength(0); + formatted_header.setLength(0); int countGen = 0; int countWebBookmark = 0; @@ -128,6 +132,7 @@ public reportHTML (HashMap> re + "table tr th {text-align: left; width: 80px;} " + "table td {width: 100px; font-size: 8px; display: table-cell; padding: 4px 8px;} " + "table tr {text-align: left; width: 60px; background: #f3f3f3;} " + + "tr.alt td{ background-color: #FFFFFF;}" + ""; unformatted_header.append(header); unformatted_header.append(simpleCSS); @@ -140,15 +145,25 @@ public reportHTML (HashMap> re { formatted_Report.append(ingestwarning); } - formatted_Report.append("

Case Summary

HTML Report Generated by Autopsy 3 on ").append(datetime).append("

    "); + formatted_Report.append("

    Case Summary

    HTML Report Generated by Autopsy 3 on ").append(datetime).append("

      "); formatted_Report.append("
    • # of Images: ").append(imagecount).append("
    • "); formatted_Report.append("
    • FileSystems: ").append(filesystemcount).append("
    • "); formatted_Report.append("
    • # of Files: ").append(totalfiles.toString()).append("
    • "); formatted_Report.append("
    • # of Dirs: ").append(totaldirs.toString()).append("
    • "); - formatted_Report.append("
    • # of Artifacts: ").append(reportsize).append("
    • "); + formatted_Report.append("
    • # of Artifacts: ").append(reportsize).append("
    "); + + formatted_Report.append("
    "); + formatted_Report.append(""); + formatted_Report.append(""); + formatted_Report.append(""); + formatted_Report.append(""); + formatted_Report.append(""); + formatted_Report.append(""); + formatted_Report.append(""); + formatted_Report.append("
    SectionCount
    Web Bookmarks").append(countWebBookmark).append("
    Web History").append(countWebHistory).append("
    Web Downloads").append(countWebDownload).append("
    Recent Documents").append(countRecentObjects).append("
    Installed Programs").append(countInstalled).append("
    Keyword Hits").append(countKeyword).append("
    Hash Hits").append(countHash).append("

    "); String tableHeader = ""; StringBuilder nodeGen = new StringBuilder("

    General Information (").append(countGen).append(")

    ").append(tableHeader).append(""); - StringBuilder nodeWebBookmark = new StringBuilder("

    Web Bookmarks (").append(countWebBookmark).append(")

    ").append(tableHeader).append(""); + StringBuilder nodeWebBookmark = new StringBuilder("

    Web Bookmarks (").append(countWebBookmark).append(")

    ").append(tableHeader).append(""); StringBuilder nodeWebCookie = new StringBuilder("

    Web Cookies (").append(countWebCookie).append(")

    ").append(tableHeader).append(""); StringBuilder nodeWebHistory = new StringBuilder("

    Web History (").append(countWebHistory).append(")

    ").append(tableHeader).append(""); StringBuilder nodeWebDownload = new StringBuilder("

    Web Downloads (").append(countWebDownload).append(")

    ").append(tableHeader).append(""); @@ -156,13 +171,24 @@ public reportHTML (HashMap> re StringBuilder nodeTrackPoint = new StringBuilder("

    Track Points (").append(countTrackPoint).append(")

    ").append(tableHeader).append("
    "); StringBuilder nodeInstalled = new StringBuilder("

    Installed Programs (").append(countInstalled).append(")

    ").append(tableHeader).append(""); StringBuilder nodeKeyword = new StringBuilder("

    Keyword Search Hits (").append(countKeyword).append(")

    "); - StringBuilder nodeHash = new StringBuilder("

    Hashset Hits (").append(countHash).append(")

    ").append(tableHeader).append(""); - + StringBuilder nodeHash = new StringBuilder("

    Hashset Hits (").append(countHash).append(")

    ").append(tableHeader).append(""); + int alt = 0; + String altRow = ""; for (Entry> entry : report.entrySet()) { if(reportFilter.cancel == true){ break; } int cc = 0; + + if(alt > 0) + { + altRow = " class=\"alt\""; + alt = 0; + } + else{ + altRow=""; + alt++; + } StringBuilder artifact = new StringBuilder(""); Long objId = entry.getKey().getObjectID(); //Content file = skCase.getContentById(objId); @@ -172,15 +198,27 @@ public reportHTML (HashMap> re TreeMap attributes = new TreeMap(); - // Get all the attributes, line them up to be added. + // Get all the attributes, line them up to be added. Place empty string placeholders for each attribute type + int n; + for(n=1;n<=35;n++) + { + attributes.put(n, ""); + + } for (BlackboardAttribute tempatt : entry.getValue()) { if(reportFilter.cancel == true){ break; } - + String value = ""; int type = tempatt.getAttributeTypeID(); - String value = tempatt.getValueString(); + if(tempatt.getValueString() == null || tempatt.getValueString() == "null"){ + + } + else + { + value = tempatt.getValueString(); + } value = reportUtils.insertPeriodically(value, "
    ", 30); attributes.put(type, value); cc++; @@ -193,14 +231,14 @@ public reportHTML (HashMap> re nodeGen.append(artifact); } if(entry.getKey().getArtifactTypeID() == 2){ - artifact.append("
    "); + artifact.append(""); artifact.append(""); artifact.append(""); artifact.append(""); nodeWebBookmark.append(artifact); } if(entry.getKey().getArtifactTypeID() == 3){ - artifact.append(""); + artifact.append(""); artifact.append(""); artifact.append(""); artifact.append(""); @@ -209,8 +247,8 @@ public reportHTML (HashMap> re nodeWebCookie.append(artifact); } if(entry.getKey().getArtifactTypeID() == 4){ - artifact.append(""); - artifact.append(""); + artifact.append(""); + artifact.append(""); artifact.append(""); artifact.append(""); artifact.append(""); @@ -218,29 +256,30 @@ public reportHTML (HashMap> re nodeWebHistory.append(artifact); } if(entry.getKey().getArtifactTypeID() == 5){ - artifact.append(""); + artifact.append(""); artifact.append(""); - artifact.append(""); + artifact.append(""); artifact.append(""); artifact.append(""); nodeWebDownload.append(artifact); } if(entry.getKey().getArtifactTypeID() == 6){ - artifact.append(""); + //artifact.append(""); + artifact.append(""); artifact.append(""); artifact.append(""); nodeRecentObjects.append(artifact); } if(entry.getKey().getArtifactTypeID() == 7){ - artifact.append(""); artifact.append(""); artifact.append(""); nodeTrackPoint.append(artifact); } if(entry.getKey().getArtifactTypeID() == 8){ - artifact.append(""); artifact.append(""); artifact.append(""); @@ -254,8 +293,8 @@ public reportHTML (HashMap> re // nodeKeyword.append(artifact); } if(entry.getKey().getArtifactTypeID() == 10){ - artifact.append(""); + // artifact.append(""); artifact.append(""); //artifact.append(""); artifact.append(""); @@ -268,6 +307,7 @@ public reportHTML (HashMap> re //Add them back in order //formatted_Report.append(nodeGen); // formatted_Report.append("
    AttributeValue
    URLTitleProgram
    URLTitleProgram
    URLDateNameValueProgram
    URLDateReferrerTitleProgram
    FileSourceTimeProgram
    Artifact IDNameSizeAttributeValue
    Artifact IDNameSizeAttributeValue
    Artifact IDNameSizeHashset Name
    NameSizeHashset Name
    ").append(attributes.get(1)).append("").append(attributes.get(1)).append("").append(attributes.get(3)).append("").append(attributes.get(4)).append("
    ").append(attributes.get(1)).append("").append(attributes.get(1)).append("").append(attributes.get(2)).append("").append(attributes.get(3)).append("").append(attributes.get(6)).append("
    ").append(attributes.get(1)).append("").append(attributes.get(2)).append("").append(attributes.get(1)).append("").append(attributes.get(33)).append("").append(attributes.get(32)).append("").append(attributes.get(3)).append("").append(attributes.get(4)).append("
    ").append(attributes.get(8)).append("").append(attributes.get(8)).append("").append(attributes.get(1)).append("").append(attributes.get(2)).append("").append(attributes.get(33)).append("").append(attributes.get(4)).append("
    ").append(objId.toString()); - artifact.append("").append(file.getName().toString()).append("
    ").append(objId.toString()); + artifact.append("").append(attributes.get(6)).append("").append(attributes.get(5)).append("").append(filesize.toString()).append("
    ").append(objId.toString()); + artifact.append("").append(objId.toString()); artifact.append("").append(file.getName().toString()).append("").append(filesize.toString()).append("
    ").append(objId.toString()); + artifact.append("").append(objId.toString()); artifact.append("").append(file.getName().toString()).append("").append(filesize.toString()).append("
    ").append(objId.toString()); - artifact.append("").append(file.getName().toString()).append("
    ").append(objId.toString()); + artifact.append("").append(file.getName().toString()).append("").append(filesize.toString()).append("").append(attributes.get(31)).append("").append(attributes.get(30)).append("
    "); + formatted_Report.append(nodeWebBookmark); formatted_Report.append(""); formatted_Report.append(nodeWebCookie); diff --git a/Report/src/org/sleuthkit/autopsy/report/reportPanelAction.java b/Report/src/org/sleuthkit/autopsy/report/reportPanelAction.java index 4528aff206..023c29d263 100644 --- a/Report/src/org/sleuthkit/autopsy/report/reportPanelAction.java +++ b/Report/src/org/sleuthkit/autopsy/report/reportPanelAction.java @@ -97,7 +97,7 @@ public class reportPanelAction { // add the panel to the popup window popUpWindow.add(panel); - popUpWindow.setResizable(false); + popUpWindow.setResizable(true); popUpWindow.pack(); // set the location of the popUp Window on the center of the screen Dimension screenDimension = Toolkit.getDefaultToolkit().getScreenSize();