diff --git a/Core/src/com/basistech/df/cybertriage/autopsy/incidentoptions/Bundle.properties b/Core/src/com/basistech/df/cybertriage/autopsy/incidentoptions/Bundle.properties index ebde860d0b..48a2628742 100644 --- a/Core/src/com/basistech/df/cybertriage/autopsy/incidentoptions/Bundle.properties +++ b/Core/src/com/basistech/df/cybertriage/autopsy/incidentoptions/Bundle.properties @@ -12,3 +12,5 @@ CTIncidentImportOptionsPanel.border.title_1=Incident Importer CTIncidentImportOptionsPanel.incidentTextLabel.text=The Cyber Triage Incident Import module allows you to open data collected by Cyber Triage in Autopsy. To use this feature you must install the Cyber Triage Import Module. CTincidentImportOptionsPanel.instructionsTextLabel.text= CTIncidentImportOptionsPanel.instructionsTextLabel.text=For instructions on obtaining the module refer to: +CTIncidentImportOptionsPanel.importModule.text=Cyber Triage Import Module: +CTIncidentImportOptionsPanel.importModuleDetected.text= diff --git a/Core/src/com/basistech/df/cybertriage/autopsy/incidentoptions/Bundle.properties-MERGED b/Core/src/com/basistech/df/cybertriage/autopsy/incidentoptions/Bundle.properties-MERGED index ebde860d0b..dd406e6725 100644 --- a/Core/src/com/basistech/df/cybertriage/autopsy/incidentoptions/Bundle.properties-MERGED +++ b/Core/src/com/basistech/df/cybertriage/autopsy/incidentoptions/Bundle.properties-MERGED @@ -12,3 +12,7 @@ CTIncidentImportOptionsPanel.border.title_1=Incident Importer CTIncidentImportOptionsPanel.incidentTextLabel.text=The Cyber Triage Incident Import module allows you to open data collected by Cyber Triage in Autopsy. To use this feature you must install the Cyber Triage Import Module. CTincidentImportOptionsPanel.instructionsTextLabel.text= CTIncidentImportOptionsPanel.instructionsTextLabel.text=For instructions on obtaining the module refer to: +CTIncidentImportOptionsPanel.importModule.text=Cyber Triage Import Module: +CTIncidentImportOptionsPanel.importModuleDetected.text= +CTIncidentImportOptionsPanel_setModuleDetected_detected=Detected +CTIncidentImportOptionsPanel_setModuleDetected_notDetected=Not Detected diff --git a/Core/src/com/basistech/df/cybertriage/autopsy/incidentoptions/CTIncidentImportOptionsPanel.form b/Core/src/com/basistech/df/cybertriage/autopsy/incidentoptions/CTIncidentImportOptionsPanel.form index 7382a2de2c..fd11f53ee8 100644 --- a/Core/src/com/basistech/df/cybertriage/autopsy/incidentoptions/CTIncidentImportOptionsPanel.form +++ b/Core/src/com/basistech/df/cybertriage/autopsy/incidentoptions/CTIncidentImportOptionsPanel.form @@ -42,7 +42,35 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -68,7 +96,7 @@ - + @@ -86,7 +114,7 @@ - + diff --git a/Core/src/com/basistech/df/cybertriage/autopsy/incidentoptions/CTIncidentImportOptionsPanel.java b/Core/src/com/basistech/df/cybertriage/autopsy/incidentoptions/CTIncidentImportOptionsPanel.java index ef7aa5a67e..40a2c0fe3f 100644 --- a/Core/src/com/basistech/df/cybertriage/autopsy/incidentoptions/CTIncidentImportOptionsPanel.java +++ b/Core/src/com/basistech/df/cybertriage/autopsy/incidentoptions/CTIncidentImportOptionsPanel.java @@ -24,15 +24,20 @@ import java.io.File; import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; +import java.util.Collection; import java.util.Collections; import java.util.logging.Level; +import java.util.stream.Stream; import org.sleuthkit.autopsy.coreutils.Logger; import javax.swing.JFileChooser; import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; import org.apache.commons.lang3.StringUtils; import org.netbeans.spi.options.OptionsPanelController; +import org.openide.util.Lookup; +import org.openide.util.NbBundle.Messages; import org.openide.util.lookup.ServiceProvider; +import org.sleuthkit.autopsy.casemodule.AutopsyContentProvider; import org.sleuthkit.autopsy.casemodule.Case; import org.sleuthkit.autopsy.guiutils.JFileChooserFactory; @@ -46,6 +51,8 @@ public class CTIncidentImportOptionsPanel extends CTOptionsSubPanel { private static final String CT_IMPORTER_DOC_LINK = "https://docs.cybertriage.com/en/latest/chapters/integrations/autopsy.html"; + private static final String CT_STANDARD_CONTENT_PROVIDER_NAME = "CTStandardContentProvider"; + private final JFileChooserFactory fileRepoChooserFactory = new JFileChooserFactory(); private final CTSettingsPersistence ctPersistence = CTSettingsPersistence.getInstance(); @@ -93,8 +100,23 @@ public class CTIncidentImportOptionsPanel extends CTOptionsSubPanel { public synchronized void loadSettings() { CTSettings ctSettings = ctPersistence.loadCTSettings(); setCTSettingsDisplay(ctSettings); + setModuleDetected(); setEnabledItems(Case.isCaseOpen()); } + + @Messages({ + "CTIncidentImportOptionsPanel_setModuleDetected_detected=Detected", + "CTIncidentImportOptionsPanel_setModuleDetected_notDetected=Not Detected" + }) + private void setModuleDetected() { + Collection contentProviders = Lookup.getDefault().lookupAll(AutopsyContentProvider.class); + boolean detected = ((Collection) (contentProviders != null ? contentProviders : Collections.emptyList())).stream() + .anyMatch(p -> p != null && StringUtils.defaultString(p.getName()).toUpperCase().startsWith(CT_STANDARD_CONTENT_PROVIDER_NAME.toUpperCase())); + + this.importModuleDetected.setText(detected + ? Bundle.CTIncidentImportOptionsPanel_setModuleDetected_detected() + : Bundle.CTIncidentImportOptionsPanel_setModuleDetected_notDetected()); + } private void setEnabledItems(boolean caseOpen) { this.caseOpenWarningLabel.setVisible(caseOpen); @@ -127,6 +149,8 @@ public class CTIncidentImportOptionsPanel extends CTOptionsSubPanel { incidentTextPanel = new javax.swing.JPanel(); incidentTextLabel = new javax.swing.JLabel(); + javax.swing.JLabel importModule = new javax.swing.JLabel(); + importModuleDetected = new javax.swing.JLabel(); instructionsPanel = new javax.swing.JPanel(); instructionsTextLabel = new javax.swing.JLabel(); instructionsLinkLabel = new javax.swing.JLabel(); @@ -145,10 +169,28 @@ public class CTIncidentImportOptionsPanel extends CTOptionsSubPanel { gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 0; + gridBagConstraints.gridwidth = 2; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; + gridBagConstraints.weightx = 1.0; gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5); incidentTextPanel.add(incidentTextLabel, gridBagConstraints); + org.openide.awt.Mnemonics.setLocalizedText(importModule, org.openide.util.NbBundle.getMessage(CTIncidentImportOptionsPanel.class, "CTIncidentImportOptionsPanel.importModule.text")); // NOI18N + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 0; + gridBagConstraints.gridy = 1; + gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 3); + incidentTextPanel.add(importModule, gridBagConstraints); + + org.openide.awt.Mnemonics.setLocalizedText(importModuleDetected, org.openide.util.NbBundle.getMessage(CTIncidentImportOptionsPanel.class, "CTIncidentImportOptionsPanel.importModuleDetected.text")); // NOI18N + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 1; + gridBagConstraints.gridy = 1; + gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; + gridBagConstraints.weightx = 1.0; + gridBagConstraints.insets = new java.awt.Insets(5, 0, 5, 5); + incidentTextPanel.add(importModuleDetected, gridBagConstraints); + gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 0; @@ -161,7 +203,7 @@ public class CTIncidentImportOptionsPanel extends CTOptionsSubPanel { gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 0; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; - gridBagConstraints.insets = new java.awt.Insets(0, 5, 0, 0); + gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 0); instructionsPanel.add(instructionsTextLabel, gridBagConstraints); instructionsTextLabel.getAccessibleContext().setAccessibleName("For instructions on obtaining the module refer to:"); @@ -176,7 +218,7 @@ public class CTIncidentImportOptionsPanel extends CTOptionsSubPanel { gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 0; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; - gridBagConstraints.insets = new java.awt.Insets(0, 5, 5, 5); + gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5); instructionsPanel.add(instructionsLinkLabel, gridBagConstraints); gridBagConstraints = new java.awt.GridBagConstraints(); @@ -283,6 +325,7 @@ public class CTIncidentImportOptionsPanel extends CTOptionsSubPanel { private javax.swing.JLabel caseOpenWarningLabel; private javax.swing.JButton fileRepoBrowseButton; private javax.swing.JTextField fileRepoPathField; + private javax.swing.JLabel importModuleDetected; private javax.swing.JLabel incidentTextLabel; private javax.swing.JPanel incidentTextPanel; private javax.swing.JLabel instructionsLinkLabel;