From e18e1c2b30a7b155b0a1de45f73f96ce2dea2838 Mon Sep 17 00:00:00 2001 From: Ann Priestman Date: Thu, 25 Jan 2018 11:23:13 -0500 Subject: [PATCH 01/10] Fix correlation data source argument order --- .../autopsy/centralrepository/datamodel/AbstractSqlEamDb.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Core/src/org/sleuthkit/autopsy/centralrepository/datamodel/AbstractSqlEamDb.java b/Core/src/org/sleuthkit/autopsy/centralrepository/datamodel/AbstractSqlEamDb.java index 2cac9b4927..87478529f7 100644 --- a/Core/src/org/sleuthkit/autopsy/centralrepository/datamodel/AbstractSqlEamDb.java +++ b/Core/src/org/sleuthkit/autopsy/centralrepository/datamodel/AbstractSqlEamDb.java @@ -2172,7 +2172,7 @@ public abstract class AbstractSqlEamDb implements EamDb { } CorrelationAttributeInstance eamArtifactInstance = new CorrelationAttributeInstance( new CorrelationCase(resultSet.getInt("case_id"), resultSet.getString("case_uid"), resultSet.getString("case_name")), - new CorrelationDataSource(-1, resultSet.getInt("case_id"), resultSet.getString("device_id"), resultSet.getString("name")), + new CorrelationDataSource(resultSet.getInt("case_id"), -1, resultSet.getString("device_id"), resultSet.getString("name")), resultSet.getString("file_path"), resultSet.getString("comment"), TskData.FileKnown.valueOf(resultSet.getByte("known_status")) From 3f208e1a3b7d27a46a88814e3c8b3adb42222709 Mon Sep 17 00:00:00 2001 From: "U-BASIS\\dgrove" Date: Mon, 29 Jan 2018 16:10:33 -0500 Subject: [PATCH 02/10] Handling multiple files for kws list imports. --- .../GlobalListsManagementPanel.java | 127 +++++++++--------- 1 file changed, 65 insertions(+), 62 deletions(-) diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/GlobalListsManagementPanel.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/GlobalListsManagementPanel.java index aebf606380..6aae71be33 100644 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/GlobalListsManagementPanel.java +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/GlobalListsManagementPanel.java @@ -365,81 +365,84 @@ class GlobalListsManagementPanel extends javax.swing.JPanel implements OptionsPa chooser.addChoosableFileFilter(autopsyFilter); chooser.addChoosableFileFilter(encaseFilter); chooser.setAcceptAllFileFilterUsed(false); + chooser.setMultiSelectionEnabled(true); chooser.setFileSelectionMode(JFileChooser.FILES_ONLY); String listName = null; int returnVal = chooser.showOpenDialog(this); if (returnVal == JFileChooser.APPROVE_OPTION) { - File selFile = chooser.getSelectedFile(); - if (selFile == null) { - return; - } + File[] selFiles = chooser.getSelectedFiles(); - //force append extension if not given - String fileAbs = selFile.getAbsolutePath(); - - final KeywordSearchList reader; - - if (KeywordSearchUtil.isXMLList(fileAbs)) { - reader = new XmlKeywordSearchList(fileAbs); - } else { - reader = new EnCaseKeywordSearchList(fileAbs); - } - - if (!reader.load()) { - KeywordSearchUtil.displayDialog( - NbBundle.getMessage(this.getClass(), "KeywordSearch.listImportFeatureTitle"), NbBundle.getMessage(this.getClass(), "KeywordSearch.importListFileDialogMsg", fileAbs), KeywordSearchUtil.DIALOG_MESSAGE_TYPE.ERROR); - return; - } - - List toImport = reader.getListsL(); - List toImportConfirmed = new ArrayList<>(); - - final XmlKeywordSearchList writer = XmlKeywordSearchList.getCurrent(); - - for (KeywordList list : toImport) { - //check name collisions - listName = list.getName(); - if (writer.listExists(listName)) { - String[] options; - if (toImport.size() == 1) { //only give them cancel and yes buttons for single list imports - options = new String[]{NbBundle.getMessage(this.getClass(), "KeywordSearch.yesOwMsg"), - NbBundle.getMessage(this.getClass(), "KeywordSearch.cancelImportMsg")}; - } else { - options = new String[]{NbBundle.getMessage(this.getClass(), "KeywordSearch.yesOwMsg"), - NbBundle.getMessage(this.getClass(), "KeywordSearch.noSkipMsg"), - NbBundle.getMessage(this.getClass(), "KeywordSearch.cancelImportMsg")}; - } - int choice = JOptionPane.showOptionDialog(this, - NbBundle.getMessage(this.getClass(), "KeywordSearch.overwriteListPrompt", listName), - NbBundle.getMessage(this.getClass(), "KeywordSearch.importOwConflict"), - JOptionPane.YES_NO_CANCEL_OPTION, - JOptionPane.QUESTION_MESSAGE, - null, - options, - options[0]); - if (choice == JOptionPane.OK_OPTION) { - toImportConfirmed.add(list); - } else if (choice == JOptionPane.CANCEL_OPTION) { - break; - } + for (File file : selFiles) { + if (file == null) { + continue; + } + + //force append extension if not given + String fileAbs = file.getAbsolutePath(); + final KeywordSearchList reader; + if (KeywordSearchUtil.isXMLList(fileAbs)) { + reader = new XmlKeywordSearchList(fileAbs); } else { - //no conflict - toImportConfirmed.add(list); + reader = new EnCaseKeywordSearchList(fileAbs); } - } + if (!reader.load()) { + KeywordSearchUtil.displayDialog( + NbBundle.getMessage(this.getClass(), "KeywordSearch.listImportFeatureTitle"), NbBundle.getMessage(this.getClass(), "KeywordSearch.importListFileDialogMsg", fileAbs), KeywordSearchUtil.DIALOG_MESSAGE_TYPE.ERROR); + return; + } - if (toImportConfirmed.isEmpty()) { - return; - } + List toImport = reader.getListsL(); + List toImportConfirmed = new ArrayList<>(); - if (!writer.writeLists(toImportConfirmed)) { - KeywordSearchUtil.displayDialog( - NbBundle.getMessage(this.getClass(), "KeywordSearch.listImportFeatureTitle"), NbBundle.getMessage(this.getClass(), "KeywordSearch.kwListFailImportMsg"), KeywordSearchUtil.DIALOG_MESSAGE_TYPE.INFO); + final XmlKeywordSearchList writer = XmlKeywordSearchList.getCurrent(); + + for (KeywordList list : toImport) { + //check name collisions + listName = list.getName(); + if (writer.listExists(listName)) { + String[] options; + if (toImport.size() == 1) { //only give them cancel and yes buttons for single list imports + options = new String[]{NbBundle.getMessage(this.getClass(), "KeywordSearch.yesOwMsg"), + NbBundle.getMessage(this.getClass(), "KeywordSearch.cancelImportMsg")}; + } else { + options = new String[]{NbBundle.getMessage(this.getClass(), "KeywordSearch.yesOwMsg"), + NbBundle.getMessage(this.getClass(), "KeywordSearch.noSkipMsg"), + NbBundle.getMessage(this.getClass(), "KeywordSearch.cancelImportMsg")}; + } + int choice = JOptionPane.showOptionDialog(this, + NbBundle.getMessage(this.getClass(), "KeywordSearch.overwriteListPrompt", listName), + NbBundle.getMessage(this.getClass(), "KeywordSearch.importOwConflict"), + JOptionPane.YES_NO_CANCEL_OPTION, + JOptionPane.QUESTION_MESSAGE, + null, + options, + options[0]); + if (choice == JOptionPane.OK_OPTION) { + toImportConfirmed.add(list); + } else if (choice == JOptionPane.CANCEL_OPTION) { + break; + } + + } else { + //no conflict + toImportConfirmed.add(list); + } + + } + + if (toImportConfirmed.isEmpty()) { + return; + } + + if (!writer.writeLists(toImportConfirmed)) { + KeywordSearchUtil.displayDialog( + NbBundle.getMessage(this.getClass(), "KeywordSearch.listImportFeatureTitle"), NbBundle.getMessage(this.getClass(), "KeywordSearch.kwListFailImportMsg"), KeywordSearchUtil.DIALOG_MESSAGE_TYPE.INFO); + } + ModuleSettings.setConfigSetting(ModuleSettings.MAIN_SETTINGS, LAST_KEYWORD_LIST_PATH_KEY, file.getParent()); } - ModuleSettings.setConfigSetting(ModuleSettings.MAIN_SETTINGS, LAST_KEYWORD_LIST_PATH_KEY, selFile.getParent()); } tableModel.resync(); From 8bd4317f94b35a7bb9ec83d2fb8461cd5ed19a38 Mon Sep 17 00:00:00 2001 From: Richard Cordovano Date: Tue, 30 Jan 2018 16:57:01 -0500 Subject: [PATCH 03/10] Add NamedThreadFactory to ThreadUtils --- .../autopsy/coreutils/ThreadUtils.java | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/Core/src/org/sleuthkit/autopsy/coreutils/ThreadUtils.java b/Core/src/org/sleuthkit/autopsy/coreutils/ThreadUtils.java index b9873469e7..8a354a531a 100644 --- a/Core/src/org/sleuthkit/autopsy/coreutils/ThreadUtils.java +++ b/Core/src/org/sleuthkit/autopsy/coreutils/ThreadUtils.java @@ -19,6 +19,7 @@ package org.sleuthkit.autopsy.coreutils; import java.util.concurrent.ExecutorService; +import java.util.concurrent.ThreadFactory; import java.util.concurrent.TimeUnit; /* @@ -50,6 +51,35 @@ final public class ThreadUtils { } } + /** + * A thread factory that allows for the creation of distinctly named task + * threads by an ExecutorService constructed using an Executors factory + * method. Each thread created using the factory will be named using the + * thread name and a numerical suffix. + */ + public static class NamedThreadFactory implements ThreadFactory { + + private final String threadName; + + /** + * Contructs a thread factory that allows for the creation of distinctly + * named task threads by an ExecutorService constructed using an + * Executors factory method. Each thread created using the factory will + * be named using the thread name and a numerical suffix. + * + * @param threadName The name of the threads. + */ + public NamedThreadFactory(String threadName) { + this.threadName = threadName; + } + + @Override + public Thread newThread(Runnable task) { + return new Thread(task, threadName); + } + + } + private ThreadUtils() { } } From 52cd06a1147d5aed1dec1b6a8b06d429917e0d5e Mon Sep 17 00:00:00 2001 From: Richard Cordovano Date: Tue, 30 Jan 2018 17:23:48 -0500 Subject: [PATCH 04/10] Revert "Add NamedThreadFactory to ThreadUtils" This reverts commit 8bd4317f94b35a7bb9ec83d2fb8461cd5ed19a38. --- .../autopsy/coreutils/ThreadUtils.java | 30 ------------------- 1 file changed, 30 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/coreutils/ThreadUtils.java b/Core/src/org/sleuthkit/autopsy/coreutils/ThreadUtils.java index 8a354a531a..b9873469e7 100644 --- a/Core/src/org/sleuthkit/autopsy/coreutils/ThreadUtils.java +++ b/Core/src/org/sleuthkit/autopsy/coreutils/ThreadUtils.java @@ -19,7 +19,6 @@ package org.sleuthkit.autopsy.coreutils; import java.util.concurrent.ExecutorService; -import java.util.concurrent.ThreadFactory; import java.util.concurrent.TimeUnit; /* @@ -51,35 +50,6 @@ final public class ThreadUtils { } } - /** - * A thread factory that allows for the creation of distinctly named task - * threads by an ExecutorService constructed using an Executors factory - * method. Each thread created using the factory will be named using the - * thread name and a numerical suffix. - */ - public static class NamedThreadFactory implements ThreadFactory { - - private final String threadName; - - /** - * Contructs a thread factory that allows for the creation of distinctly - * named task threads by an ExecutorService constructed using an - * Executors factory method. Each thread created using the factory will - * be named using the thread name and a numerical suffix. - * - * @param threadName The name of the threads. - */ - public NamedThreadFactory(String threadName) { - this.threadName = threadName; - } - - @Override - public Thread newThread(Runnable task) { - return new Thread(task, threadName); - } - - } - private ThreadUtils() { } } From 49e0c8d28c12fde63b101cb7e1f33a3a713bfee0 Mon Sep 17 00:00:00 2001 From: Ann Priestman Date: Thu, 1 Feb 2018 09:18:39 -0500 Subject: [PATCH 05/10] Remove Details button from Ingest History screenshot --- .../images/case-properties-history-tab.PNG | Bin 29219 -> 28533 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/doxygen-user/images/case-properties-history-tab.PNG b/docs/doxygen-user/images/case-properties-history-tab.PNG index fc0a4da441bf5cfce71ddfab700066e8b2196994..0a5d8f25b75fbc102bb21cbe921c518f4417e6de 100644 GIT binary patch delta 8454 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 Date: Thu, 1 Feb 2018 09:25:49 -0500 Subject: [PATCH 06/10] Merge pull request #3395 from zhhl/3366-EditDetailsButtonMisplaced 3366 Edit Details button is misplaced --- .../sleuthkit/autopsy/casemodule/CaseInformationPanel.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/CaseInformationPanel.java b/Core/src/org/sleuthkit/autopsy/casemodule/CaseInformationPanel.java index b03a17920e..2a460d5c46 100644 --- a/Core/src/org/sleuthkit/autopsy/casemodule/CaseInformationPanel.java +++ b/Core/src/org/sleuthkit/autopsy/casemodule/CaseInformationPanel.java @@ -1,7 +1,7 @@ /* * Autopsy Forensic Browser * - * Copyright 2011-2017 Basis Technology Corp. + * Copyright 2011-2018 Basis Technology Corp. * Contact: carrier sleuthkit org * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -61,6 +61,11 @@ class CaseInformationPanel extends javax.swing.JPanel { @Override public void stateChanged(ChangeEvent e) { tabbedPane.getSelectedComponent().setSize(tabbedPane.getSelectedComponent().getPreferredSize()); + if (tabbedPane.getSelectedComponent() instanceof CasePropertiesPanel) { + editDetailsButton.setVisible(true); + } else { + editDetailsButton.setVisible(false); + } } }); } From 4c11cb8acb1fa387936dc5beaefb8f1ba85966f3 Mon Sep 17 00:00:00 2001 From: Richard Cordovano Date: Thu, 1 Feb 2018 14:24:27 -0500 Subject: [PATCH 07/10] Merge pull request #3392 from zhhl/3469_3470-FixExcelAndHMTLReportIssues 3469 3470 fix Excel and HTML report issues --- .../sleuthkit/autopsy/report/ReportExcel.java | 17 ++++++++++++++++- .../sleuthkit/autopsy/report/ReportHTML.java | 4 +++- .../autopsy/report/TableReportGenerator.java | 6 ++---- 3 files changed, 21 insertions(+), 6 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/report/ReportExcel.java b/Core/src/org/sleuthkit/autopsy/report/ReportExcel.java index 19526a0a19..9158790ad6 100644 --- a/Core/src/org/sleuthkit/autopsy/report/ReportExcel.java +++ b/Core/src/org/sleuthkit/autopsy/report/ReportExcel.java @@ -34,6 +34,7 @@ class ReportExcel implements TableReportModule { private static final Logger logger = Logger.getLogger(ReportExcel.class.getName()); private static ReportExcel instance; + private static final int EXCEL_CELL_MAXIMUM_SIZE = 36767; //Specified at:https://poi.apache.org/apidocs/org/apache/poi/ss/SpreadsheetVersion.html private Workbook wb; private Sheet sheet; @@ -236,10 +237,24 @@ class ReportExcel implements TableReportModule { * @param row cells to add */ @Override + @NbBundle.Messages({ + "ReportExcel.exceptionMessage.dataTooLarge=Value is too long to fit into an Excel cell. ", + "ReportExcel.exceptionMessage.errorText=Error showing data into an Excel cell." + }) + public void addRow(List rowData) { Row row = sheet.createRow(rowIndex); for (int i = 0; i < rowData.size(); ++i) { - row.createCell(i).setCellValue(rowData.get(i)); + Cell excelCell = row.createCell(i); + try { + excelCell.setCellValue(rowData.get(i)); + } catch (Exception e) { + if (e instanceof java.lang.IllegalArgumentException && rowData.get(i).length() > EXCEL_CELL_MAXIMUM_SIZE) { + excelCell.setCellValue(Bundle.ReportExcel_exceptionMessage_dataTooLarge() + e.getMessage()); + } else { + excelCell.setCellValue(Bundle.ReportExcel_exceptionMessage_errorText()); + } + } } ++rowIndex; } diff --git a/Core/src/org/sleuthkit/autopsy/report/ReportHTML.java b/Core/src/org/sleuthkit/autopsy/report/ReportHTML.java index 88d9fe44b1..01a179a370 100644 --- a/Core/src/org/sleuthkit/autopsy/report/ReportHTML.java +++ b/Core/src/org/sleuthkit/autopsy/report/ReportHTML.java @@ -51,6 +51,7 @@ import org.openide.util.NbBundle; import org.sleuthkit.autopsy.casemodule.Case; import org.sleuthkit.autopsy.casemodule.services.Services; import org.sleuthkit.autopsy.casemodule.services.TagsManager; +import org.sleuthkit.autopsy.coreutils.EscapeUtil; import org.sleuthkit.autopsy.coreutils.ImageUtils; import org.sleuthkit.autopsy.coreutils.Logger; import org.sleuthkit.autopsy.datamodel.ContentUtils.ExtractFscContentVisitor; @@ -554,7 +555,8 @@ class ReportHTML implements TableReportModule { StringBuilder builder = new StringBuilder(); builder.append("\t\n"); //NON-NLS for (String cell : row) { - builder.append("\t\t").append(cell).append("\n"); //NON-NLS + String escapeHTMLCell = EscapeUtil.escapeHtml(cell); + builder.append("\t\t").append(escapeHTMLCell).append("\n"); //NON-NLS } builder.append("\t\n"); //NON-NLS rowCount++; diff --git a/Core/src/org/sleuthkit/autopsy/report/TableReportGenerator.java b/Core/src/org/sleuthkit/autopsy/report/TableReportGenerator.java index 93894022b3..499f848d54 100644 --- a/Core/src/org/sleuthkit/autopsy/report/TableReportGenerator.java +++ b/Core/src/org/sleuthkit/autopsy/report/TableReportGenerator.java @@ -1,7 +1,7 @@ /* * Autopsy Forensic Browser * - * Copyright 2013-16 Basis Technology Corp. + * Copyright 2013-2018 Basis Technology Corp. * Contact: carrier sleuthkit org * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -40,7 +40,6 @@ import java.util.logging.Level; import org.openide.util.NbBundle; import org.sleuthkit.autopsy.casemodule.Case; import org.sleuthkit.autopsy.casemodule.services.TagsManager; -import org.sleuthkit.autopsy.coreutils.EscapeUtil; import org.sleuthkit.autopsy.coreutils.ImageUtils; import org.sleuthkit.autopsy.coreutils.Logger; import org.sleuthkit.autopsy.datamodel.ContentUtils; @@ -666,8 +665,7 @@ class TableReportGenerator { tableModule.startTable(columnHeaderNames); } - String previewreplace = EscapeUtil.escapeHtml(preview); - tableModule.addRow(Arrays.asList(new String[]{previewreplace.replaceAll(" Date: Fri, 2 Feb 2018 11:56:04 -0500 Subject: [PATCH 08/10] 3522 change case path used by Multi-User case panel to be real path instead of all caps --- .../src/org/sleuthkit/autopsy/casemodule/CaseBrowser.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/CaseBrowser.java b/Core/src/org/sleuthkit/autopsy/casemodule/CaseBrowser.java index 24aaf70d2e..e283ef91d9 100644 --- a/Core/src/org/sleuthkit/autopsy/casemodule/CaseBrowser.java +++ b/Core/src/org/sleuthkit/autopsy/casemodule/CaseBrowser.java @@ -29,6 +29,8 @@ import org.netbeans.swing.outline.Outline; import org.openide.nodes.Node; import java.awt.EventQueue; import java.io.File; +import java.io.IOException; +import java.nio.file.LinkOption; import java.nio.file.Path; import java.nio.file.Paths; import java.util.ArrayList; @@ -222,10 +224,10 @@ class CaseBrowser extends javax.swing.JPanel implements ExplorerManager.Provider String name = file.getName().toLowerCase(); if (autFilePath == null && name.endsWith(".aut")) { try { - caseList.add(new CaseMetadata(Paths.get(file.getAbsolutePath()))); - } catch (CaseMetadata.CaseMetadataException ex) { + caseList.add(new CaseMetadata(Paths.get(file.getAbsolutePath()).toRealPath(LinkOption.NOFOLLOW_LINKS))); + } catch (CaseMetadata.CaseMetadataException | IOException ex) { LOGGER.log(Level.SEVERE, String.format("Error reading case metadata file '%s'.", autFilePath), ex); - } + } break; } } From 703cb9f223fd378402e29d33befcb035c23f75ec Mon Sep 17 00:00:00 2001 From: William Schaefer Date: Fri, 2 Feb 2018 12:47:32 -0500 Subject: [PATCH 09/10] 3522 fix location of real path conversion to before any file access --- .../autopsy/casemodule/CaseBrowser.java | 46 +++++++++++-------- 1 file changed, 26 insertions(+), 20 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/CaseBrowser.java b/Core/src/org/sleuthkit/autopsy/casemodule/CaseBrowser.java index e283ef91d9..4f25030fd3 100644 --- a/Core/src/org/sleuthkit/autopsy/casemodule/CaseBrowser.java +++ b/Core/src/org/sleuthkit/autopsy/casemodule/CaseBrowser.java @@ -209,28 +209,34 @@ class CaseBrowser extends javax.swing.JPanel implements ExplorerManager.Provider List nodeList = CoordinationService.getInstance().getNodeList(CoordinationService.CategoryNode.CASES); for (String node : nodeList) { - Path casePath = Paths.get(node); - File caseFolder = casePath.toFile(); - if (caseFolder.exists()) { - /* - * Search for '*.aut' files. - */ - File[] fileArray = caseFolder.listFiles(); - if (fileArray == null) { - continue; - } - String autFilePath = null; - for (File file : fileArray) { - String name = file.getName().toLowerCase(); - if (autFilePath == null && name.endsWith(".aut")) { - try { - caseList.add(new CaseMetadata(Paths.get(file.getAbsolutePath()).toRealPath(LinkOption.NOFOLLOW_LINKS))); - } catch (CaseMetadata.CaseMetadataException | IOException ex) { - LOGGER.log(Level.SEVERE, String.format("Error reading case metadata file '%s'.", autFilePath), ex); - } - break; + Path casePath; + try { + casePath = Paths.get(node).toRealPath(LinkOption.NOFOLLOW_LINKS); + + File caseFolder = casePath.toFile(); + if (caseFolder.exists()) { + /* + * Search for '*.aut' files. + */ + File[] fileArray = caseFolder.listFiles(); + if (fileArray == null) { + continue; + } + String autFilePath = null; + for (File file : fileArray) { + String name = file.getName().toLowerCase(); + if (autFilePath == null && name.endsWith(".aut")) { + try { + caseList.add(new CaseMetadata(Paths.get(file.getAbsolutePath()))); + } catch (CaseMetadata.CaseMetadataException ex) { + LOGGER.log(Level.SEVERE, String.format("Error reading case metadata file '%s'.", autFilePath), ex); + } + break; + } } } + } catch (IOException ignore) { + //if a path could not be resolved to a real path do add it to the caseList } } return caseList; From 4cd548e456532e502172f4b7bcaa8138a16e7da6 Mon Sep 17 00:00:00 2001 From: Brian Carrier Date: Wed, 7 Feb 2018 22:43:56 -0500 Subject: [PATCH 10/10] 3536 - Look at all Content in node so that artifacts are not shown --- .../corecomponents/DataContentViewerHex.java | 2 +- .../DataContentViewerString.java | 3 +- .../DataContentViewerUtility.java | 54 +++++++++++++++++++ 3 files changed, 56 insertions(+), 3 deletions(-) create mode 100755 Core/src/org/sleuthkit/autopsy/corecomponents/DataContentViewerUtility.java diff --git a/Core/src/org/sleuthkit/autopsy/corecomponents/DataContentViewerHex.java b/Core/src/org/sleuthkit/autopsy/corecomponents/DataContentViewerHex.java index a7a97e4b75..7a4df69e9d 100644 --- a/Core/src/org/sleuthkit/autopsy/corecomponents/DataContentViewerHex.java +++ b/Core/src/org/sleuthkit/autopsy/corecomponents/DataContentViewerHex.java @@ -453,7 +453,7 @@ public class DataContentViewerHex extends javax.swing.JPanel implements DataCont return; } - Content content = (selectedNode).getLookup().lookup(Content.class); + Content content = DataContentViewerUtility.getDefaultContent(selectedNode); if (content == null) { resetComponent(); return; diff --git a/Core/src/org/sleuthkit/autopsy/corecomponents/DataContentViewerString.java b/Core/src/org/sleuthkit/autopsy/corecomponents/DataContentViewerString.java index 14cb2eb2c1..936ff3c46b 100644 --- a/Core/src/org/sleuthkit/autopsy/corecomponents/DataContentViewerString.java +++ b/Core/src/org/sleuthkit/autopsy/corecomponents/DataContentViewerString.java @@ -452,8 +452,7 @@ public class DataContentViewerString extends javax.swing.JPanel implements DataC return; } - Lookup lookup = selectedNode.getLookup(); - Content content = lookup.lookup(Content.class); + Content content = DataContentViewerUtility.getDefaultContent(selectedNode); if (content != null) { this.setDataView(content, 0); return; diff --git a/Core/src/org/sleuthkit/autopsy/corecomponents/DataContentViewerUtility.java b/Core/src/org/sleuthkit/autopsy/corecomponents/DataContentViewerUtility.java new file mode 100755 index 0000000000..53491b407e --- /dev/null +++ b/Core/src/org/sleuthkit/autopsy/corecomponents/DataContentViewerUtility.java @@ -0,0 +1,54 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2018 Basis Technology Corp. + * Contact: carrier sleuthkit org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.sleuthkit.autopsy.corecomponents; + +import org.sleuthkit.datamodel.Content; +import org.openide.nodes.Node; +import org.sleuthkit.datamodel.BlackboardArtifact; + +/** + * Utility classes for content viewers. + * In theory, this would live in the contentviewer package, + * but the initial method was needed only be viewers in + * corecomponents and therefore can stay out of public API. + */ +class DataContentViewerUtility { + /** + * Returns the first non-Blackboard Artifact from a Node. + * Needed for (at least) Hex and Strings that want to view + * all types of content (not just AbstractFile), but don't want + * to display an artifact unless that's the only thing there. + * Scenario is hash hit or interesting item hit. + * + * @param node Node passed into content viewer + * @return highest priority content or null if there is no content + */ + static Content getDefaultContent(Node node) { + Content bbContentSeen = null; + for (Content content : (node).getLookup().lookupAll(Content.class)) { + if (content instanceof BlackboardArtifact) { + bbContentSeen = content; + } + else { + return content; + } + } + return bbContentSeen; + } +}