Skip to content

Commit c1c19db

Browse files
authored
Merge pull request #7845 from gdicristofaro/ctIsImporterAvailable
detect ct module
2 parents 67e516e + fd74be8 commit c1c19db

File tree

4 files changed

+82
-5
lines changed

4 files changed

+82
-5
lines changed

Core/src/com/basistech/df/cybertriage/autopsy/incidentoptions/Bundle.properties

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,3 +12,5 @@ CTIncidentImportOptionsPanel.border.title_1=Incident Importer
1212
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.
1313
CTincidentImportOptionsPanel.instructionsTextLabel.text=
1414
CTIncidentImportOptionsPanel.instructionsTextLabel.text=For instructions on obtaining the module refer to:
15+
CTIncidentImportOptionsPanel.importModule.text=Cyber Triage Import Module:
16+
CTIncidentImportOptionsPanel.importModuleDetected.text=

Core/src/com/basistech/df/cybertriage/autopsy/incidentoptions/Bundle.properties-MERGED

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,3 +12,7 @@ CTIncidentImportOptionsPanel.border.title_1=Incident Importer
1212
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.
1313
CTincidentImportOptionsPanel.instructionsTextLabel.text=
1414
CTIncidentImportOptionsPanel.instructionsTextLabel.text=For instructions on obtaining the module refer to:
15+
CTIncidentImportOptionsPanel.importModule.text=Cyber Triage Import Module:
16+
CTIncidentImportOptionsPanel.importModuleDetected.text=
17+
CTIncidentImportOptionsPanel_setModuleDetected_detected=Detected
18+
CTIncidentImportOptionsPanel_setModuleDetected_notDetected=Not Detected

Core/src/com/basistech/df/cybertriage/autopsy/incidentoptions/CTIncidentImportOptionsPanel.form

Lines changed: 31 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,35 @@
4242
</Properties>
4343
<Constraints>
4444
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
45-
<GridBagConstraints gridX="0" gridY="0" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="5" insetsLeft="5" insetsBottom="5" insetsRight="5" anchor="18" weightX="0.0" weightY="0.0"/>
45+
<GridBagConstraints gridX="0" gridY="0" gridWidth="2" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="5" insetsLeft="5" insetsBottom="5" insetsRight="5" anchor="18" weightX="1.0" weightY="0.0"/>
46+
</Constraint>
47+
</Constraints>
48+
</Component>
49+
<Component class="javax.swing.JLabel" name="importModule">
50+
<Properties>
51+
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
52+
<ResourceString bundle="com/basistech/df/cybertriage/autopsy/incidentoptions/Bundle.properties" key="CTIncidentImportOptionsPanel.importModule.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
53+
</Property>
54+
</Properties>
55+
<AuxValues>
56+
<AuxValue name="JavaCodeGenerator_VariableLocal" type="java.lang.Boolean" value="true"/>
57+
<AuxValue name="JavaCodeGenerator_VariableModifier" type="java.lang.Integer" value="0"/>
58+
</AuxValues>
59+
<Constraints>
60+
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
61+
<GridBagConstraints gridX="0" gridY="1" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="5" insetsLeft="5" insetsBottom="5" insetsRight="3" anchor="10" weightX="0.0" weightY="0.0"/>
62+
</Constraint>
63+
</Constraints>
64+
</Component>
65+
<Component class="javax.swing.JLabel" name="importModuleDetected">
66+
<Properties>
67+
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
68+
<ResourceString bundle="com/basistech/df/cybertriage/autopsy/incidentoptions/Bundle.properties" key="CTIncidentImportOptionsPanel.importModuleDetected.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
69+
</Property>
70+
</Properties>
71+
<Constraints>
72+
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
73+
<GridBagConstraints gridX="1" gridY="1" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="5" insetsLeft="0" insetsBottom="5" insetsRight="5" anchor="18" weightX="1.0" weightY="0.0"/>
4674
</Constraint>
4775
</Constraints>
4876
</Component>
@@ -68,7 +96,7 @@
6896
</AccessibilityProperties>
6997
<Constraints>
7098
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
71-
<GridBagConstraints gridX="0" gridY="0" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="5" insetsBottom="0" insetsRight="0" anchor="18" weightX="0.0" weightY="0.0"/>
99+
<GridBagConstraints gridX="0" gridY="0" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="5" insetsLeft="5" insetsBottom="5" insetsRight="0" anchor="18" weightX="0.0" weightY="0.0"/>
72100
</Constraint>
73101
</Constraints>
74102
</Component>
@@ -86,7 +114,7 @@
86114
</Events>
87115
<Constraints>
88116
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
89-
<GridBagConstraints gridX="1" gridY="0" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="5" insetsBottom="5" insetsRight="5" anchor="18" weightX="0.0" weightY="0.0"/>
117+
<GridBagConstraints gridX="1" gridY="0" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="5" insetsLeft="5" insetsBottom="5" insetsRight="5" anchor="18" weightX="0.0" weightY="0.0"/>
90118
</Constraint>
91119
</Constraints>
92120
</Component>

Core/src/com/basistech/df/cybertriage/autopsy/incidentoptions/CTIncidentImportOptionsPanel.java

Lines changed: 45 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,15 +24,20 @@
2424
import java.io.IOException;
2525
import java.net.URI;
2626
import java.net.URISyntaxException;
27+
import java.util.Collection;
2728
import java.util.Collections;
2829
import java.util.logging.Level;
30+
import java.util.stream.Stream;
2931
import org.sleuthkit.autopsy.coreutils.Logger;
3032
import javax.swing.JFileChooser;
3133
import javax.swing.event.DocumentEvent;
3234
import javax.swing.event.DocumentListener;
3335
import org.apache.commons.lang3.StringUtils;
3436
import org.netbeans.spi.options.OptionsPanelController;
37+
import org.openide.util.Lookup;
38+
import org.openide.util.NbBundle.Messages;
3539
import org.openide.util.lookup.ServiceProvider;
40+
import org.sleuthkit.autopsy.casemodule.AutopsyContentProvider;
3641
import org.sleuthkit.autopsy.casemodule.Case;
3742
import org.sleuthkit.autopsy.guiutils.JFileChooserFactory;
3843

@@ -46,6 +51,8 @@ public class CTIncidentImportOptionsPanel extends CTOptionsSubPanel {
4651

4752
private static final String CT_IMPORTER_DOC_LINK = "https://docs.cybertriage.com/en/latest/chapters/integrations/autopsy.html";
4853

54+
private static final String CT_STANDARD_CONTENT_PROVIDER_NAME = "CTStandardContentProvider";
55+
4956
private final JFileChooserFactory fileRepoChooserFactory = new JFileChooserFactory();
5057
private final CTSettingsPersistence ctPersistence = CTSettingsPersistence.getInstance();
5158

@@ -93,8 +100,23 @@ public synchronized void saveSettings() {
93100
public synchronized void loadSettings() {
94101
CTSettings ctSettings = ctPersistence.loadCTSettings();
95102
setCTSettingsDisplay(ctSettings);
103+
setModuleDetected();
96104
setEnabledItems(Case.isCaseOpen());
97105
}
106+
107+
@Messages({
108+
"CTIncidentImportOptionsPanel_setModuleDetected_detected=Detected",
109+
"CTIncidentImportOptionsPanel_setModuleDetected_notDetected=Not Detected"
110+
})
111+
private void setModuleDetected() {
112+
Collection<? extends AutopsyContentProvider> contentProviders = Lookup.getDefault().lookupAll(AutopsyContentProvider.class);
113+
boolean detected = ((Collection<? extends AutopsyContentProvider>) (contentProviders != null ? contentProviders : Collections.emptyList())).stream()
114+
.anyMatch(p -> p != null && StringUtils.defaultString(p.getName()).toUpperCase().startsWith(CT_STANDARD_CONTENT_PROVIDER_NAME.toUpperCase()));
115+
116+
this.importModuleDetected.setText(detected
117+
? Bundle.CTIncidentImportOptionsPanel_setModuleDetected_detected()
118+
: Bundle.CTIncidentImportOptionsPanel_setModuleDetected_notDetected());
119+
}
98120

99121
private void setEnabledItems(boolean caseOpen) {
100122
this.caseOpenWarningLabel.setVisible(caseOpen);
@@ -127,6 +149,8 @@ private void initComponents() {
127149

128150
incidentTextPanel = new javax.swing.JPanel();
129151
incidentTextLabel = new javax.swing.JLabel();
152+
javax.swing.JLabel importModule = new javax.swing.JLabel();
153+
importModuleDetected = new javax.swing.JLabel();
130154
instructionsPanel = new javax.swing.JPanel();
131155
instructionsTextLabel = new javax.swing.JLabel();
132156
instructionsLinkLabel = new javax.swing.JLabel();
@@ -145,10 +169,28 @@ private void initComponents() {
145169
gridBagConstraints = new java.awt.GridBagConstraints();
146170
gridBagConstraints.gridx = 0;
147171
gridBagConstraints.gridy = 0;
172+
gridBagConstraints.gridwidth = 2;
148173
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
174+
gridBagConstraints.weightx = 1.0;
149175
gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
150176
incidentTextPanel.add(incidentTextLabel, gridBagConstraints);
151177

178+
org.openide.awt.Mnemonics.setLocalizedText(importModule, org.openide.util.NbBundle.getMessage(CTIncidentImportOptionsPanel.class, "CTIncidentImportOptionsPanel.importModule.text")); // NOI18N
179+
gridBagConstraints = new java.awt.GridBagConstraints();
180+
gridBagConstraints.gridx = 0;
181+
gridBagConstraints.gridy = 1;
182+
gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 3);
183+
incidentTextPanel.add(importModule, gridBagConstraints);
184+
185+
org.openide.awt.Mnemonics.setLocalizedText(importModuleDetected, org.openide.util.NbBundle.getMessage(CTIncidentImportOptionsPanel.class, "CTIncidentImportOptionsPanel.importModuleDetected.text")); // NOI18N
186+
gridBagConstraints = new java.awt.GridBagConstraints();
187+
gridBagConstraints.gridx = 1;
188+
gridBagConstraints.gridy = 1;
189+
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
190+
gridBagConstraints.weightx = 1.0;
191+
gridBagConstraints.insets = new java.awt.Insets(5, 0, 5, 5);
192+
incidentTextPanel.add(importModuleDetected, gridBagConstraints);
193+
152194
gridBagConstraints = new java.awt.GridBagConstraints();
153195
gridBagConstraints.gridx = 0;
154196
gridBagConstraints.gridy = 0;
@@ -161,7 +203,7 @@ private void initComponents() {
161203
gridBagConstraints.gridx = 0;
162204
gridBagConstraints.gridy = 0;
163205
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
164-
gridBagConstraints.insets = new java.awt.Insets(0, 5, 0, 0);
206+
gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 0);
165207
instructionsPanel.add(instructionsTextLabel, gridBagConstraints);
166208
instructionsTextLabel.getAccessibleContext().setAccessibleName("For instructions on obtaining the module refer to:");
167209

@@ -176,7 +218,7 @@ public void mouseClicked(java.awt.event.MouseEvent evt) {
176218
gridBagConstraints.gridx = 1;
177219
gridBagConstraints.gridy = 0;
178220
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
179-
gridBagConstraints.insets = new java.awt.Insets(0, 5, 5, 5);
221+
gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
180222
instructionsPanel.add(instructionsLinkLabel, gridBagConstraints);
181223

182224
gridBagConstraints = new java.awt.GridBagConstraints();
@@ -283,6 +325,7 @@ private void gotoLink(String url) {
283325
private javax.swing.JLabel caseOpenWarningLabel;
284326
private javax.swing.JButton fileRepoBrowseButton;
285327
private javax.swing.JTextField fileRepoPathField;
328+
private javax.swing.JLabel importModuleDetected;
286329
private javax.swing.JLabel incidentTextLabel;
287330
private javax.swing.JPanel incidentTextPanel;
288331
private javax.swing.JLabel instructionsLinkLabel;

0 commit comments

Comments
 (0)