Autopsy  4.6.0
Graphical digital forensics platform for The Sleuth Kit and other tools.
ImageDSProcessor.java
Go to the documentation of this file.
1 /*
2  * Autopsy Forensic Browser
3  *
4  * Copyright 2013-2018 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  */
19 package org.sleuthkit.autopsy.casemodule;
20 
21 import java.io.File;
22 import java.nio.file.Path;
23 import javax.swing.JPanel;
24 import java.util.ArrayList;
25 import java.util.Calendar;
26 import java.util.List;
27 import java.util.UUID;
28 import javax.swing.filechooser.FileFilter;
29 import org.openide.util.NbBundle;
30 import org.openide.util.lookup.ServiceProvider;
31 import org.openide.util.lookup.ServiceProviders;
37 
44 @ServiceProviders(value={
45  @ServiceProvider(service=DataSourceProcessor.class),
46  @ServiceProvider(service=AutoIngestDataSourceProcessor.class)}
47 )
49 
50  private final static String DATA_SOURCE_TYPE = NbBundle.getMessage(ImageDSProcessor.class, "ImageDSProcessor.dsType.text");
51  private static final List<String> allExt = new ArrayList<>();
55  private static final String ALL_DESC = NbBundle.getMessage(ImageDSProcessor.class, "ImageDSProcessor.allDesc.text");
56  private static final GeneralFilter allFilter = new GeneralFilter(allExt, ALL_DESC);
57  private static final List<FileFilter> filtersList = new ArrayList<>();
58  private final ImageFilePanel configPanel;
59  private AddImageTask addImageTask;
60  /*
61  * TODO: Remove the setDataSourceOptionsCalled flag and the settings fields
62  * when the deprecated method setDataSourceOptions is removed.
63  */
64  private String deviceId;
65  private String imagePath;
66  private int sectorSize;
67  private String timeZone;
68  private boolean ignoreFatOrphanFiles;
69  private boolean setDataSourceOptionsCalled;
70 
71  static {
72  filtersList.add(allFilter);
73  filtersList.add(rawFilter);
74  filtersList.add(encaseFilter);
75  filtersList.add(virtualMachineFilter);
76  allExt.addAll(GeneralFilter.RAW_IMAGE_EXTS);
77  allExt.addAll(GeneralFilter.ENCASE_IMAGE_EXTS);
78  allExt.addAll(GeneralFilter.VIRTUAL_MACHINE_EXTS);
79  }
80 
87  public ImageDSProcessor() {
88  configPanel = ImageFilePanel.createInstance(ImageDSProcessor.class.getName(), filtersList);
89  }
90 
98  public static String getType() {
99  return DATA_SOURCE_TYPE;
100  }
101 
109  @Override
110  public String getDataSourceType() {
111  return getType();
112  }
113 
122  @Override
123  public JPanel getPanel() {
124  configPanel.readSettings();
125  configPanel.select();
126  return configPanel;
127  }
128 
136  @Override
137  public boolean isPanelValid() {
138  return configPanel.validatePanel();
139  }
140 
155  @Override
156  public void run(DataSourceProcessorProgressMonitor progressMonitor, DataSourceProcessorCallback callback) {
157  if (!setDataSourceOptionsCalled) {
158  configPanel.storeSettings();
159  deviceId = UUID.randomUUID().toString();
160  imagePath = configPanel.getContentPaths();
161  sectorSize = configPanel.getSectorSize();
162  timeZone = configPanel.getTimeZone();
163  ignoreFatOrphanFiles = configPanel.getNoFatOrphans();
164  }
165  run(deviceId, imagePath, sectorSize, timeZone, ignoreFatOrphanFiles, progressMonitor, callback);
166  }
167 
189  public void run(String deviceId, String imagePath, String timeZone, boolean ignoreFatOrphanFiles, DataSourceProcessorProgressMonitor progressMonitor, DataSourceProcessorCallback callback) {
190  run(deviceId, imagePath, 0, timeZone, ignoreFatOrphanFiles, progressMonitor, callback);
191  }
192 
215  private void run(String deviceId, String imagePath, int sectorSize, String timeZone, boolean ignoreFatOrphanFiles, DataSourceProcessorProgressMonitor progressMonitor, DataSourceProcessorCallback callback) {
216  addImageTask = new AddImageTask(deviceId, imagePath, sectorSize, timeZone, ignoreFatOrphanFiles, null, progressMonitor, callback);
217  new Thread(addImageTask).start();
218  }
219 
227  @Override
228  public void cancel() {
229  if (null != addImageTask) {
230  addImageTask.cancelTask();
231  }
232  }
233 
238  @Override
239  public void reset() {
240  deviceId = null;
241  imagePath = null;
242  timeZone = null;
243  ignoreFatOrphanFiles = false;
244  configPanel.reset();
245  setDataSourceOptionsCalled = false;
246  }
247 
248  private static boolean isAcceptedByFiler(File file, List<FileFilter> filters) {
249  for (FileFilter filter : filters) {
250  if (filter.accept(file)) {
251  return true;
252  }
253  }
254  return false;
255  }
256 
257  @Override
258  public int canProcess(Path dataSourcePath) throws AutoIngestDataSourceProcessorException {
259 
260  // check file extension for supported types
261  if (!isAcceptedByFiler(dataSourcePath.toFile(), filtersList)) {
262  return 0;
263  }
264 
265  try {
266  // verify that the image has a file system that TSK can process
267  Case currentCase = Case.getOpenCase();
268  if (!DataSourceUtils.imageHasFileSystem(dataSourcePath)) {
269  // image does not have a file system that TSK can process
270  return 0;
271  }
272  } catch (Exception ex) {
273  throw new AutoIngestDataSourceProcessorException("Exception inside canProcess() method", ex);
274  }
275 
276  // able to process the data source
277  return 100;
278  }
279 
280  @Override
281  public void process(String deviceId, Path dataSourcePath, DataSourceProcessorProgressMonitor progressMonitor, DataSourceProcessorCallback callBack) {
282  this.deviceId = deviceId;
283  this.imagePath = dataSourcePath.toString();
284  this.sectorSize = 0;
285  this.timeZone = Calendar.getInstance().getTimeZone().getID();
286  this.ignoreFatOrphanFiles = false;
287  setDataSourceOptionsCalled = true;
288  run(deviceId, dataSourcePath.toString(), sectorSize, timeZone, ignoreFatOrphanFiles, progressMonitor, callBack);
289  }
290 
304  @Deprecated
305  public void setDataSourceOptions(String imagePath, String timeZone, boolean ignoreFatOrphanFiles) {
306  this.deviceId = UUID.randomUUID().toString();
307  this.imagePath = imagePath;
308  this.sectorSize = 0;
309  this.timeZone = Calendar.getInstance().getTimeZone().getID();
310  this.ignoreFatOrphanFiles = ignoreFatOrphanFiles;
311  setDataSourceOptionsCalled = true;
312  }
313 
314 }
void process(String deviceId, Path dataSourcePath, DataSourceProcessorProgressMonitor progressMonitor, DataSourceProcessorCallback callBack)
static boolean isAcceptedByFiler(File file, List< FileFilter > filters)
static synchronized ImageFilePanel createInstance(String context, List< FileFilter > fileChooserFilters)
void run(String deviceId, String imagePath, String timeZone, boolean ignoreFatOrphanFiles, DataSourceProcessorProgressMonitor progressMonitor, DataSourceProcessorCallback callback)
void run(String deviceId, String imagePath, int sectorSize, String timeZone, boolean ignoreFatOrphanFiles, DataSourceProcessorProgressMonitor progressMonitor, DataSourceProcessorCallback callback)
static final List< String > VIRTUAL_MACHINE_EXTS
static final List< String > ENCASE_IMAGE_EXTS
void setDataSourceOptions(String imagePath, String timeZone, boolean ignoreFatOrphanFiles)
static boolean imageHasFileSystem(Path dataSourcePath)
void run(DataSourceProcessorProgressMonitor progressMonitor, DataSourceProcessorCallback callback)

Copyright © 2012-2016 Basis Technology. Generated on: Mon May 7 2018
This work is licensed under a Creative Commons Attribution-Share Alike 3.0 United States License.