Autopsy 4.22.1
Graphical digital forensics platform for The Sleuth Kit and other tools.
ExcelExportAction.java
Go to the documentation of this file.
1/*
2 * Autopsy Forensic Browser
3 *
4 * Copyright 2021 Basis Technology Corp.
5 * Contact: carrier <at> sleuthkit <dot> org
6 *
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
10 *
11 * http://www.apache.org/licenses/LICENSE-2.0
12 *
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 */
19package org.sleuthkit.autopsy.report.modules.datasourcesummaryexport;
20
21import java.io.File;
22import java.io.IOException;
23import java.nio.file.Paths;
24import java.text.DateFormat;
25import java.text.SimpleDateFormat;
26import java.util.ArrayList;
27import java.util.Date;
28import java.util.List;
29import java.util.logging.Level;
30import org.openide.util.NbBundle;
31import org.openide.util.NbBundle.Messages;
32import org.sleuthkit.autopsy.casemodule.Case;
33import org.sleuthkit.autopsy.casemodule.NoCurrentCaseException;
34import org.sleuthkit.autopsy.coreutils.FileUtil;
35import org.sleuthkit.autopsy.coreutils.Logger;
36import org.sleuthkit.autopsy.datasourcesummary.datamodel.DataFetcher;
37import org.sleuthkit.autopsy.report.ReportProgressPanel;
38import org.sleuthkit.autopsy.report.modules.datasourcesummaryexport.ExcelExport.ExcelExportException;
39import org.sleuthkit.autopsy.report.modules.datasourcesummaryexport.ExcelExport.ExcelSheetExport;
40import org.sleuthkit.datamodel.DataSource;
41import org.sleuthkit.datamodel.TskCoreException;
42
46@Messages({
47 "ExcelExportAction_moduleName=Data Source Summary",})
48class ExcelExportAction {
49
50 private static final Logger logger = Logger.getLogger(ExcelExportAction.class.getName());
51
57 ExcelExportAction() {
58 }
59
68 @NbBundle.Messages({
69 "ExcelExportAction_getXLSXPath_directory=DataSourceSummary",})
70 File getXLSXPath(String dataSourceName, String baseReportDir) {
71 // set initial path to reports directory with filename that is
72 // a combination of the data source name and time stamp
73 DateFormat dateFormat = new SimpleDateFormat("MM-dd-yyyy-HH-mm-ss");
74 String fileName = String.format("%s-%s.xlsx", dataSourceName == null ? "" : FileUtil.escapeFileName(dataSourceName), dateFormat.format(new Date()));
75 File reportsDirFile = Paths.get(baseReportDir, Bundle.ExcelExportAction_getXLSXPath_directory()).toFile();
76 if (!reportsDirFile.exists()) {
77 reportsDirFile.mkdirs();
78 }
79
80 return Paths.get(reportsDirFile.getAbsolutePath(), fileName).toFile();
81 }
82
94 @NbBundle.Messages({
95 "ExcelExportAction_exportToXLSX_beginExport=Beginning Export...",
96 "ExcelExportAction_exportToXLSX_gatheringRecentActivityData=Fetching Recent Activity Data",
97 "ExcelExportAction_exportToXLSX_gatheringContainerData=Fetching Container & Image Data",
98 "ExcelExportAction_exportToXLSX_gatheringTimelineData=Fetching Timeline Data",
99 "ExcelExportAction_exportToXLSX_gatheringFileData=Fetching File and MIME Type Data",
100 "ExcelExportAction_exportToXLSX_gatheringAnalysisData=Fetching Analysis Data",
101 "ExcelExportAction_exportToXLSX_gatheringPastData=Fetching Historical Data",
102 "ExcelExportAction_exportToXLSX_gatheringUserData=Fetching User Activity Data",
103 "ExcelExportAction_exportToXLSX_gatheringGeoData=Fetching Geolocation Data",
104 "ExcelExportAction_exportToXLSX_gatheringIngestData=Fetching Ingest History Data",
105 "ExcelExportAction_exportToXLSX_writingToFile=Writing to File...",})
106
107 void exportToXLSX(ReportProgressPanel progressPanel, DataSource dataSource, String baseReportDir)
108 throws IOException, ExcelExport.ExcelExportException {
109
110 File reportFile = getXLSXPath(dataSource.getName(), baseReportDir);
111 int totalWeight = 11;
112 int step = 1;
113 progressPanel.setIndeterminate(false);
114 progressPanel.setLabels(dataSource.getName(), reportFile.getPath());
115 progressPanel.setMaximumProgress(totalWeight);
116 progressPanel.updateStatusLabel(Bundle.ExcelExportAction_exportToXLSX_beginExport());
117 List<ExcelExport.ExcelSheetExport> sheetExports = new ArrayList<>();
118
119 // Export file and MIME type data
120 progressPanel.updateStatusLabel(Bundle.ExcelExportAction_exportToXLSX_gatheringFileData());
121 progressPanel.setProgress(step);
122 List<ExcelExport.ExcelSheetExport> exports = new ExportTypes().getExports(dataSource);
123 if (exports != null) {
124 sheetExports.addAll(exports);
125 }
126
127 // Export user activity
128 progressPanel.updateStatusLabel(Bundle.ExcelExportAction_exportToXLSX_gatheringUserData());
129 progressPanel.setProgress(++step);
130 exports = new ExportUserActivity().getExports(dataSource);
131 if (exports != null) {
132 sheetExports.addAll(exports);
133 }
134
135 // Export Recent Activity data
136 progressPanel.updateStatusLabel(Bundle.ExcelExportAction_exportToXLSX_gatheringRecentActivityData());
137 progressPanel.setProgress(++step);
138 exports = new ExportRecentFiles().getExports(dataSource);
139 if (exports != null) {
140 sheetExports.addAll(exports);
141 }
142
143 // Export hash set hits, keyword hits, and interesting item hits
144 progressPanel.updateStatusLabel(Bundle.ExcelExportAction_exportToXLSX_gatheringAnalysisData());
145 progressPanel.setProgress(++step);
146 exports = new ExportAnalysisResults().getExports(dataSource);
147 if (exports != null) {
148 sheetExports.addAll(exports);
149 }
150
151 // Export past cases data
152 progressPanel.updateStatusLabel(Bundle.ExcelExportAction_exportToXLSX_gatheringPastData());
153 progressPanel.setProgress(++step);
154 exports = new ExportPastCases().getExports(dataSource);
155 if (exports != null) {
156 sheetExports.addAll(exports);
157 }
158
159 // Export geolocation data
160 progressPanel.updateStatusLabel(Bundle.ExcelExportAction_exportToXLSX_gatheringGeoData());
161 progressPanel.setProgress(++step);
162 exports = new ExportGeolocation().getExports(dataSource);
163 if (exports != null) {
164 sheetExports.addAll(exports);
165 }
166
167 // Export Timeline data
168 progressPanel.updateStatusLabel(Bundle.ExcelExportAction_exportToXLSX_gatheringTimelineData());
169 progressPanel.setProgress(++step);
170 exports = new ExportTimeline().getExports(dataSource);
171 if (exports != null) {
172 sheetExports.addAll(exports);
173 }
174
175 // Export ingest history
176 progressPanel.updateStatusLabel(Bundle.ExcelExportAction_exportToXLSX_gatheringIngestData());
177 progressPanel.setProgress(++step);
178 exports = ExportIngestHistory.getExports(dataSource);
179 if (exports != null) {
180 sheetExports.addAll(exports);
181 }
182
183 // Export Container & Image info data
184 progressPanel.updateStatusLabel(Bundle.ExcelExportAction_exportToXLSX_gatheringContainerData());
185 progressPanel.setProgress(++step);
186 exports = new ExportContainerInfo().getExports(dataSource);
187 if (exports != null) {
188 sheetExports.addAll(exports);
189 }
190
191 progressPanel.updateStatusLabel(Bundle.ExcelExportAction_exportToXLSX_writingToFile());
192 progressPanel.setProgress(++step);
193 ExcelExport.writeExcel(sheetExports, reportFile);
194
195 try {
196 // add to reports
197 Case curCase = Case.getCurrentCaseThrows();
198 curCase.addReport(reportFile.getParent(),
199 Bundle.ExcelExportAction_moduleName(),
200 reportFile.getName(),
201 dataSource);
202 } catch (NoCurrentCaseException | TskCoreException ex) {
203 logger.log(Level.WARNING, "There was an error attaching report to case.", ex);
204 }
205 }
206
210 protected interface ExcelExportFunction<T> {
211
221 ExcelSheetExport convert(T data) throws ExcelExportException;
222 }
223
234 protected static <T> T getFetchResult(
235 DataFetcher<DataSource, T> dataFetcher,
236 String sheetName, DataSource ds) {
237
238 try {
239 return dataFetcher.runQuery(ds);
240 } catch (Exception ex) {
241 logger.log(Level.WARNING,
242 String.format("There was an error while acquiring data for exporting worksheet(s): '%s' for dataSource: %s",
243 sheetName == null ? "<null>" : sheetName,
244 ds == null || ds.getName() == null ? "<null>" : ds.getName()), ex);
245 return null;
246 }
247 }
248
260 protected static <T> ExcelSheetExport convertToExcel(ExcelExportFunction<T> excelConverter, T data, String sheetName) {
261 if (data == null) {
262 return null;
263 }
264
265 try {
266 return excelConverter.convert(data);
267 } catch (ExcelExportException ex) {
268 logger.log(Level.WARNING,
269 String.format("There was an error while preparing export of worksheet(s): '%s'",
270 sheetName == null ? "<null>" : sheetName), ex);
271 return null;
272 }
273 }
274
287 protected static <T> ExcelSheetExport getExport(
288 DataFetcher<DataSource, T> dataFetcher, ExcelExportFunction<T> excelConverter,
289 String sheetName, DataSource ds) {
290
291 T data = getFetchResult(dataFetcher, sheetName, ds);
292 return convertToExcel(excelConverter, data, sheetName);
293 }
294
304 protected static <T, C extends CellModel> ExcelSheetExport getTableExport(List<ColumnModel<T, C>> columnsModel,
305 String sheetName, List<T> data) {
306
307 return convertToExcel((dataList) -> new ExcelTableExport<>(sheetName, columnsModel, dataList),
308 data,
309 sheetName);
310 }
311
323 protected static <T, C extends CellModel> ExcelSheetExport getTableExport(
324 DataFetcher<DataSource, List<T>> dataFetcher, List<ColumnModel<T, C>> columnsModel,
325 String sheetName, DataSource ds) {
326
327 return getExport(dataFetcher,
328 (dataList) -> new ExcelTableExport<>(sheetName, columnsModel, dataList),
329 sheetName,
330 ds);
331 }
332}
void addReport(String localPath, String srcModuleName, String reportName)
Definition Case.java:1929
static String escapeFileName(String fileName)
synchronized static Logger getLogger(String name)
Definition Logger.java:124

Copyright © 2012-2024 Sleuth Kit Labs. Generated on:
This work is licensed under a Creative Commons Attribution-Share Alike 3.0 United States License.